/home/coin/SVN-release/Cbc-2.4.0/Cbc/src/CbcStrategy.hpp

Go to the documentation of this file.
00001 /* $Id: CbcStrategy.hpp 1271 2009-11-05 15:57:25Z forrest $ */
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;}
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   // Data
00074   int depth_;
00080   int preProcessState_;
00082   CglPreProcess * process_;
00083 };
00084 
00088 class CbcStrategyNull : public CbcStrategy {
00089 public:
00090 
00091   // Default Constructor 
00092   CbcStrategyNull () {}
00093 
00094   // Copy constructor 
00095   CbcStrategyNull ( const CbcStrategyNull & rhs) : CbcStrategy(rhs) {}
00096    
00097   // Destructor 
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   // Data
00114 private:
00116   CbcStrategyNull & operator=(const CbcStrategyNull& rhs);
00117 };
00118 
00122 class CbcStrategyDefault : public CbcStrategy {
00123 public:
00124 
00125   // Default Constructor 
00126   CbcStrategyDefault (int cutsOnlyAtRoot=1,
00127                       int numberStrong=5,
00128                       int numberBeforeTrust=0,
00129                       int printLevel=0);
00130 
00131   // Copy constructor 
00132   CbcStrategyDefault ( const CbcStrategyDefault &);
00133    
00134   // Destructor 
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   // Data
00162 
00163   // Whether to do cuts only at root (-1 -> switch off totally)
00164   int cutsOnlyAtRoot_;
00165 
00166   // How much strong branching to do 
00167   int numberStrong_;
00168 
00169   // Number branches needed to trust with dynamic pseudo costs
00170   int numberBeforeTrust_;
00171 
00172   // Print level 0 little, 1 medium
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   // Default Constructor 
00200   CbcStrategyDefaultSubTree (CbcModel * parent=NULL,int cutsOnlyAtRoot=1,
00201                       int numberStrong=5,
00202                       int numberBeforeTrust=0,
00203                       int printLevel=0);
00204 
00205   // Copy constructor 
00206   CbcStrategyDefaultSubTree ( const CbcStrategyDefaultSubTree &);
00207    
00208   // Destructor 
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   // Data
00224   // Parent model
00225   CbcModel * parentModel_;
00226   // Whether to do cuts only at root (-1 -> switch off totally)
00227   int cutsOnlyAtRoot_;
00228 
00229   // How much strong branching to do 
00230   int numberStrong_;
00231 
00232   // Number branches needed to trust with dynamic pseudo costs
00233   int numberBeforeTrust_;
00234 
00235   // Print level 0 little, 1 medium
00236   int printLevel_;
00237 
00238 private:
00240   CbcStrategyDefaultSubTree & operator=(const CbcStrategyDefaultSubTree& rhs);
00241 };
00242 
00243 
00244 #endif

Generated on Tue Jan 19 03:02:15 2010 by  doxygen 1.4.7