/home/coin/SVN-release/Cbc-2.0.0/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  model index
00027   CbcSimpleIntegerDynamicPseudoCost (CbcModel * model,  int iColumn, double breakEven=0.5);
00028   
00029   // Useful constructor - passed  model index and pseudo costs
00030   CbcSimpleIntegerDynamicPseudoCost (CbcModel * model, int iColumn, 
00031                               double downDynamicPseudoCost, double upDynamicPseudoCost);
00032   
00033   // Useful constructor - passed  model index and pseudo costs
00034   CbcSimpleIntegerDynamicPseudoCost (CbcModel * model, int dummy, int iColumn, 
00035                               double downDynamicPseudoCost, double upDynamicPseudoCost);
00036   
00037   // Copy constructor 
00038   CbcSimpleIntegerDynamicPseudoCost ( const CbcSimpleIntegerDynamicPseudoCost &);
00039    
00041   virtual CbcObject * clone() const;
00042 
00043   // Assignment operator 
00044   CbcSimpleIntegerDynamicPseudoCost & operator=( const CbcSimpleIntegerDynamicPseudoCost& rhs);
00045 
00046   // Destructor 
00047   ~CbcSimpleIntegerDynamicPseudoCost ();
00048   
00049   using CbcObject::infeasibility ;
00051   virtual double infeasibility(int & preferredWay) const;
00052 
00053   using CbcObject::createBranch ;
00055   virtual CbcBranchingObject * createBranch(int way) ;
00056 
00058   virtual double infeasibility(const OsiSolverInterface * solver, 
00059                                const OsiBranchingInformation * info, int & preferredWay) const;
00060 
00061 
00067   virtual CbcBranchingObject * createBranch(OsiSolverInterface * solver,
00068                                             const OsiBranchingInformation * info, int way) ;
00069 
00073   virtual CbcObjectUpdateData createUpdateInformation(const OsiSolverInterface * solver, 
00074                                                         const CbcNode * node,
00075                                                         const CbcBranchingObject * branchingObject);
00077   virtual void updateInformation(const CbcObjectUpdateData & data) ;
00079   void copySome(CbcSimpleIntegerDynamicPseudoCost * otherObject);
00080 
00081   using CbcSimpleInteger::solverBranch ;
00086   virtual OsiSolverBranch * solverBranch() const;
00087   
00089   inline double downDynamicPseudoCost() const
00090   { return downDynamicPseudoCost_;}
00092   inline void setDownDynamicPseudoCost(double value)
00093   { downDynamicPseudoCost_=value;}
00094 
00096   inline double upDynamicPseudoCost() const
00097   { return upDynamicPseudoCost_;}
00099   inline void setUpDynamicPseudoCost(double value)
00100   { upDynamicPseudoCost_=value;}
00101 
00103   inline double upDownSeparator() const
00104   { return upDownSeparator_;}
00106   inline void setUpDownSeparator(double value)
00107   { upDownSeparator_=value;}
00108 
00110   inline double sumDownCost() const
00111   { return sumDownCost_;}
00113   inline void setSumDownCost(double value)
00114   { sumDownCost_=value;}
00116   inline void addToSumDownCost(double value)
00117   { sumDownCost_+=value;lastDownCost_=value;sumDownCostSquared_ += value*value;}
00118 
00120   inline double sumUpCost() const
00121   { return sumUpCost_;}
00123   inline void setSumUpCost(double value)
00124   { sumUpCost_=value;}
00126   inline void addToSumUpCost(double value)
00127   { sumUpCost_+=value;lastUpCost_=value;sumUpCostSquared_ += value*value;}
00128 
00130   inline double sumDownChange() const
00131   { return sumDownChange_;}
00133   inline void setSumDownChange(double value)
00134   { sumDownChange_=value;}
00136   inline void addToSumDownChange(double value)
00137   { sumDownChange_+=value;}
00138 
00140   inline double sumUpChange() const
00141   { return sumUpChange_;}
00143   inline void setSumUpChange(double value)
00144   { sumUpChange_=value;}
00146   inline void addToSumUpChange(double value)
00147   { sumUpChange_+=value;}
00148 
00150   inline double sumDownDecrease() const
00151   { return sumDownDecrease_;}
00153   inline void setSumDownDecrease(double value)
00154   { sumDownDecrease_=value;}
00156   inline void addToSumDownDecrease(double value)
00157   { sumDownDecrease_+=value;lastDownDecrease_ = (int) value;}
00158 
00160   inline double sumUpDecrease() const
00161   { return sumUpDecrease_;}
00163   inline void setSumUpDecrease(double value)
00164   { sumUpDecrease_=value;}
00166   inline void addToSumUpDecrease(double value)
00167   { sumUpDecrease_+=value;lastUpDecrease_ = (int) value;}
00168 
00170   inline int numberTimesDown() const
00171   { return numberTimesDown_;}
00173   inline void setNumberTimesDown(int value)
00174   { numberTimesDown_=value;}
00176   inline void incrementNumberTimesDown()
00177   { numberTimesDown_++;}
00178 
00180   inline int numberTimesUp() const
00181   { return numberTimesUp_;}
00183   inline void setNumberTimesUp(int value)
00184   { numberTimesUp_=value;}
00186   inline void incrementNumberTimesUp()
00187   { numberTimesUp_++;}
00188 
00190   inline int numberTimesDownInfeasible() const
00191   { return numberTimesDownInfeasible_;}
00193   inline void setNumberTimesDownInfeasible(int value)
00194   { numberTimesDownInfeasible_=value;}
00196   inline void incrementNumberTimesDownInfeasible()
00197   { numberTimesDownInfeasible_++;}
00198 
00200   inline int numberTimesUpInfeasible() const
00201   { return numberTimesUpInfeasible_;}
00203   inline void setNumberTimesUpInfeasible(int value)
00204   { numberTimesUpInfeasible_=value;}
00206   inline void incrementNumberTimesUpInfeasible()
00207   { numberTimesUpInfeasible_++;}
00208 
00210   inline int numberBeforeTrust() const
00211   { return numberBeforeTrust_;}
00213   inline void setNumberBeforeTrust(int value)
00214   { numberBeforeTrust_=value;}
00215 
00217   virtual double upEstimate() const;
00219   virtual double downEstimate() const;
00220   
00222   inline int method() const
00223   { return method_;}
00225   inline void setMethod(int value)
00226   { method_=value;}
00227 
00229   void setDownInformation(double changeObjectiveDown, int changeInfeasibilityDown);
00231   void setUpInformation(double changeObjectiveUp, int changeInfeasibilityUp);
00233   void setProbingInformation(int fixedDown, int fixedUp);
00234 
00236   void print(int type=0, double value=0.0) const;
00237 protected:
00239 
00241   double downDynamicPseudoCost_;
00243   double upDynamicPseudoCost_;
00248   double upDownSeparator_;
00250   double sumDownCost_;
00252   double sumUpCost_;
00254   double sumDownChange_;
00256   double sumUpChange_;
00258   double sumDownCostSquared_;
00260   double sumUpCostSquared_;
00262   double sumDownDecrease_;
00264   double sumUpDecrease_;
00266   double lastDownCost_;
00268   double lastUpCost_;
00270   int lastDownDecrease_;
00272   int lastUpDecrease_;
00274   int numberTimesDown_;
00276   int numberTimesUp_;
00278   int numberTimesDownInfeasible_;
00280   int numberTimesUpInfeasible_;
00282   int numberBeforeTrust_;
00284   int numberTimesDownLocalFixed_;
00286   int numberTimesUpLocalFixed_;
00288   double numberTimesDownTotalFixed_;
00290   double numberTimesUpTotalFixed_;
00292   int numberTimesProbingTotal_;
00297   int method_;
00298 };
00299 
00300 
00311 class CbcDynamicPseudoCostBranchingObject : public CbcIntegerBranchingObject {
00312 
00313 public:
00314 
00316   CbcDynamicPseudoCostBranchingObject ();
00317 
00325   CbcDynamicPseudoCostBranchingObject (CbcModel *model, int variable,
00326                                        int way , double value, 
00327                                        CbcSimpleIntegerDynamicPseudoCost * object) ;
00328   
00336   CbcDynamicPseudoCostBranchingObject (CbcModel *model, int variable, int way,
00337                              double lowerValue, double upperValue) ;
00338   
00340   CbcDynamicPseudoCostBranchingObject ( const CbcDynamicPseudoCostBranchingObject &);
00341    
00343   CbcDynamicPseudoCostBranchingObject & operator= (const CbcDynamicPseudoCostBranchingObject& rhs);
00344 
00346   virtual CbcBranchingObject * clone() const;
00347 
00349   virtual ~CbcDynamicPseudoCostBranchingObject ();
00350   
00351   using CbcBranchingObject::branch ;
00356   virtual double branch();
00357 
00362   virtual int fillStrongInfo( CbcStrongInfo & info);
00363 
00365   inline double changeInGuessed() const
00366   { return changeInGuessed_;}
00368   inline void setChangeInGuessed(double value)
00369   { changeInGuessed_=value;}
00371   inline CbcSimpleIntegerDynamicPseudoCost * object() const
00372   { return object_;}
00373 protected:
00375   double changeInGuessed_;
00377   CbcSimpleIntegerDynamicPseudoCost * object_;
00378 
00379 };
00386 class CbcBranchDynamicDecision : public CbcBranchDecision {
00387 public:
00388   // Default Constructor 
00389   CbcBranchDynamicDecision ();
00390 
00391   // Copy constructor 
00392   CbcBranchDynamicDecision ( const CbcBranchDynamicDecision &);
00393 
00394   virtual ~CbcBranchDynamicDecision();
00395 
00397   virtual CbcBranchDecision * clone() const;
00398 
00400   virtual void initialize(CbcModel * model);
00401 
00421   virtual int betterBranch(CbcBranchingObject * thisOne,
00422                             CbcBranchingObject * bestSoFar,
00423                             double changeUp, int numInfUp,
00424                             double changeDn, int numInfDn);
00426   virtual void setBestCriterion(double value);
00427   virtual double getBestCriterion() const;
00430   virtual int whichMethod() {return 3;}
00431 
00434   virtual void saveBranchingObject(OsiBranchingObject * object) ;
00437   virtual void updateInformation(OsiSolverInterface * solver,
00438                                  const CbcNode * node);
00439 
00440 
00441 private:
00442   
00444   CbcBranchDynamicDecision & operator=(const CbcBranchDynamicDecision& rhs);
00445 
00447 
00449   double bestCriterion_;
00450 
00452   double bestChangeUp_;
00453 
00455   int bestNumberUp_;
00456 
00458   double bestChangeDown_;
00459 
00461   int bestNumberDown_;
00462 
00464   CbcBranchingObject * bestObject_;
00465 };
00466 #endif

Generated on Thu May 15 22:07:39 2008 by  doxygen 1.4.7