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/9/2009-- carved out of CbcBranchActual 00007 00008 #ifndef CbcClique_H 00009 #define CbcClique_H 00010 00041 class CbcClique : public CbcObject { 00042 00043 public: 00044 00046 CbcClique (); 00047 00051 CbcClique (CbcModel * model, int cliqueType, int numberMembers, 00052 const int * which, const char * type, 00053 int identifier, int slack = -1); 00054 00056 CbcClique ( const CbcClique &); 00057 00059 virtual CbcObject * clone() const; 00060 00062 CbcClique & operator=( const CbcClique& rhs); 00063 00065 virtual ~CbcClique (); 00066 00068 virtual double infeasibility(const OsiBranchingInformation * info, 00069 int &preferredWay) const; 00070 00071 using CbcObject::feasibleRegion ; 00073 virtual void feasibleRegion(); 00074 00076 virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) ; 00078 inline int numberMembers() const { 00079 return numberMembers_; 00080 } 00086 inline int numberNonSOSMembers() const { 00087 return numberNonSOSMembers_; 00088 } 00089 00091 inline const int * members() const { 00092 return members_; 00093 } 00094 00104 inline char type(int index) const { 00105 if (type_) return type_[index]; 00106 else return 1; 00107 } 00108 00110 inline int cliqueType() const { 00111 return cliqueType_; 00112 } 00114 virtual void redoSequenceEtc(CbcModel * model, int numberColumns, const int * originalColumns); 00115 00116 protected: 00119 int numberMembers_; 00120 00122 int numberNonSOSMembers_; 00123 00125 int * members_; 00126 00136 char * type_; 00137 00143 int cliqueType_; 00144 00151 int slack_; 00152 }; 00153 00162 class CbcCliqueBranchingObject : public CbcBranchingObject { 00163 00164 public: 00165 00166 // Default Constructor 00167 CbcCliqueBranchingObject (); 00168 00169 // Useful constructor 00170 CbcCliqueBranchingObject (CbcModel * model, const CbcClique * clique, 00171 int way, 00172 int numberOnDownSide, const int * down, 00173 int numberOnUpSide, const int * up); 00174 00175 // Copy constructor 00176 CbcCliqueBranchingObject ( const CbcCliqueBranchingObject &); 00177 00178 // Assignment operator 00179 CbcCliqueBranchingObject & operator=( const CbcCliqueBranchingObject& rhs); 00180 00182 virtual CbcBranchingObject * clone() const; 00183 00184 // Destructor 00185 virtual ~CbcCliqueBranchingObject (); 00186 00187 using CbcBranchingObject::branch ; 00189 virtual double branch(); 00190 00191 using CbcBranchingObject::print ; 00194 virtual void print(); 00195 00197 virtual CbcBranchObjType type() const { 00198 return CliqueBranchObj; 00199 } 00200 00208 virtual int compareOriginalObject(const CbcBranchingObject* brObj) const; 00209 00218 virtual CbcRangeCompare compareBranchingObject 00219 (const CbcBranchingObject* brObj, const bool replaceIfOverlap = false); 00220 00221 private: 00223 const CbcClique * clique_; 00225 unsigned int downMask_[2]; 00227 unsigned int upMask_[2]; 00228 }; 00229 00234 class CbcLongCliqueBranchingObject : public CbcBranchingObject { 00235 00236 public: 00237 00238 // Default Constructor 00239 CbcLongCliqueBranchingObject (); 00240 00241 // Useful constructor 00242 CbcLongCliqueBranchingObject (CbcModel * model, const CbcClique * clique, 00243 int way, 00244 int numberOnDownSide, const int * down, 00245 int numberOnUpSide, const int * up); 00246 00247 // Copy constructor 00248 CbcLongCliqueBranchingObject ( const CbcLongCliqueBranchingObject &); 00249 00250 // Assignment operator 00251 CbcLongCliqueBranchingObject & operator=( const CbcLongCliqueBranchingObject& rhs); 00252 00254 virtual CbcBranchingObject * clone() const; 00255 00256 // Destructor 00257 virtual ~CbcLongCliqueBranchingObject (); 00258 00259 using CbcBranchingObject::branch ; 00261 virtual double branch(); 00262 00263 using CbcBranchingObject::print ; 00266 virtual void print(); 00267 00269 virtual CbcBranchObjType type() const { 00270 return LongCliqueBranchObj; 00271 } 00272 00280 virtual int compareOriginalObject(const CbcBranchingObject* brObj) const; 00281 00290 virtual CbcRangeCompare compareBranchingObject 00291 (const CbcBranchingObject* brObj, const bool replaceIfOverlap = false); 00292 00293 private: 00295 const CbcClique * clique_; 00297 unsigned int * downMask_; 00299 unsigned int * upMask_; 00300 }; 00301 00302 #endif 00303