/build/buildd/coinor-cbc-2.5.0/Cbc/src/CbcStrategy.hpp
Go to the documentation of this file.
00001 /* $Id: CbcStrategy.hpp 1432 2010-02-07 19:33:53Z bjarni $ */
00002 // Copyright (C) 2005, International Business Machines
00003 // Corporation and others.  All Rights Reserved.
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     // Default Constructor
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     // Data
00079     int depth_;
00085     int preProcessState_;
00087     CglPreProcess * process_;
00088 };
00089 
00093 class CbcStrategyNull : public CbcStrategy {
00094 public:
00095 
00096     // Default Constructor
00097     CbcStrategyNull () {}
00098 
00099     // Copy constructor
00100     CbcStrategyNull ( const CbcStrategyNull & rhs) : CbcStrategy(rhs) {}
00101 
00102     // Destructor
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     // Data
00121 private:
00123     CbcStrategyNull & operator=(const CbcStrategyNull& rhs);
00124 };
00125 
00129 class CbcStrategyDefault : public CbcStrategy {
00130 public:
00131 
00132     // Default Constructor
00133     CbcStrategyDefault (int cutsOnlyAtRoot = 1,
00134                         int numberStrong = 5,
00135                         int numberBeforeTrust = 0,
00136                         int printLevel = 0);
00137 
00138     // Copy constructor
00139     CbcStrategyDefault ( const CbcStrategyDefault &);
00140 
00141     // Destructor
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     // Data
00173 
00174     // Whether to do cuts only at root (-1 -> switch off totally)
00175     int cutsOnlyAtRoot_;
00176 
00177     // How much strong branching to do
00178     int numberStrong_;
00179 
00180     // Number branches needed to trust with dynamic pseudo costs
00181     int numberBeforeTrust_;
00182 
00183     // Print level 0 little, 1 medium
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     // Default Constructor
00211     CbcStrategyDefaultSubTree (CbcModel * parent = NULL, int cutsOnlyAtRoot = 1,
00212                                int numberStrong = 5,
00213                                int numberBeforeTrust = 0,
00214                                int printLevel = 0);
00215 
00216     // Copy constructor
00217     CbcStrategyDefaultSubTree ( const CbcStrategyDefaultSubTree &);
00218 
00219     // Destructor
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     // Data
00235     // Parent model
00236     CbcModel * parentModel_;
00237     // Whether to do cuts only at root (-1 -> switch off totally)
00238     int cutsOnlyAtRoot_;
00239 
00240     // How much strong branching to do
00241     int numberStrong_;
00242 
00243     // Number branches needed to trust with dynamic pseudo costs
00244     int numberBeforeTrust_;
00245 
00246     // Print level 0 little, 1 medium
00247     int printLevel_;
00248 
00249 private:
00251     CbcStrategyDefaultSubTree & operator=(const CbcStrategyDefaultSubTree& rhs);
00252 };
00253 
00254 
00255 #endif
00256