Go to the documentation of this file.00001
00006 #ifndef CbcNWay_H
00007 #define CbcNWay_H
00008
00009 class CbcNWay : public CbcObject {
00010
00011 public:
00012
00013
00014 CbcNWay ();
00015
00018 CbcNWay (CbcModel * model, int numberMembers,
00019 const int * which, int identifier);
00020
00021
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
00080 CbcNWayBranchingObject ();
00081
00086 CbcNWayBranchingObject (CbcModel * model, const CbcNWay * nway,
00087 int numberBranches, const int * order);
00088
00089
00090 CbcNWayBranchingObject ( const CbcNWayBranchingObject &);
00091
00092
00093 CbcNWayBranchingObject & operator=( const CbcNWayBranchingObject& rhs);
00094
00096 virtual CbcBranchingObject * clone() const;
00097
00098
00099 virtual ~CbcNWayBranchingObject ();
00100
00101 using CbcBranchingObject::branch ;
00103 virtual double branch();
00104
00105 #ifdef JJF_ZERO
00106
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