Cbc
trunk
|
00001 // $Id$ 00002 // Copyright (C) 2002, International Business Machines 00003 // Corporation and others. All Rights Reserved. 00004 // This code is licensed under the terms of the Eclipse Public License (EPL). 00005 00006 // Edwin 11/24/09 carved from CbcNode 00007 00008 #ifndef CbcPartialNodeInfo_H 00009 #define CbcPartialNodeInfo_H 00010 00011 #include <string> 00012 #include <vector> 00013 00014 #include "CoinWarmStartBasis.hpp" 00015 #include "CoinSearchTree.hpp" 00016 #include "CbcBranchBase.hpp" 00017 #include "CbcNodeInfo.hpp" 00018 00019 class OsiSolverInterface; 00020 class OsiSolverBranch; 00021 00022 class OsiCuts; 00023 class OsiRowCut; 00024 class OsiRowCutDebugger; 00025 class CoinWarmStartBasis; 00026 class CbcCountRowCut; 00027 class CbcModel; 00028 class CbcNode; 00029 class CbcSubProblem; 00030 class CbcGeneralBranchingObject; 00039 class CbcPartialNodeInfo : public CbcNodeInfo { 00040 00041 public: 00042 00048 virtual void applyToModel (CbcModel *model, CoinWarmStartBasis *&basis, 00049 CbcCountRowCut **addCuts, 00050 int ¤tNumberCuts) const ; 00051 00053 virtual int applyBounds(int iColumn, double & lower, double & upper, int force) ; 00058 virtual CbcNodeInfo * buildRowBasis(CoinWarmStartBasis & basis ) const ; 00059 // Default Constructor 00060 CbcPartialNodeInfo (); 00061 00062 // Constructor from current state 00063 CbcPartialNodeInfo (CbcNodeInfo * parent, CbcNode * owner, 00064 int numberChangedBounds, const int * variables, 00065 const double * boundChanges, 00066 const CoinWarmStartDiff *basisDiff) ; 00067 00068 // Copy constructor 00069 CbcPartialNodeInfo ( const CbcPartialNodeInfo &); 00070 00071 // Destructor 00072 ~CbcPartialNodeInfo (); 00073 00075 virtual CbcNodeInfo * clone() const; 00077 inline const CoinWarmStartDiff *basisDiff() const { 00078 return basisDiff_ ; 00079 } 00081 inline const int * variables() const { 00082 return variables_; 00083 } 00084 // New bound 00085 inline const double * newBounds() const { 00086 return newBounds_; 00087 } 00089 inline int numberChangedBounds() const { 00090 return numberChangedBounds_; 00091 } 00092 protected: 00093 /* Data values */ 00094 00096 CoinWarmStartDiff *basisDiff_ ; 00098 int * variables_; 00099 // New bound 00100 double * newBounds_; 00102 int numberChangedBounds_; 00103 private: 00104 00106 CbcPartialNodeInfo & operator=(const CbcPartialNodeInfo& rhs); 00107 }; 00108 00109 #endif //CbcPartialNodeInfo_H 00110