Go to the documentation of this file.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;
00037 }
00039 inline int getNested() const {
00040 return depth_;
00041 }
00043 inline void setPreProcessState(int state) {
00044 preProcessState_ = state;
00045 }
00047 inline int preProcessState() const {
00048 return preProcessState_;
00049 }
00051 inline CglPreProcess * process() const {
00052 return process_;
00053 }
00055 void deletePreProcess();
00057 virtual CbcNodeInfo * fullNodeInfo(CbcModel * model, int numberRowsAtContinuous) const;
00059 virtual CbcNodeInfo * partialNodeInfo(CbcModel * model, CbcNodeInfo * parent, CbcNode * owner,
00060 int numberChangedBounds, const int * variables,
00061 const double * boundChanges,
00062 const CoinWarmStartDiff *basisDiff) const;
00064 virtual void generateCpp( FILE * ) {}
00071 virtual int status(CbcModel * model, CbcNodeInfo * parent, int whereFrom);
00072 private:
00073
00075 CbcStrategy & operator=(const CbcStrategy& rhs);
00076 protected:
00077
00079 int depth_;
00085 int preProcessState_;
00087 CglPreProcess * process_;
00088 };
00089
00093 class CbcStrategyNull : public CbcStrategy {
00094 public:
00095
00096
00097 CbcStrategyNull () {}
00098
00099
00100 CbcStrategyNull ( const CbcStrategyNull & rhs) : CbcStrategy(rhs) {}
00101
00102
00103 ~CbcStrategyNull () {}
00104
00106 virtual CbcStrategy * clone() const {
00107 return new CbcStrategyNull(*this);
00108 }
00109
00111 virtual void setupCutGenerators(CbcModel & ) {}
00113 virtual void setupHeuristics(CbcModel & ) {}
00115 virtual void setupPrinting(CbcModel & , int ) {}
00117 virtual void setupOther(CbcModel & ) {}
00118
00119 protected:
00120
00121 private:
00123 CbcStrategyNull & operator=(const CbcStrategyNull& rhs);
00124 };
00125
00129 class CbcStrategyDefault : public CbcStrategy {
00130 public:
00131
00132
00133 CbcStrategyDefault (int cutsOnlyAtRoot = 1,
00134 int numberStrong = 5,
00135 int numberBeforeTrust = 0,
00136 int printLevel = 0);
00137
00138
00139 CbcStrategyDefault ( const CbcStrategyDefault &);
00140
00141
00142 ~CbcStrategyDefault ();
00143
00145 virtual CbcStrategy * clone() const;
00146
00148 virtual void setupCutGenerators(CbcModel & model);
00150 virtual void setupHeuristics(CbcModel & model);
00152 virtual void setupPrinting(CbcModel & model, int modelLogLevel) ;
00154 virtual void setupOther(CbcModel & model);
00156 inline void setupPreProcessing(int desired = 1, int passes = 10) {
00157 desiredPreProcess_ = desired;
00158 preProcessPasses_ = passes;
00159 }
00161 inline int desiredPreProcess() const {
00162 return desiredPreProcess_;
00163 }
00165 inline int preProcessPasses() const {
00166 return preProcessPasses_;
00167 }
00169 virtual void generateCpp( FILE * fp) ;
00170
00171 protected:
00172
00173
00174
00175 int cutsOnlyAtRoot_;
00176
00177
00178 int numberStrong_;
00179
00180
00181 int numberBeforeTrust_;
00182
00183
00184 int printLevel_;
00185
00194 int desiredPreProcess_;
00196 int preProcessPasses_;
00197
00198 private:
00200 CbcStrategyDefault & operator=(const CbcStrategyDefault& rhs);
00201 };
00202
00203
00207 class CbcStrategyDefaultSubTree : public CbcStrategy {
00208 public:
00209
00210
00211 CbcStrategyDefaultSubTree (CbcModel * parent = NULL, int cutsOnlyAtRoot = 1,
00212 int numberStrong = 5,
00213 int numberBeforeTrust = 0,
00214 int printLevel = 0);
00215
00216
00217 CbcStrategyDefaultSubTree ( const CbcStrategyDefaultSubTree &);
00218
00219
00220 ~CbcStrategyDefaultSubTree ();
00221
00223 virtual CbcStrategy * clone() const;
00224
00226 virtual void setupCutGenerators(CbcModel & model);
00228 virtual void setupHeuristics(CbcModel & model);
00230 virtual void setupPrinting(CbcModel & model, int modelLogLevel) ;
00232 virtual void setupOther(CbcModel & model);
00233 protected:
00234
00235
00236 CbcModel * parentModel_;
00237
00238 int cutsOnlyAtRoot_;
00239
00240
00241 int numberStrong_;
00242
00243
00244 int numberBeforeTrust_;
00245
00246
00247 int printLevel_;
00248
00249 private:
00251 CbcStrategyDefaultSubTree & operator=(const CbcStrategyDefaultSubTree& rhs);
00252 };
00253
00254
00255 #endif
00256