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 setArtificialCost(double value)
00102 { artificialCost_ = value;}
00104 inline double artificialCost() const
00105 { return artificialCost_;}
00107 inline double iterationRatio() const
00108 { return iterationRatio_;}
00110 inline void setIterationRatio(double value)
00111 { iterationRatio_ = value;}
00113 inline void setMaximumPasses(int value)
00114 { maximumPasses_=value;}
00116 inline int maximumPasses() const
00117 { return maximumPasses_;}
00119 inline void setMaximumRetries(int value)
00120 { maximumRetries_=value;}
00122 inline int maximumRetries() const
00123 { return maximumRetries_;}
00130 inline void setAccumulate(int value)
00131 { accumulate_=value;}
00133 inline int accumulate() const
00134 { return accumulate_;}
00140 inline void setFixOnReducedCosts(int value)
00141 { fixOnReducedCosts_=value;}
00143 inline int fixOnReducedCosts() const
00144 { return fixOnReducedCosts_;}
00145
00146 protected:
00147
00149 double startTime_;
00151 double maximumTime_;
00155 double fakeCutoff_;
00157 double absoluteIncrement_;
00159 double relativeIncrement_;
00161 double defaultRounding_;
00163 double initialWeight_;
00165 double weightFactor_;
00167 double artificialCost_;
00170 double iterationRatio_;
00172 int maximumPasses_;
00176 int maximumRetries_;
00184 int accumulate_;
00190 int fixOnReducedCosts_;
00192 bool roundExpensive_;
00193
00194 private:
00199 int rounds(OsiSolverInterface * solver,double * solution, const double * objective,
00200 int numberIntegers, const int * integerVariable,
00201 char * pumpPrint,int & passNumber,
00202 bool roundExpensive=false,
00203 double downValue=0.5, int *flip=0);
00204
00205
00206
00207
00208 };
00209
00210
00211 #endif