00001
00002
00003 #ifndef CbcStrategy_H
00004 #define CbcStrategy_H
00005
00006 #include "CbcModel.hpp"
00007 class CglPreProcess;
00008 class CbcNodeInfo;
00009 class CbcNode;
00010 class CoinWarmStartDiff;
00011
00012
00015 class CbcStrategy {
00016 public:
00017
00018 CbcStrategy ();
00019
00020 virtual ~CbcStrategy();
00021
00023 virtual CbcStrategy * clone() const=0;
00024
00026 virtual void setupCutGenerators(CbcModel & model)=0;
00028 virtual void setupHeuristics(CbcModel & model)=0;
00030 virtual void setupPrinting(CbcModel & model,int modelLogLevel)=0;
00032 virtual void setupOther(CbcModel & model)=0;
00034 inline void setNested(int depth)
00035 { depth_=depth;}
00037 inline int getNested() const
00038 { return depth_;}
00040 inline void setPreProcessState(int state)
00041 { preProcessState_=state;}
00043 inline int preProcessState() const
00044 { return preProcessState_;}
00046 inline CglPreProcess * process() const
00047 { return process_;}
00049 void deletePreProcess();
00051 virtual CbcNodeInfo * fullNodeInfo(CbcModel * model,int numberRowsAtContinuous) const;
00053 virtual CbcNodeInfo * partialNodeInfo(CbcModel * model, CbcNodeInfo * parent, CbcNode * owner,
00054 int numberChangedBounds,const int * variables,
00055 const double * boundChanges,
00056 const CoinWarmStartDiff *basisDiff) const;
00058 virtual void generateCpp( FILE * fp) {}
00065 virtual int status(CbcModel * model, CbcNodeInfo * parent, int whereFrom);
00066 private:
00067
00069 CbcStrategy & operator=(const CbcStrategy& rhs);
00070 protected:
00071
00073 int depth_;
00079 int preProcessState_;
00081 CglPreProcess * process_;
00082 };
00083
00087 class CbcStrategyNull : public CbcStrategy {
00088 public:
00089
00090
00091 CbcStrategyNull () {}
00092
00093
00094 CbcStrategyNull ( const CbcStrategyNull & rhs) : CbcStrategy(rhs) {}
00095
00096
00097 ~CbcStrategyNull () {}
00098
00100 virtual CbcStrategy * clone() const { return new CbcStrategyNull(*this);}
00101
00103 virtual void setupCutGenerators(CbcModel & model) {}
00105 virtual void setupHeuristics(CbcModel & model) {}
00107 virtual void setupPrinting(CbcModel & model,int modelLogLevel) {}
00109 virtual void setupOther(CbcModel & model) {}
00110
00111 protected:
00112
00113 private:
00115 CbcStrategyNull & operator=(const CbcStrategyNull& rhs);
00116 };
00117
00121 class CbcStrategyDefault : public CbcStrategy {
00122 public:
00123
00124
00125 CbcStrategyDefault (bool cutsOnlyAtRoot=true,
00126 int numberStrong=5,
00127 int numberBeforeTrust=0,
00128 int printLevel=0);
00129
00130
00131 CbcStrategyDefault ( const CbcStrategyDefault &);
00132
00133
00134 ~CbcStrategyDefault ();
00135
00137 virtual CbcStrategy * clone() const;
00138
00140 virtual void setupCutGenerators(CbcModel & model);
00142 virtual void setupHeuristics(CbcModel & model);
00144 virtual void setupPrinting(CbcModel & model,int modelLogLevel) ;
00146 virtual void setupOther(CbcModel & model);
00148 inline void setupPreProcessing(int desired=1, int passes=10)
00149 { desiredPreProcess_=desired;preProcessPasses_=passes;}
00151 inline int desiredPreProcess() const
00152 { return desiredPreProcess_;}
00154 inline int preProcessPasses() const
00155 { return preProcessPasses_;}
00157 virtual void generateCpp( FILE * fp) ;
00158
00159 protected:
00160
00161
00162
00163 bool cutsOnlyAtRoot_;
00164
00165
00166 int numberStrong_;
00167
00168
00169 int numberBeforeTrust_;
00170
00171
00172 int printLevel_;
00173
00182 int desiredPreProcess_;
00184 int preProcessPasses_;
00185
00186 private:
00188 CbcStrategyDefault & operator=(const CbcStrategyDefault& rhs);
00189 };
00190
00191
00195 class CbcStrategyDefaultSubTree : public CbcStrategy {
00196 public:
00197
00198
00199 CbcStrategyDefaultSubTree (CbcModel * parent=NULL,bool cutsOnlyAtRoot=true,
00200 int numberStrong=5,
00201 int numberBeforeTrust=0,
00202 int printLevel=0);
00203
00204
00205 CbcStrategyDefaultSubTree ( const CbcStrategyDefaultSubTree &);
00206
00207
00208 ~CbcStrategyDefaultSubTree ();
00209
00211 virtual CbcStrategy * clone() const;
00212
00214 virtual void setupCutGenerators(CbcModel & model);
00216 virtual void setupHeuristics(CbcModel & model);
00218 virtual void setupPrinting(CbcModel & model,int modelLogLevel) ;
00220 virtual void setupOther(CbcModel & model);
00221 protected:
00222
00223
00224 CbcModel * parentModel_;
00225
00226 bool cutsOnlyAtRoot_;
00227
00228
00229 int numberStrong_;
00230
00231
00232 int numberBeforeTrust_;
00233
00234
00235 int printLevel_;
00236
00237 private:
00239 CbcStrategyDefaultSubTree & operator=(const CbcStrategyDefaultSubTree& rhs);
00240 };
00241
00242
00243 #endif