# CbcNWay.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
    00012 #ifndef CbcNWay_H
    00013 #define CbcNWay_H
    00014
    00015 class CbcNWay : public CbcObject {
    00016
    00017 public:
    00018
    00019     // Default Constructor
    00020     CbcNWay ();
    00021
    00024     CbcNWay (CbcModel * model, int numberMembers,
    00025              const int * which, int identifier);
    00026
    00027     // Copy constructor
    00028     CbcNWay ( const CbcNWay &);
    00029
    00031     virtual CbcObject * clone() const;
    00032
    00034     CbcNWay & operator=( const CbcNWay& rhs);
    00035
    00037     virtual ~CbcNWay ();
    00038
    00040     void setConsequence(int iColumn, const CbcConsequence & consequence);
    00041
    00043     void applyConsequence(int iSequence, int state) const;
    00044
    00046     virtual double infeasibility(const OsiBranchingInformation * info,
    00047                                  int &preferredWay) const;
    00048
    00049     using CbcObject::feasibleRegion ;
    00051     virtual void feasibleRegion();
    00052
    00054     virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) ;
    00055
    00057     inline int numberMembers() const {
    00058         return numberMembers_;
    00059     }
    00060
    00062     inline const int * members() const {
    00063         return members_;
    00064     }
    00066     virtual void redoSequenceEtc(CbcModel * model, int numberColumns, const int * originalColumns);
    00067
    00068 protected:
    00071     int numberMembers_;
    00072
    00074     int * members_;
    00076     CbcConsequence ** consequence_;
    00077 };
    00081 class CbcNWayBranchingObject : public CbcBranchingObject {
    00082
    00083 public:
    00084
    00085     // Default Constructor
    00086     CbcNWayBranchingObject ();
    00087
    00092     CbcNWayBranchingObject (CbcModel * model,  const CbcNWay * nway,
    00093                             int numberBranches, const int * order);
    00094
    00095     // Copy constructor
    00096     CbcNWayBranchingObject ( const CbcNWayBranchingObject &);
    00097
    00098     // Assignment operator
    00099     CbcNWayBranchingObject & operator=( const CbcNWayBranchingObject& rhs);
    00100
    00102     virtual CbcBranchingObject * clone() const;
    00103
    00104     // Destructor
    00105     virtual ~CbcNWayBranchingObject ();
    00106
    00107     using CbcBranchingObject::branch ;
    00109     virtual double branch();
    00110
    00111 #ifdef JJF_ZERO
    00112     // FIXME: what do we need to do here?
    00116     virtual void previousBranch();
    00117 #endif
    00118
    00119     using CbcBranchingObject::print ;
    00122     virtual void print();
    00125     virtual int numberBranches() const {
    00126         return numberInSet_;
    00127     }
    00129     virtual bool twoWay() const {
    00130         return false;
    00131     }
    00132
    00134     virtual CbcBranchObjType type() const {
    00135         return NWayBranchObj;
    00136     }
    00137
    00145     virtual int compareOriginalObject(const CbcBranchingObject* brObj) const;
    00146
    00155     virtual CbcRangeCompare compareBranchingObject
    00156     (const CbcBranchingObject* brObj, const bool replaceIfOverlap = false);
    00157
    00158 private:
    00160     int * order_;
    00162     const CbcNWay * object_;
    00164     int numberInSet_;
    00165 };
    00166 #endif

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines