00001
00002
00003
00004 #ifndef CbcStrategy_H
00005 #define CbcStrategy_H
00006
00007 #include "CbcModel.hpp"
00008 class CglPreProcess;
00009 class CbcNodeInfo;
00010 class CbcNode;
00011 class CoinWarmStartDiff;
00012
00013
00016 class CbcStrategy {
00017 public:
00018
00019 CbcStrategy ();
00020
00021 virtual ~CbcStrategy();
00022
00024 virtual CbcStrategy * clone() const=0;
00025
00027 virtual void setupCutGenerators(CbcModel & model)=0;
00029 virtual void setupHeuristics(CbcModel & model)=0;
00031 virtual void setupPrinting(CbcModel & model,int modelLogLevel)=0;
00033 virtual void setupOther(CbcModel & model)=0;
00035 inline void setNested(int depth)
00036 { depth_=depth;}
00038 inline int getNested() const
00039 { return depth_;}
00041 inline void setPreProcessState(int state)
00042 { preProcessState_=state;}
00044 inline int preProcessState() const
00045 { return preProcessState_;}
00047 inline CglPreProcess * process() const
00048 { return process_;}
00050 void deletePreProcess();
00052 virtual CbcNodeInfo * fullNodeInfo(CbcModel * model,int numberRowsAtContinuous) const;
00054 virtual CbcNodeInfo * partialNodeInfo(CbcModel * model, CbcNodeInfo * parent, CbcNode * owner,
00055 int numberChangedBounds,const int * variables,
00056 const double * boundChanges,
00057 const CoinWarmStartDiff *basisDiff) const;
00059 virtual void generateCpp( FILE * ) {}
00066 virtual int status(CbcModel * model, CbcNodeInfo * parent, int whereFrom);
00067 private:
00068
00070 CbcStrategy & operator=(const CbcStrategy& rhs);
00071 protected:
00072
00074 int depth_;
00080 int preProcessState_;
00082 CglPreProcess * process_;
00083 };
00084
00088 class CbcStrategyNull : public CbcStrategy {
00089 public:
00090
00091
00092 CbcStrategyNull () {}
00093
00094
00095 CbcStrategyNull ( const CbcStrategyNull & rhs) : CbcStrategy(rhs) {}
00096
00097
00098 ~CbcStrategyNull () {}
00099
00101 virtual CbcStrategy * clone() const { return new CbcStrategyNull(*this);}
00102
00104 virtual void setupCutGenerators(CbcModel & ) {}
00106 virtual void setupHeuristics(CbcModel & ) {}
00108 virtual void setupPrinting(CbcModel & ,int ) {}
00110 virtual void setupOther(CbcModel & ) {}
00111
00112 protected:
00113
00114 private:
00116 CbcStrategyNull & operator=(const CbcStrategyNull& rhs);
00117 };
00118
00122 class CbcStrategyDefault : public CbcStrategy {
00123 public:
00124
00125
00126 CbcStrategyDefault (int cutsOnlyAtRoot=1,
00127 int numberStrong=5,
00128 int numberBeforeTrust=0,
00129 int printLevel=0);
00130
00131
00132 CbcStrategyDefault ( const CbcStrategyDefault &);
00133
00134
00135 ~CbcStrategyDefault ();
00136
00138 virtual CbcStrategy * clone() const;
00139
00141 virtual void setupCutGenerators(CbcModel & model);
00143 virtual void setupHeuristics(CbcModel & model);
00145 virtual void setupPrinting(CbcModel & model,int modelLogLevel) ;
00147 virtual void setupOther(CbcModel & model);
00149 inline void setupPreProcessing(int desired=1, int passes=10)
00150 { desiredPreProcess_=desired;preProcessPasses_=passes;}
00152 inline int desiredPreProcess() const
00153 { return desiredPreProcess_;}
00155 inline int preProcessPasses() const
00156 { return preProcessPasses_;}
00158 virtual void generateCpp( FILE * fp) ;
00159
00160 protected:
00161
00162
00163
00164 int cutsOnlyAtRoot_;
00165
00166
00167 int numberStrong_;
00168
00169
00170 int numberBeforeTrust_;
00171
00172
00173 int printLevel_;
00174
00183 int desiredPreProcess_;
00185 int preProcessPasses_;
00186
00187 private:
00189 CbcStrategyDefault & operator=(const CbcStrategyDefault& rhs);
00190 };
00191
00192
00196 class CbcStrategyDefaultSubTree : public CbcStrategy {
00197 public:
00198
00199
00200 CbcStrategyDefaultSubTree (CbcModel * parent=NULL,int cutsOnlyAtRoot=1,
00201 int numberStrong=5,
00202 int numberBeforeTrust=0,
00203 int printLevel=0);
00204
00205
00206 CbcStrategyDefaultSubTree ( const CbcStrategyDefaultSubTree &);
00207
00208
00209 ~CbcStrategyDefaultSubTree ();
00210
00212 virtual CbcStrategy * clone() const;
00213
00215 virtual void setupCutGenerators(CbcModel & model);
00217 virtual void setupHeuristics(CbcModel & model);
00219 virtual void setupPrinting(CbcModel & model,int modelLogLevel) ;
00221 virtual void setupOther(CbcModel & model);
00222 protected:
00223
00224
00225 CbcModel * parentModel_;
00226
00227 int cutsOnlyAtRoot_;
00228
00229
00230 int numberStrong_;
00231
00232
00233 int numberBeforeTrust_;
00234
00235
00236 int printLevel_;
00237
00238 private:
00240 CbcStrategyDefaultSubTree & operator=(const CbcStrategyDefaultSubTree& rhs);
00241 };
00242
00243
00244 #endif