# CbcSOS.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 CbcSOS_H
    00009 #define CbcSOS_H
    00010
    00029 class CbcSOS : public CbcObject {
    00030
    00031 public:
    00032
    00033     // Default Constructor
    00034     CbcSOS ();
    00035
    00046     CbcSOS (CbcModel * model, int numberMembers,
    00047             const int * which, const double * weights, int identifier,
    00048             int type = 1);
    00049
    00050     // Copy constructor
    00051     CbcSOS ( const CbcSOS &);
    00052
    00054     virtual CbcObject * clone() const;
    00055
    00056     // Assignment operator
    00057     CbcSOS & operator=( const CbcSOS& rhs);
    00058
    00059     // Destructor
    00060     virtual ~CbcSOS ();
    00061
    00063     virtual double infeasibility(const OsiBranchingInformation * info,
    00064                                  int &preferredWay) const;
    00065
    00066     using CbcObject::feasibleRegion ;
    00068     virtual void feasibleRegion();
    00069
    00071     virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) ;
    00072
    00073
    00074
    00078     virtual CbcObjectUpdateData createUpdateInformation(const OsiSolverInterface * solver,
    00079             const CbcNode * node,
    00080             const CbcBranchingObject * branchingObject);
    00082     virtual void updateInformation(const CbcObjectUpdateData & data) ;
    00083     using CbcObject::solverBranch ;
    00088     virtual OsiSolverBranch * solverBranch() const;
    00090     virtual void redoSequenceEtc(CbcModel * model, int numberColumns, const int * originalColumns);
    00091
    00093     OsiSOS * osiObject(const OsiSolverInterface * solver) const;
    00095     inline int numberMembers() const {
    00096         return numberMembers_;
    00097     }
    00098
    00100     inline const int * members() const {
    00101         return members_;
    00102     }
    00103
    00105     inline int sosType() const {
    00106         return sosType_;
    00107     }
    00109     inline int numberTimesDown() const {
    00110         return numberTimesDown_;
    00111     }
    00113     inline int numberTimesUp() const {
    00114         return numberTimesUp_;
    00115     }
    00116
    00118     inline const double * weights() const {
    00119         return weights_;
    00120     }
    00121
    00123     inline void setNumberMembers(int n) {
    00124         numberMembers_ = n;
    00125     }
    00126
    00128     inline int * mutableMembers() const {
    00129         return members_;
    00130     }
    00131
    00133     inline double * mutableWeights() const {
    00134         return weights_;
    00135     }
    00136
    00139     virtual bool canDoHeuristics() const {
    00140         return (sosType_ == 1 && integerValued_);
    00141     }
    00143     inline void setIntegerValued(bool yesNo) {
    00144         integerValued_ = yesNo;
    00145     }
    00146 private:
    00148
    00150     int * members_;
    00163     double * weights_;
    00165     mutable double shadowEstimateDown_;
    00167     mutable double shadowEstimateUp_;
    00169     double downDynamicPseudoRatio_;
    00171     double upDynamicPseudoRatio_;
    00173     int numberTimesDown_;
    00175     int numberTimesUp_;
    00177     int numberMembers_;
    00179     int sosType_;
    00181     bool integerValued_;
    00182 };
    00183
    00189 class CbcSOSBranchingObject : public CbcBranchingObject {
    00190
    00191 public:
    00192
    00193     // Default Constructor
    00194     CbcSOSBranchingObject ();
    00195
    00196     // Useful constructor
    00197     CbcSOSBranchingObject (CbcModel * model,  const CbcSOS * clique,
    00198                            int way,
    00199                            double separator);
    00200
    00201     // Copy constructor
    00202     CbcSOSBranchingObject ( const CbcSOSBranchingObject &);
    00203
    00204     // Assignment operator
    00205     CbcSOSBranchingObject & operator=( const CbcSOSBranchingObject& rhs);
    00206
    00208     virtual CbcBranchingObject * clone() const;
    00209
    00210     // Destructor
    00211     virtual ~CbcSOSBranchingObject ();
    00212
    00213     using CbcBranchingObject::branch ;
    00215     virtual double branch();
    00218     virtual void fix(OsiSolverInterface * solver,
    00219                      double * lower, double * upper,
    00220                      int branchState) const ;
    00221
    00225     virtual void previousBranch() {
    00226         CbcBranchingObject::previousBranch();
    00227         computeNonzeroRange();
    00228     }
    00229
    00230     using CbcBranchingObject::print ;
    00233     virtual void print();
    00234
    00236     virtual CbcBranchObjType type() const {
    00237         return SoSBranchObj;
    00238     }
    00239
    00247     virtual int compareOriginalObject(const CbcBranchingObject* brObj) const;
    00248
    00257     virtual CbcRangeCompare compareBranchingObject
    00258     (const CbcBranchingObject* brObj, const bool replaceIfOverlap = false);
    00259
    00261     void computeNonzeroRange();
    00262
    00263 private:
    00265     const CbcSOS * set_;
    00267     double separator_;
    00273     int firstNonzero_;
    00274     int lastNonzero_;
    00275 };
    00276 #endif
    00277

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines