• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

/build/buildd/coinor-cbc-2.5.0/Cbc/src/CbcClique.hpp

Go to the documentation of this file.
00001 // Edwin 11/9/2009-- carved out of CbcBranchActual
00002 #ifndef CbcClique_H
00003 #define CbcClique_H
00004 
00034 
00035 
00036 class CbcClique : public CbcObject {
00037 
00038 public:
00039 
00040     // Default Constructor
00041     CbcClique ();
00042 
00047     CbcClique (CbcModel * model, int cliqueType, int numberMembers,
00048                const int * which, const char * type,
00049                int identifier, int slack = -1);
00050 
00051     // Copy constructor
00052     CbcClique ( const CbcClique &);
00053 
00055     virtual CbcObject * clone() const;
00056 
00057     // Assignment operator
00058     CbcClique & operator=( const CbcClique& rhs);
00059 
00060     // Destructor
00061     virtual ~CbcClique ();
00062 
00064     virtual double infeasibility(const OsiBranchingInformation * info,
00065                                  int &preferredWay) const;
00066 
00067     using CbcObject::feasibleRegion ;
00069     virtual void feasibleRegion();
00070 
00072     virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) ;
00074     inline int numberMembers() const {
00075         return numberMembers_;
00076     }
00083     inline int numberNonSOSMembers() const {
00084         return numberNonSOSMembers_;
00085     }
00086 
00088     inline const int * members() const {
00089         return members_;
00090     }
00091 
00101         inline char type(int index) const {
00102         if (type_) return type_[index];
00103         else return 1;
00104     }
00105 
00107     inline int cliqueType() const {
00108         return cliqueType_;
00109     }
00111     virtual void redoSequenceEtc(CbcModel * model, int numberColumns, const int * originalColumns);
00112 
00113 protected:
00116     int numberMembers_;
00117 
00119     int numberNonSOSMembers_;
00120 
00122     int * members_;
00123 
00133     char * type_;
00134 
00140     int cliqueType_;
00141 
00148     int slack_;
00149 };
00150 
00159 class CbcCliqueBranchingObject : public CbcBranchingObject {
00160 
00161 public:
00162 
00163     // Default Constructor
00164     CbcCliqueBranchingObject ();
00165 
00166     // Useful constructor
00167     CbcCliqueBranchingObject (CbcModel * model,  const CbcClique * clique,
00168                               int way,
00169                               int numberOnDownSide, const int * down,
00170                               int numberOnUpSide, const int * up);
00171 
00172     // Copy constructor
00173     CbcCliqueBranchingObject ( const CbcCliqueBranchingObject &);
00174 
00175     // Assignment operator
00176     CbcCliqueBranchingObject & operator=( const CbcCliqueBranchingObject& rhs);
00177 
00179     virtual CbcBranchingObject * clone() const;
00180 
00181     // Destructor
00182     virtual ~CbcCliqueBranchingObject ();
00183 
00184     using CbcBranchingObject::branch ;
00186     virtual double branch();
00187 
00188     using CbcBranchingObject::print ;
00191     virtual void print();
00192 
00194     virtual CbcBranchObjType type() const {
00195         return CliqueBranchObj;
00196     }
00197 
00205     virtual int compareOriginalObject(const CbcBranchingObject* brObj) const;
00206 
00215     virtual CbcRangeCompare compareBranchingObject
00216     (const CbcBranchingObject* brObj, const bool replaceIfOverlap = false);
00217 
00218 private:
00220     const CbcClique * clique_;
00222     unsigned int downMask_[2];
00224     unsigned int upMask_[2];
00225 };
00226 
00231 class CbcLongCliqueBranchingObject : public CbcBranchingObject {
00232 
00233 public:
00234 
00235     // Default Constructor
00236     CbcLongCliqueBranchingObject ();
00237 
00238     // Useful constructor
00239     CbcLongCliqueBranchingObject (CbcModel * model,  const CbcClique * clique,
00240                                   int way,
00241                                   int numberOnDownSide, const int * down,
00242                                   int numberOnUpSide, const int * up);
00243 
00244     // Copy constructor
00245     CbcLongCliqueBranchingObject ( const CbcLongCliqueBranchingObject &);
00246 
00247     // Assignment operator
00248     CbcLongCliqueBranchingObject & operator=( const CbcLongCliqueBranchingObject& rhs);
00249 
00251     virtual CbcBranchingObject * clone() const;
00252 
00253     // Destructor
00254     virtual ~CbcLongCliqueBranchingObject ();
00255 
00256     using CbcBranchingObject::branch ;
00258     virtual double branch();
00259 
00260     using CbcBranchingObject::print ;
00263     virtual void print();
00264 
00266     virtual CbcBranchObjType type() const {
00267         return LongCliqueBranchObj;
00268     }
00269 
00277     virtual int compareOriginalObject(const CbcBranchingObject* brObj) const;
00278 
00287     virtual CbcRangeCompare compareBranchingObject
00288     (const CbcBranchingObject* brObj, const bool replaceIfOverlap = false);
00289 
00290 private:
00292     const CbcClique * clique_;
00294     unsigned int * downMask_;
00296     unsigned int * upMask_;
00297 };
00298 
00299 #endif
00300 

Generated on Sat Oct 23 2010 23:46:55 by  doxygen 1.7.1