00001
00002
00003
00004
00005
00006 #ifndef CbcStrategy_H
00007 #define CbcStrategy_H
00008
00009 #include "CbcModel.hpp"
00010 class CglPreProcess;
00011 class CbcNodeInfo;
00012 class CbcNode;
00013 class CoinWarmStartDiff;
00014
00015
00018 class CbcStrategy {
00019 public:
00020
00021 CbcStrategy ();
00022
00023 virtual ~CbcStrategy();
00024
00026 virtual CbcStrategy * clone() const = 0;
00027
00029 virtual void setupCutGenerators(CbcModel & model) = 0;
00031 virtual void setupHeuristics(CbcModel & model) = 0;
00033 virtual void setupPrinting(CbcModel & model, int modelLogLevel) = 0;
00035 virtual void setupOther(CbcModel & model) = 0;
00037 inline void setNested(int depth) {
00038 depth_ = depth;
00039 }
00041 inline int getNested() const {
00042 return depth_;
00043 }
00045 inline void setPreProcessState(int state) {
00046 preProcessState_ = state;
00047 }
00049 inline int preProcessState() const {
00050 return preProcessState_;
00051 }
00053 inline CglPreProcess * process() const {
00054 return process_;
00055 }
00057 void deletePreProcess();
00059 virtual CbcNodeInfo * fullNodeInfo(CbcModel * model, int numberRowsAtContinuous) const;
00061 virtual CbcNodeInfo * partialNodeInfo(CbcModel * model, CbcNodeInfo * parent, CbcNode * owner,
00062 int numberChangedBounds, const int * variables,
00063 const double * boundChanges,
00064 const CoinWarmStartDiff *basisDiff) const;
00066 virtual void generateCpp( FILE * ) {}
00073 virtual int status(CbcModel * model, CbcNodeInfo * parent, int whereFrom);
00074 private:
00075
00077 CbcStrategy & operator=(const CbcStrategy& rhs);
00078 protected:
00079
00081 int depth_;
00087 int preProcessState_;
00089 CglPreProcess * process_;
00090 };
00091
00095 class CbcStrategyNull : public CbcStrategy {
00096 public:
00097
00098
00099 CbcStrategyNull () {}
00100
00101
00102 CbcStrategyNull ( const CbcStrategyNull & rhs) : CbcStrategy(rhs) {}
00103
00104
00105 ~CbcStrategyNull () {}
00106
00108 virtual CbcStrategy * clone() const {
00109 return new CbcStrategyNull(*this);
00110 }
00111
00113 virtual void setupCutGenerators(CbcModel & ) {}
00115 virtual void setupHeuristics(CbcModel & ) {}
00117 virtual void setupPrinting(CbcModel & , int ) {}
00119 virtual void setupOther(CbcModel & ) {}
00120
00121 protected:
00122
00123 private:
00125 CbcStrategyNull & operator=(const CbcStrategyNull& rhs);
00126 };
00127
00131 class CbcStrategyDefault : public CbcStrategy {
00132 public:
00133
00134
00135 CbcStrategyDefault (int cutsOnlyAtRoot = 1,
00136 int numberStrong = 5,
00137 int numberBeforeTrust = 0,
00138 int printLevel = 0);
00139
00140
00141 CbcStrategyDefault ( const CbcStrategyDefault &);
00142
00143
00144 ~CbcStrategyDefault ();
00145
00147 virtual CbcStrategy * clone() const;
00148
00150 virtual void setupCutGenerators(CbcModel & model);
00152 virtual void setupHeuristics(CbcModel & model);
00154 virtual void setupPrinting(CbcModel & model, int modelLogLevel) ;
00156 virtual void setupOther(CbcModel & model);
00158 inline void setupPreProcessing(int desired = 1, int passes = 10) {
00159 desiredPreProcess_ = desired;
00160 preProcessPasses_ = passes;
00161 }
00163 inline int desiredPreProcess() const {
00164 return desiredPreProcess_;
00165 }
00167 inline int preProcessPasses() const {
00168 return preProcessPasses_;
00169 }
00171 virtual void generateCpp( FILE * fp) ;
00172
00173 protected:
00174
00175
00176
00177 int cutsOnlyAtRoot_;
00178
00179
00180 int numberStrong_;
00181
00182
00183 int numberBeforeTrust_;
00184
00185
00186 int printLevel_;
00187
00196 int desiredPreProcess_;
00198 int preProcessPasses_;
00199
00200 private:
00202 CbcStrategyDefault & operator=(const CbcStrategyDefault& rhs);
00203 };
00204
00205
00209 class CbcStrategyDefaultSubTree : public CbcStrategy {
00210 public:
00211
00212
00213 CbcStrategyDefaultSubTree (CbcModel * parent = NULL, int cutsOnlyAtRoot = 1,
00214 int numberStrong = 5,
00215 int numberBeforeTrust = 0,
00216 int printLevel = 0);
00217
00218
00219 CbcStrategyDefaultSubTree ( const CbcStrategyDefaultSubTree &);
00220
00221
00222 ~CbcStrategyDefaultSubTree ();
00223
00225 virtual CbcStrategy * clone() const;
00226
00228 virtual void setupCutGenerators(CbcModel & model);
00230 virtual void setupHeuristics(CbcModel & model);
00232 virtual void setupPrinting(CbcModel & model, int modelLogLevel) ;
00234 virtual void setupOther(CbcModel & model);
00235 protected:
00236
00237
00238 CbcModel * parentModel_;
00239
00240 int cutsOnlyAtRoot_;
00241
00242
00243 int numberStrong_;
00244
00245
00246 int numberBeforeTrust_;
00247
00248
00249 int printLevel_;
00250
00251 private:
00253 CbcStrategyDefaultSubTree & operator=(const CbcStrategyDefaultSubTree& rhs);
00254 };
00255
00256
00257 #endif
00258