00001
00002
00003 #ifndef CbcHeuristicFeasibilityPump_H
00004 #define CbcHeuristicFeasibilityPump_H
00005
00006 #include "CbcHeuristic.hpp"
00007 #include "OsiClpSolverInterface.hpp"
00008
00012 class CbcHeuristicFPump : public CbcHeuristic {
00013 public:
00014
00015
00016 CbcHeuristicFPump ();
00017
00018
00019 CbcHeuristicFPump (CbcModel & model,
00020 double downValue=0.5,bool roundExpensive=false);
00021
00022
00023 CbcHeuristicFPump ( const CbcHeuristicFPump &);
00024
00025
00026 ~CbcHeuristicFPump ();
00027
00029 CbcHeuristicFPump & operator=(const CbcHeuristicFPump& rhs);
00031 virtual CbcHeuristic * clone() const;
00033 virtual void generateCpp( FILE * fp) ;
00034
00036 virtual void resetModel(CbcModel * model);
00037
00039 virtual void setModel(CbcModel * model);
00040
00041 using CbcHeuristic::solution ;
00057 virtual int solution(double & objectiveValue,
00058 double * newSolution);
00059
00061 void setMaximumTime(double value);
00063 inline double maximumTime() const
00064 { return maximumTime_;}
00066 inline void setFakeCutoff(double value)
00067 { fakeCutoff_ = value;}
00069 inline double fakeCutoff() const
00070 { return fakeCutoff_;}
00072 inline void setAbsoluteIncrement(double value)
00073 { absoluteIncrement_ = value;}
00075 inline double absoluteIncrement() const
00076 { return absoluteIncrement_;}
00078 inline void setRelativeIncrement(double value)
00079 { relativeIncrement_ = value;}
00081 inline double relativeIncrement() const
00082 { return relativeIncrement_;}
00084 inline void setDefaultRounding(double value)
00085 { defaultRounding_ = value;}
00087 inline double defaultRounding() const
00088 { return defaultRounding_;}
00090 inline void setInitialWeight(double value)
00091 { initialWeight_ = value;}
00093 inline double initialWeight() const
00094 { return initialWeight_;}
00096 inline void setWeightFactor(double value)
00097 { weightFactor_ = value;}
00099 inline double weightFactor() const
00100 { return weightFactor_;}
00102 inline void setArtificialCost(double value)
00103 { artificialCost_ = value;}
00105 inline double artificialCost() const
00106 { return artificialCost_;}
00108 inline double iterationRatio() const
00109 { return iterationRatio_;}
00111 inline void setIterationRatio(double value)
00112 { iterationRatio_ = value;}
00114 inline void setMaximumPasses(int value)
00115 { maximumPasses_=value;}
00117 inline int maximumPasses() const
00118 { return maximumPasses_;}
00120 inline void setMaximumRetries(int value)
00121 { maximumRetries_=value;}
00123 inline int maximumRetries() const
00124 { return maximumRetries_;}
00131 inline void setAccumulate(int value)
00132 { accumulate_=value;}
00134 inline int accumulate() const
00135 { return accumulate_;}
00141 inline void setFixOnReducedCosts(int value)
00142 { fixOnReducedCosts_=value;}
00144 inline int fixOnReducedCosts() const
00145 { return fixOnReducedCosts_;}
00146
00147 protected:
00148
00150 double startTime_;
00152 double maximumTime_;
00156 double fakeCutoff_;
00158 double absoluteIncrement_;
00160 double relativeIncrement_;
00162 double defaultRounding_;
00164 double initialWeight_;
00166 double weightFactor_;
00168 double artificialCost_;
00171 double iterationRatio_;
00173 int maximumPasses_;
00177 int maximumRetries_;
00187 int accumulate_;
00193 int fixOnReducedCosts_;
00195 bool roundExpensive_;
00196
00197 private:
00202 int rounds(OsiSolverInterface * solver,double * solution, const double * objective,
00203 int numberIntegers, const int * integerVariable,
00204 char * pumpPrint,int passNumber,
00205 bool roundExpensive=false,
00206 double downValue=0.5, int *flip=0);
00207
00208
00209
00210
00211 };
00212
00213 # ifdef COIN_HAS_CLP
00214
00215 class CbcDisasterHandler : public OsiClpDisasterHandler {
00216 public:
00220 #if 0
00222 virtual void intoSimplex();
00224 virtual bool check() const ;
00226 virtual void saveInfo();
00227 #endif
00229 virtual int typeOfDisaster();
00230
00231
00232
00237 CbcDisasterHandler(CbcModel * model = NULL);
00239 virtual ~CbcDisasterHandler();
00240
00241 CbcDisasterHandler(const CbcDisasterHandler&);
00242
00243 CbcDisasterHandler& operator=(const CbcDisasterHandler&);
00245 virtual ClpDisasterHandler * clone() const;
00246
00248
00253 void setCbcModel(CbcModel * model);
00255 inline CbcModel * cbcModel() const
00256 { return cbcModel_;}
00257
00259
00260
00261 protected:
00265
00266 CbcModel * cbcModel_;
00267
00269 };
00270 #endif
00271
00272 #endif