• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

/build/buildd/coinor-cbc-2.5.0/debian/tmp/usr/include/coin/CbcSOS.hpp

Go to the documentation of this file.
00001 // Edwin 11/9/2009-- carved out of CbcBranchActual
00002 #ifndef CbcSOS_H
00003 #define CbcSOS_H
00004 
00023 class CbcSOS : public CbcObject {
00024 
00025 public:
00026 
00027     // Default Constructor
00028     CbcSOS ();
00029 
00040     CbcSOS (CbcModel * model, int numberMembers,
00041             const int * which, const double * weights, int identifier,
00042             int type = 1);
00043 
00044     // Copy constructor
00045     CbcSOS ( const CbcSOS &);
00046 
00048     virtual CbcObject * clone() const;
00049 
00050     // Assignment operator
00051     CbcSOS & operator=( const CbcSOS& rhs);
00052 
00053     // Destructor
00054     virtual ~CbcSOS ();
00055 
00057     virtual double infeasibility(const OsiBranchingInformation * info,
00058                                  int &preferredWay) const;
00059 
00060     using CbcObject::feasibleRegion ;
00062     virtual void feasibleRegion();
00063 
00065     virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) ;
00066 
00067 
00068 
00072     virtual CbcObjectUpdateData createUpdateInformation(const OsiSolverInterface * solver,
00073             const CbcNode * node,
00074             const CbcBranchingObject * branchingObject);
00076     virtual void updateInformation(const CbcObjectUpdateData & data) ;
00077     using CbcObject::solverBranch ;
00082     virtual OsiSolverBranch * solverBranch() const;
00084     virtual void redoSequenceEtc(CbcModel * model, int numberColumns, const int * originalColumns);
00085 
00087     OsiSOS * osiObject(const OsiSolverInterface * solver) const;
00089     inline int numberMembers() const {
00090         return numberMembers_;
00091     }
00092 
00094     inline const int * members() const {
00095         return members_;
00096     }
00097 
00099     inline int sosType() const {
00100         return sosType_;
00101     }
00103     inline int numberTimesDown() const {
00104         return numberTimesDown_;
00105     }
00107     inline int numberTimesUp() const {
00108         return numberTimesUp_;
00109     }
00110 
00112     inline const double * weights() const {
00113         return weights_;
00114     }
00115 
00117     inline void setNumberMembers(int n) {
00118         numberMembers_ = n;
00119     }
00120 
00122     inline int * mutableMembers() const {
00123         return members_;
00124     }
00125 
00127     inline double * mutableWeights() const {
00128         return weights_;
00129     }
00130 
00133     virtual bool canDoHeuristics() const {
00134         return (sosType_ == 1 && integerValued_);
00135     }
00137     inline void setIntegerValued(bool yesNo) {
00138         integerValued_ = yesNo;
00139     }
00140 private:
00142 
00144     int * members_;
00157     double * weights_;
00159     mutable double shadowEstimateDown_;
00161     mutable double shadowEstimateUp_;
00163     double downDynamicPseudoRatio_;
00165     double upDynamicPseudoRatio_;
00167     int numberTimesDown_;
00169     int numberTimesUp_;
00171     int numberMembers_;
00173     int sosType_;
00175     bool integerValued_;
00176 };
00177 
00183 class CbcSOSBranchingObject : public CbcBranchingObject {
00184 
00185 public:
00186 
00187     // Default Constructor
00188     CbcSOSBranchingObject ();
00189 
00190     // Useful constructor
00191     CbcSOSBranchingObject (CbcModel * model,  const CbcSOS * clique,
00192                            int way,
00193                            double separator);
00194 
00195     // Copy constructor
00196     CbcSOSBranchingObject ( const CbcSOSBranchingObject &);
00197 
00198     // Assignment operator
00199     CbcSOSBranchingObject & operator=( const CbcSOSBranchingObject& rhs);
00200 
00202     virtual CbcBranchingObject * clone() const;
00203 
00204     // Destructor
00205     virtual ~CbcSOSBranchingObject ();
00206 
00207     using CbcBranchingObject::branch ;
00209     virtual double branch();
00212     virtual void fix(OsiSolverInterface * solver,
00213                      double * lower, double * upper,
00214                      int branchState) const ;
00215 
00219     virtual void previousBranch() {
00220         CbcBranchingObject::previousBranch();
00221         computeNonzeroRange();
00222     }
00223 
00224     using CbcBranchingObject::print ;
00227     virtual void print();
00228 
00230     virtual CbcBranchObjType type() const {
00231         return SoSBranchObj;
00232     }
00233 
00241     virtual int compareOriginalObject(const CbcBranchingObject* brObj) const;
00242 
00251     virtual CbcRangeCompare compareBranchingObject
00252     (const CbcBranchingObject* brObj, const bool replaceIfOverlap = false);
00253 
00255     void computeNonzeroRange();
00256 
00257 private:
00259     const CbcSOS * set_;
00261     double separator_;
00267     int firstNonzero_;
00268     int lastNonzero_;
00269 };
00270 #endif
00271 

Generated on Sat Oct 23 2010 23:46:56 by  doxygen 1.7.1