CbcSOS.hpp

Go to the documentation of this file.
00001 // $Id: CbcSOS.hpp 2070 2014-09-08 09:24:45Z forrest $
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_;
00183     bool oddValues_;
00184 };
00185 
00191 class CbcSOSBranchingObject : public CbcBranchingObject {
00192 
00193 public:
00194 
00195     // Default Constructor
00196     CbcSOSBranchingObject ();
00197 
00198     // Useful constructor
00199     CbcSOSBranchingObject (CbcModel * model,  const CbcSOS * clique,
00200                            int way,
00201                            double separator);
00202 
00203     // Copy constructor
00204     CbcSOSBranchingObject ( const CbcSOSBranchingObject &);
00205 
00206     // Assignment operator
00207     CbcSOSBranchingObject & operator=( const CbcSOSBranchingObject& rhs);
00208 
00210     virtual CbcBranchingObject * clone() const;
00211 
00212     // Destructor
00213     virtual ~CbcSOSBranchingObject ();
00214 
00215     using CbcBranchingObject::branch ;
00217     virtual double branch();
00220     virtual void fix(OsiSolverInterface * solver,
00221                      double * lower, double * upper,
00222                      int branchState) const ;
00223 
00227     virtual void previousBranch() {
00228         CbcBranchingObject::previousBranch();
00229         computeNonzeroRange();
00230     }
00231 
00232     using CbcBranchingObject::print ;
00235     virtual void print();
00236 
00238     virtual CbcBranchObjType type() const {
00239         return SoSBranchObj;
00240     }
00241 
00249     virtual int compareOriginalObject(const CbcBranchingObject* brObj) const;
00250 
00259     virtual CbcRangeCompare compareBranchingObject
00260     (const CbcBranchingObject* brObj, const bool replaceIfOverlap = false);
00261 
00263     void computeNonzeroRange();
00264 
00265 private:
00267     const CbcSOS * set_;
00269     double separator_;
00275     int firstNonzero_;
00276     int lastNonzero_;
00277 };
00278 #endif
00279 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 9 Feb 2015 for Cbc by  doxygen 1.6.1