/build/buildd/coinor-cbc-2.5.0/debian/tmp/usr/include/coin/CbcNWay.hpp
Go to the documentation of this file.
00001 // Edwin 11/9/2009-- carved out of CbcBranchActual
00006 #ifndef CbcNWay_H
00007 #define CbcNWay_H
00008 
00009 class CbcNWay : public CbcObject {
00010 
00011 public:
00012 
00013     // Default Constructor
00014     CbcNWay ();
00015 
00018     CbcNWay (CbcModel * model, int numberMembers,
00019              const int * which, int identifier);
00020 
00021     // Copy constructor
00022     CbcNWay ( const CbcNWay &);
00023 
00025     virtual CbcObject * clone() const;
00026 
00028     CbcNWay & operator=( const CbcNWay& rhs);
00029 
00031     virtual ~CbcNWay ();
00032 
00034     void setConsequence(int iColumn, const CbcConsequence & consequence);
00035 
00037     void applyConsequence(int iSequence, int state) const;
00038 
00040     virtual double infeasibility(const OsiBranchingInformation * info,
00041                                  int &preferredWay) const;
00042 
00043     using CbcObject::feasibleRegion ;
00045     virtual void feasibleRegion();
00046 
00048     virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) ;
00049 
00051     inline int numberMembers() const {
00052         return numberMembers_;
00053     }
00054 
00056     inline const int * members() const {
00057         return members_;
00058     }
00060     virtual void redoSequenceEtc(CbcModel * model, int numberColumns, const int * originalColumns);
00061 
00062 protected:
00065     int numberMembers_;
00066 
00068     int * members_;
00070     CbcConsequence ** consequence_;
00071 };
00075 class CbcNWayBranchingObject : public CbcBranchingObject {
00076 
00077 public:
00078 
00079     // Default Constructor
00080     CbcNWayBranchingObject ();
00081 
00086     CbcNWayBranchingObject (CbcModel * model,  const CbcNWay * nway,
00087                             int numberBranches, const int * order);
00088 
00089     // Copy constructor
00090     CbcNWayBranchingObject ( const CbcNWayBranchingObject &);
00091 
00092     // Assignment operator
00093     CbcNWayBranchingObject & operator=( const CbcNWayBranchingObject& rhs);
00094 
00096     virtual CbcBranchingObject * clone() const;
00097 
00098     // Destructor
00099     virtual ~CbcNWayBranchingObject ();
00100 
00101     using CbcBranchingObject::branch ;
00103     virtual double branch();
00104 
00105 #ifdef JJF_ZERO
00106     // FIXME: what do we need to do here?
00110     virtual void previousBranch();
00111 #endif
00112 
00113     using CbcBranchingObject::print ;
00116     virtual void print();
00119     virtual int numberBranches() const {
00120         return numberInSet_;
00121     }
00123     virtual bool twoWay() const {
00124         return false;
00125     }
00126 
00128     virtual CbcBranchObjType type() const {
00129         return NWayBranchObj;
00130     }
00131 
00139     virtual int compareOriginalObject(const CbcBranchingObject* brObj) const;
00140 
00149     virtual CbcRangeCompare compareBranchingObject
00150     (const CbcBranchingObject* brObj, const bool replaceIfOverlap = false);
00151 
00152 private:
00154     int * order_;
00156     const CbcNWay * object_;
00158     int numberInSet_;
00159 };
00160 #endif