00001 /* $Id: CbcHeuristicFPump.hpp 1271 2009-11-05 15:57:25Z forrest $ */ 00002 // Copyright (C) 2004, International Business Machines 00003 // Corporation and others. All Rights Reserved. 00004 #ifndef CbcHeuristicFeasibilityPump_H 00005 #define CbcHeuristicFeasibilityPump_H 00006 00007 #include "CbcHeuristic.hpp" 00008 #include "OsiClpSolverInterface.hpp" 00009 00013 class CbcHeuristicFPump : public CbcHeuristic { 00014 public: 00015 00016 // Default Constructor 00017 CbcHeuristicFPump (); 00018 00019 // Constructor with model - assumed before cuts 00020 CbcHeuristicFPump (CbcModel & model, 00021 double downValue=0.5,bool roundExpensive=false); 00022 00023 // Copy constructor 00024 CbcHeuristicFPump ( const CbcHeuristicFPump &); 00025 00026 // Destructor 00027 ~CbcHeuristicFPump (); 00028 00030 CbcHeuristicFPump & operator=(const CbcHeuristicFPump& rhs); 00032 virtual CbcHeuristic * clone() const; 00034 virtual void generateCpp( FILE * fp) ; 00035 00037 virtual void resetModel(CbcModel * model); 00038 00040 virtual void setModel(CbcModel * model); 00041 00042 using CbcHeuristic::solution ; 00058 virtual int solution(double & objectiveValue, 00059 double * newSolution); 00060 00062 void setMaximumTime(double value); 00064 inline double maximumTime() const 00065 { return maximumTime_;} 00067 inline void setFakeCutoff(double value) 00068 { fakeCutoff_ = value;} 00070 inline double fakeCutoff() const 00071 { return fakeCutoff_;} 00073 inline void setAbsoluteIncrement(double value) 00074 { absoluteIncrement_ = value;} 00076 inline double absoluteIncrement() const 00077 { return absoluteIncrement_;} 00079 inline void setRelativeIncrement(double value) 00080 { relativeIncrement_ = value;} 00082 inline double relativeIncrement() const 00083 { return relativeIncrement_;} 00085 inline void setDefaultRounding(double value) 00086 { defaultRounding_ = value;} 00088 inline double defaultRounding() const 00089 { return defaultRounding_;} 00091 inline void setInitialWeight(double value) 00092 { initialWeight_ = value;} 00094 inline double initialWeight() const 00095 { return initialWeight_;} 00097 inline void setWeightFactor(double value) 00098 { weightFactor_ = value;} 00100 inline double weightFactor() const 00101 { return weightFactor_;} 00103 inline void setArtificialCost(double value) 00104 { artificialCost_ = value;} 00106 inline double artificialCost() const 00107 { return artificialCost_;} 00109 inline double iterationRatio() const 00110 { return iterationRatio_;} 00112 inline void setIterationRatio(double value) 00113 { iterationRatio_ = value;} 00115 inline void setMaximumPasses(int value) 00116 { maximumPasses_=value;} 00118 inline int maximumPasses() const 00119 { return maximumPasses_;} 00121 inline void setMaximumRetries(int value) 00122 { maximumRetries_=value;} 00124 inline int maximumRetries() const 00125 { return maximumRetries_;} 00134 inline void setAccumulate(int value) 00135 { accumulate_=value;} 00137 inline int accumulate() const 00138 { return accumulate_;} 00144 inline void setFixOnReducedCosts(int value) 00145 { fixOnReducedCosts_=value;} 00147 inline int fixOnReducedCosts() const 00148 { return fixOnReducedCosts_;} 00153 inline void setReducedCostMultiplier(double value) 00154 { reducedCostMultiplier_=value;} 00156 inline double reducedCostMultiplier() const 00157 { return reducedCostMultiplier_;} 00158 00159 protected: 00160 // Data 00162 double startTime_; 00164 double maximumTime_; 00168 double fakeCutoff_; 00170 double absoluteIncrement_; 00172 double relativeIncrement_; 00174 double defaultRounding_; 00176 double initialWeight_; 00178 double weightFactor_; 00180 double artificialCost_; 00183 double iterationRatio_; 00188 double reducedCostMultiplier_; 00190 int maximumPasses_; 00194 int maximumRetries_; 00205 int accumulate_; 00211 int fixOnReducedCosts_; 00213 bool roundExpensive_; 00214 00215 private: 00220 int rounds(OsiSolverInterface * solver,double * solution, 00221 /*const double * objective, */ 00222 int numberIntegers, const int * integerVariable, 00223 /*char * pumpPrint,*/int passNumber, 00224 /*bool roundExpensive=false,*/ 00225 double downValue=0.5, int *flip=0); 00226 /* note for eagle eyed readers. 00227 when_ can now be exotic - 00228 <=10 normal 00229 */ 00230 }; 00231 00232 # ifdef COIN_HAS_CLP 00233 00234 class CbcDisasterHandler : public OsiClpDisasterHandler { 00235 public: 00239 #if 0 00240 00241 virtual void intoSimplex(); 00243 virtual bool check() const ; 00245 virtual void saveInfo(); 00246 #endif 00247 00248 virtual int typeOfDisaster(); 00250 00251 00256 CbcDisasterHandler(CbcModel * model = NULL); 00258 virtual ~CbcDisasterHandler(); 00259 // Copy 00260 CbcDisasterHandler(const CbcDisasterHandler&); 00261 // Assignment 00262 CbcDisasterHandler& operator=(const CbcDisasterHandler&); 00264 virtual ClpDisasterHandler * clone() const; 00265 00267 00272 void setCbcModel(CbcModel * model); 00274 inline CbcModel * cbcModel() const 00275 { return cbcModel_;} 00276 00278 00279 00280 protected: 00284 00285 CbcModel * cbcModel_; 00286 00288 }; 00289 #endif 00290 00291 #endif