Cbc trunk
|
00001 /* $Id$ */ 00002 // Copyright (C) 2005, International Business Machines 00003 // Corporation and others. All Rights Reserved. 00004 // This code is licensed under the terms of the Eclipse Public License (EPL). 00005 00006 #ifndef CbcHeuristicGreedy_H 00007 #define CbcHeuristicGreedy_H 00008 00009 #include "CbcHeuristic.hpp" 00013 class CbcHeuristicGreedyCover : public CbcHeuristic { 00014 public: 00015 00016 // Default Constructor 00017 CbcHeuristicGreedyCover (); 00018 00019 /* Constructor with model - assumed before cuts 00020 Initial version does not do Lps 00021 */ 00022 CbcHeuristicGreedyCover (CbcModel & model); 00023 00024 // Copy constructor 00025 CbcHeuristicGreedyCover ( const CbcHeuristicGreedyCover &); 00026 00027 // Destructor 00028 ~CbcHeuristicGreedyCover (); 00029 00031 virtual CbcHeuristic * clone() const; 00033 CbcHeuristicGreedyCover & operator=(const CbcHeuristicGreedyCover& rhs); 00035 virtual void generateCpp( FILE * fp) ; 00036 00038 virtual void setModel(CbcModel * model); 00039 00040 using CbcHeuristic::solution ; 00051 virtual int solution(double & objectiveValue, 00052 double * newSolution); 00054 virtual void validate() ; 00056 virtual void resetModel(CbcModel * model); 00057 /* Algorithm 00058 0 - use current upper bounds 00059 1 - use original upper bounds 00060 If 10 added perturb ratios more 00061 if 100 added round up all >=0.5 00062 */ 00063 inline int algorithm() const { 00064 return algorithm_; 00065 } 00066 inline void setAlgorithm(int value) { 00067 algorithm_ = value; 00068 } 00069 // Only do this many times 00070 inline int numberTimes() const { 00071 return numberTimes_; 00072 } 00073 inline void setNumberTimes(int value) { 00074 numberTimes_ = value; 00075 } 00076 00077 protected: 00079 void gutsOfConstructor(CbcModel * model); 00080 // Data 00081 00082 // Original matrix by column 00083 CoinPackedMatrix matrix_; 00084 // original number of rows 00085 int originalNumberRows_; 00086 /* Algorithm 00087 0 - use current upper bounds 00088 1 - use original upper bounds 00089 If 10 added perturb ratios more 00090 */ 00091 int algorithm_; 00093 int numberTimes_; 00094 00095 }; 00096 00097 00098 class CbcHeuristicGreedyEquality : public CbcHeuristic { 00099 public: 00100 00101 // Default Constructor 00102 CbcHeuristicGreedyEquality (); 00103 00104 /* Constructor with model - assumed before cuts 00105 Initial version does not do Lps 00106 */ 00107 CbcHeuristicGreedyEquality (CbcModel & model); 00108 00109 // Copy constructor 00110 CbcHeuristicGreedyEquality ( const CbcHeuristicGreedyEquality &); 00111 00112 // Destructor 00113 ~CbcHeuristicGreedyEquality (); 00114 00116 virtual CbcHeuristic * clone() const; 00118 CbcHeuristicGreedyEquality & operator=(const CbcHeuristicGreedyEquality& rhs); 00120 virtual void generateCpp( FILE * fp) ; 00121 00123 virtual void setModel(CbcModel * model); 00124 00125 using CbcHeuristic::solution ; 00136 virtual int solution(double & objectiveValue, 00137 double * newSolution); 00139 virtual void validate() ; 00141 virtual void resetModel(CbcModel * model); 00142 /* Algorithm 00143 0 - use current upper bounds 00144 1 - use original upper bounds 00145 If 10 added perturb ratios more 00146 if 100 added round up all >=0.5 00147 */ 00148 inline int algorithm() const { 00149 return algorithm_; 00150 } 00151 inline void setAlgorithm(int value) { 00152 algorithm_ = value; 00153 } 00154 // Fraction of rhs to cover before branch and cut 00155 inline void setFraction(double value) { 00156 fraction_ = value; 00157 } 00158 inline double fraction() const { 00159 return fraction_; 00160 } 00161 // Only do this many times 00162 inline int numberTimes() const { 00163 return numberTimes_; 00164 } 00165 inline void setNumberTimes(int value) { 00166 numberTimes_ = value; 00167 } 00168 protected: 00170 void gutsOfConstructor(CbcModel * model); 00171 // Data 00172 00173 // Original matrix by column 00174 CoinPackedMatrix matrix_; 00175 // Fraction of rhs to cover before branch and cut 00176 double fraction_; 00177 // original number of rows 00178 int originalNumberRows_; 00179 /* Algorithm 00180 0 - use current upper bounds 00181 1 - use original upper bounds 00182 If 10 added perturb ratios more 00183 */ 00184 int algorithm_; 00186 int numberTimes_; 00187 00188 }; 00189 00193 class CbcHeuristicGreedySOS : public CbcHeuristic { 00194 public: 00195 00196 // Default Constructor 00197 CbcHeuristicGreedySOS (); 00198 00199 /* Constructor with model - assumed before cuts 00200 Initial version does not do Lps 00201 */ 00202 CbcHeuristicGreedySOS (CbcModel & model); 00203 00204 // Copy constructor 00205 CbcHeuristicGreedySOS ( const CbcHeuristicGreedySOS &); 00206 00207 // Destructor 00208 ~CbcHeuristicGreedySOS (); 00209 00211 virtual CbcHeuristic * clone() const; 00213 CbcHeuristicGreedySOS & operator=(const CbcHeuristicGreedySOS& rhs); 00215 virtual void generateCpp( FILE * fp) ; 00216 00218 virtual void setModel(CbcModel * model); 00219 00220 using CbcHeuristic::solution ; 00231 virtual int solution(double & objectiveValue, 00232 double * newSolution); 00234 virtual void validate() ; 00236 virtual void resetModel(CbcModel * model); 00237 /* Algorithm 00238 Bits 00239 1 bit - use current model, otherwise original 00240 2 - use current solution as starting point, otherwise pure greedy 00241 4 - as 2 but use merit not merit/size 00242 8 - use duals to modify greedy 00243 16 - use duals on GUB/SOS in special way 00244 */ 00245 inline int algorithm() const { 00246 return algorithm_; 00247 } 00248 inline void setAlgorithm(int value) { 00249 algorithm_ = value; 00250 } 00251 // Only do this many times 00252 inline int numberTimes() const { 00253 return numberTimes_; 00254 } 00255 inline void setNumberTimes(int value) { 00256 numberTimes_ = value; 00257 } 00258 00259 protected: 00261 void gutsOfConstructor(CbcModel * model); 00262 // Data 00263 00264 // Original RHS - if -1.0 then SOS otherwise <= value 00265 double * originalRhs_; 00266 // Original matrix by column 00267 CoinPackedMatrix matrix_; 00268 // original number of rows 00269 int originalNumberRows_; 00270 /* Algorithm 00271 */ 00272 int algorithm_; 00274 int numberTimes_; 00275 00276 }; 00277 00278 00279 #endif 00280