Cbc  trunk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
CbcClique.hpp
Go to the documentation of this file.
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 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines