/home/coin/SVN-release/Cbc-1.1.1/Cbc/src/CbcBranchDynamic.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2005, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #ifndef CbcBranchDynamic_H
00004 #define CbcBranchDynamic_H
00005 
00006 #include "CbcBranchActual.hpp"
00007 #include "CoinPackedMatrix.hpp"
00008 
00009 
00019 class CbcSimpleIntegerDynamicPseudoCost : public CbcSimpleInteger {
00020 
00021 public:
00022 
00023   // Default Constructor 
00024   CbcSimpleIntegerDynamicPseudoCost ();
00025 
00026   // Useful constructor - passed integer index and model index
00027   CbcSimpleIntegerDynamicPseudoCost (CbcModel * model, int sequence, int iColumn, double breakEven=0.5);
00028   
00029   // Useful constructor - passed integer index and model index and pseudo costs
00030   CbcSimpleIntegerDynamicPseudoCost (CbcModel * model, int sequence, int iColumn, 
00031                               double downDynamicPseudoCost, double upDynamicPseudoCost);
00032   
00033   // Copy constructor 
00034   CbcSimpleIntegerDynamicPseudoCost ( const CbcSimpleIntegerDynamicPseudoCost &);
00035    
00037   virtual CbcObject * clone() const;
00038 
00039   // Assignment operator 
00040   CbcSimpleIntegerDynamicPseudoCost & operator=( const CbcSimpleIntegerDynamicPseudoCost& rhs);
00041 
00042   // Destructor 
00043   ~CbcSimpleIntegerDynamicPseudoCost ();
00044   
00046   virtual double infeasibility(int & preferredWay) const;
00047 
00049   virtual CbcBranchingObject * createBranch(int way) ;
00050 
00055   virtual OsiSolverBranch * solverBranch() const;
00056   
00058   inline double downDynamicPseudoCost() const
00059   { return downDynamicPseudoCost_;};
00061   inline void setDownDynamicPseudoCost(double value)
00062   { downDynamicPseudoCost_=value;};
00063 
00065   inline double upDynamicPseudoCost() const
00066   { return upDynamicPseudoCost_;};
00068   inline void setUpDynamicPseudoCost(double value)
00069   { upDynamicPseudoCost_=value;};
00070 
00072   inline double upDownSeparator() const
00073   { return upDownSeparator_;};
00075   inline void setUpDownSeparator(double value)
00076   { upDownSeparator_=value;};
00077 
00079   inline double sumDownCost() const
00080   { return sumDownCost_;};
00082   inline void setSumDownCost(double value)
00083   { sumDownCost_=value;};
00085   inline void addToSumDownCost(double value)
00086   { sumDownCost_+=value;lastDownCost_=value;sumDownCostSquared_ += value*value;};
00087 
00089   inline double sumUpCost() const
00090   { return sumUpCost_;};
00092   inline void setSumUpCost(double value)
00093   { sumUpCost_=value;};
00095   inline void addToSumUpCost(double value)
00096   { sumUpCost_+=value;lastUpCost_=value;sumUpCostSquared_ += value*value;};
00097 
00099   inline double sumDownChange() const
00100   { return sumDownChange_;};
00102   inline void setSumDownChange(double value)
00103   { sumDownChange_=value;};
00105   inline void addToSumDownChange(double value)
00106   { sumDownChange_+=value;};
00107 
00109   inline double sumUpChange() const
00110   { return sumUpChange_;};
00112   inline void setSumUpChange(double value)
00113   { sumUpChange_=value;};
00115   inline void addToSumUpChange(double value)
00116   { sumUpChange_+=value;};
00117 
00119   inline double sumDownDecrease() const
00120   { return sumDownDecrease_;};
00122   inline void setSumDownDecrease(double value)
00123   { sumDownDecrease_=value;};
00125   inline void addToSumDownDecrease(double value)
00126   { sumDownDecrease_+=value;lastDownDecrease_ = (int) value;};
00127 
00129   inline double sumUpDecrease() const
00130   { return sumUpDecrease_;};
00132   inline void setSumUpDecrease(double value)
00133   { sumUpDecrease_=value;};
00135   inline void addToSumUpDecrease(double value)
00136   { sumUpDecrease_+=value;lastUpDecrease_ = (int) value;};
00137 
00139   inline int numberTimesDown() const
00140   { return numberTimesDown_;};
00142   inline void setNumberTimesDown(int value)
00143   { numberTimesDown_=value;};
00145   inline void incrementNumberTimesDown()
00146   { numberTimesDown_++;};
00147 
00149   inline int numberTimesUp() const
00150   { return numberTimesUp_;};
00152   inline void setNumberTimesUp(int value)
00153   { numberTimesUp_=value;};
00155   inline void incrementNumberTimesUp()
00156   { numberTimesUp_++;};
00157 
00159   inline int numberTimesDownInfeasible() const
00160   { return numberTimesDownInfeasible_;};
00162   inline void setNumberTimesDownInfeasible(int value)
00163   { numberTimesDownInfeasible_=value;};
00165   inline void incrementNumberTimesDownInfeasible()
00166   { numberTimesDownInfeasible_++;};
00167 
00169   inline int numberTimesUpInfeasible() const
00170   { return numberTimesUpInfeasible_;};
00172   inline void setNumberTimesUpInfeasible(int value)
00173   { numberTimesUpInfeasible_=value;};
00175   inline void incrementNumberTimesUpInfeasible()
00176   { numberTimesUpInfeasible_++;};
00177 
00179   inline int numberBeforeTrust() const
00180   { return numberBeforeTrust_;};
00182   inline void setNumberBeforeTrust(int value)
00183   { numberBeforeTrust_=value;};
00184 
00186   virtual double upEstimate() const;
00188   virtual double downEstimate() const;
00189   
00191   inline int method() const
00192   { return method_;};
00194   inline void setMethod(int value)
00195   { method_=value;};
00196 
00198   void setDownInformation(double changeObjectiveDown, int changeInfeasibilityDown);
00200   void setUpInformation(double changeObjectiveUp, int changeInfeasibilityUp);
00201 
00203   void print(int type=0, double value=0.0) const;
00204 protected:
00206 
00208   double downDynamicPseudoCost_;
00210   double upDynamicPseudoCost_;
00215   double upDownSeparator_;
00217   double sumDownCost_;
00219   double sumUpCost_;
00221   double sumDownChange_;
00223   double sumUpChange_;
00225   double sumDownCostSquared_;
00227   double sumUpCostSquared_;
00229   double sumDownDecrease_;
00231   double sumUpDecrease_;
00233   double lastDownCost_;
00235   double lastUpCost_;
00237   int lastDownDecrease_;
00239   int lastUpDecrease_;
00241   int numberTimesDown_;
00243   int numberTimesUp_;
00245   int numberTimesDownInfeasible_;
00247   int numberTimesUpInfeasible_;
00249   int numberBeforeTrust_;
00253   int method_;
00254 };
00255 
00256 
00267 class CbcDynamicPseudoCostBranchingObject : public CbcIntegerBranchingObject {
00268 
00269 public:
00270 
00272   CbcDynamicPseudoCostBranchingObject ();
00273 
00281   CbcDynamicPseudoCostBranchingObject (CbcModel *model, int variable,
00282                                        int way , double value, 
00283                                        CbcSimpleIntegerDynamicPseudoCost * object) ;
00284   
00292   CbcDynamicPseudoCostBranchingObject (CbcModel *model, int variable, int way,
00293                              double lowerValue, double upperValue) ;
00294   
00296   CbcDynamicPseudoCostBranchingObject ( const CbcDynamicPseudoCostBranchingObject &);
00297    
00299   CbcDynamicPseudoCostBranchingObject & operator= (const CbcDynamicPseudoCostBranchingObject& rhs);
00300 
00302   virtual CbcBranchingObject * clone() const;
00303 
00305   virtual ~CbcDynamicPseudoCostBranchingObject ();
00306   
00311   virtual double branch(bool normalBranch=false);
00316   virtual int fillStrongInfo( CbcStrongInfo & info);
00317 
00319   inline double changeInGuessed() const
00320   { return changeInGuessed_;};
00322   inline void setChangeInGuessed(double value)
00323   { changeInGuessed_=value;};
00325   inline CbcSimpleIntegerDynamicPseudoCost * object() const
00326   { return object_;};
00327 protected:
00329   double changeInGuessed_;
00331   CbcSimpleIntegerDynamicPseudoCost * object_;
00332 
00333 };
00340 class CbcBranchDynamicDecision : public CbcBranchDecision {
00341 public:
00342   // Default Constructor 
00343   CbcBranchDynamicDecision ();
00344 
00345   // Copy constructor 
00346   CbcBranchDynamicDecision ( const CbcBranchDynamicDecision &);
00347 
00348   virtual ~CbcBranchDynamicDecision();
00349 
00351   virtual CbcBranchDecision * clone() const;
00352 
00354   virtual void initialize(CbcModel * model);
00355 
00375   virtual int betterBranch(CbcBranchingObject * thisOne,
00376                             CbcBranchingObject * bestSoFar,
00377                             double changeUp, int numInfUp,
00378                             double changeDn, int numInfDn);
00380   virtual void setBestCriterion(double value);
00381   virtual double getBestCriterion() const;
00384   virtual int whichMethod() {return 3;};
00385 
00388   virtual void saveBranchingObject(CbcBranchingObject * object) ;
00391   virtual void updateInformation(OsiSolverInterface * solver,
00392                                  const CbcNode * node);
00393 
00394 
00395 private:
00396   
00398   CbcBranchDynamicDecision & operator=(const CbcBranchDynamicDecision& rhs);
00399 
00401 
00403   double bestCriterion_;
00404 
00406   double bestChangeUp_;
00407 
00409   int bestNumberUp_;
00410 
00412   double bestChangeDown_;
00413 
00415   int bestNumberDown_;
00416 
00418   CbcBranchingObject * bestObject_;
00419 };
00420 #endif

Generated on Thu May 15 21:59:04 2008 by  doxygen 1.4.7