00001
00002
00003 #ifndef CbcHeuristicFeasibilityPump_H
00004 #define CbcHeuristicFeasibilityPump_H
00005
00006 #include "CbcHeuristic.hpp"
00007
00011 class CbcHeuristicFPump : public CbcHeuristic {
00012 public:
00013
00014
00015 CbcHeuristicFPump ();
00016
00017
00018 CbcHeuristicFPump (CbcModel & model,
00019 double downValue=0.5,bool roundExpensive=false);
00020
00021
00022 CbcHeuristicFPump ( const CbcHeuristicFPump &);
00023
00024
00025 ~CbcHeuristicFPump ();
00026
00028 CbcHeuristicFPump & operator=(const CbcHeuristicFPump& rhs);
00030 virtual CbcHeuristic * clone() const;
00032 virtual void generateCpp( FILE * fp) ;
00033
00035 virtual void resetModel(CbcModel * model);
00036
00038 virtual void setModel(CbcModel * model);
00039
00040 using CbcHeuristic::solution ;
00056 virtual int solution(double & objectiveValue,
00057 double * newSolution);
00058
00060 void setMaximumTime(double value);
00062 inline double maximumTime() const
00063 { return maximumTime_;}
00065 inline void setFakeCutoff(double value)
00066 { fakeCutoff_ = value;}
00068 inline double fakeCutoff() const
00069 { return fakeCutoff_;}
00071 inline void setAbsoluteIncrement(double value)
00072 { absoluteIncrement_ = value;}
00074 inline double absoluteIncrement() const
00075 { return absoluteIncrement_;}
00077 inline void setRelativeIncrement(double value)
00078 { relativeIncrement_ = value;}
00080 inline double relativeIncrement() const
00081 { return relativeIncrement_;}
00083 inline void setDefaultRounding(double value)
00084 { defaultRounding_ = value;}
00086 inline double defaultRounding() const
00087 { return defaultRounding_;}
00089 inline void setInitialWeight(double value)
00090 { initialWeight_ = value;}
00092 inline double initialWeight() const
00093 { return initialWeight_;}
00095 inline void setWeightFactor(double value)
00096 { weightFactor_ = value;}
00098 inline double weightFactor() const
00099 { return weightFactor_;}
00101 inline void setMaximumPasses(int value)
00102 { maximumPasses_=value;}
00104 inline int maximumPasses() const
00105 { return maximumPasses_;}
00107 inline void setMaximumRetries(int value)
00108 { maximumRetries_=value;}
00110 inline int maximumRetries() const
00111 { return maximumRetries_;}
00118 inline void setAccumulate(int value)
00119 { accumulate_=value;}
00121 inline int accumulate() const
00122 { return accumulate_;}
00128 inline void setFixOnReducedCosts(int value)
00129 { fixOnReducedCosts_=value;}
00131 inline int fixOnReducedCosts() const
00132 { return fixOnReducedCosts_;}
00133
00134 protected:
00135
00137 double startTime_;
00139 double maximumTime_;
00143 double fakeCutoff_;
00145 double absoluteIncrement_;
00147 double relativeIncrement_;
00149 double defaultRounding_;
00151 double initialWeight_;
00153 double weightFactor_;
00155 int maximumPasses_;
00159 int maximumRetries_;
00167 int accumulate_;
00173 int fixOnReducedCosts_;
00175 bool roundExpensive_;
00176
00177 private:
00182 int rounds(OsiSolverInterface * solver,double * solution, const double * objective,
00183 int numberIntegers, const int * integerVariable,
00184 char * pumpPrint,int & passNumber,
00185 bool roundExpensive=false,
00186 double downValue=0.5, int *flip=0);
00187
00188
00189
00190
00191 };
00192
00193
00194 #endif