Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

SbbBranchActual.hpp

00001 // Copyright (C) 2002, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #ifndef SbbBranchActual_H
00004 #define SbbBranchActual_H
00005 
00006 #include "SbbBranchBase.hpp"
00007 
00008 
00010 
00011 
00012 class SbbClique : public SbbObject {
00013 
00014 public:
00015 
00016   // Default Constructor 
00017   SbbClique ();
00018 
00019   // Useful constructor (which are integer indices)
00020   // slack can denote a slack in set
00021   SbbClique (SbbModel * model, int cliqueType, int numberMembers,
00022              const int * which, const char * type,
00023              int identifier,int slack=-1);
00024   
00025   // Copy constructor 
00026   SbbClique ( const SbbClique &);
00027    
00029   virtual SbbObject * clone() const;
00030 
00031   // Assignment operator 
00032   SbbClique & operator=( const SbbClique& rhs);
00033 
00034   // Destructor 
00035   ~SbbClique ();
00036   
00038   virtual double infeasibility(int & preferredWay, double & otherWay) const;
00039 
00041   virtual void feasibleRegion();
00043   virtual SbbBranchingObject * createBranch(int way) const;
00045   inline int numberMembers() const
00046   {return numberMembers_;};
00047 
00049   inline int numberNonSOSMembers() const
00050   {return numberNonSOSMembers_;};
00051 
00053   inline const int * members() const
00054   {return members_;};
00055 
00058   inline const char type(int index) const
00059   {if (type_) return type_[index]; else return 1;};
00060 
00062   inline int cliqueType() const
00063   {return cliqueType_;};
00064 
00065 private:
00068   int numberMembers_;
00069 
00071   int numberNonSOSMembers_;
00072 
00074   int * members_;
00075 
00077   char * type_;
00078 
00080    int cliqueType_;
00081 
00083   int slack_;
00084 };
00085 
00087 
00088 
00089 class SbbSimpleInteger : public SbbObject {
00090 
00091 public:
00092 
00093   // Default Constructor 
00094   SbbSimpleInteger ();
00095 
00096   // Useful constructor - passed integer index and model index
00097   SbbSimpleInteger (SbbModel * model, int sequence, int iColumn);
00098   
00099   // Copy constructor 
00100   SbbSimpleInteger ( const SbbSimpleInteger &);
00101    
00103   virtual SbbObject * clone() const;
00104 
00105   // Assignment operator 
00106   SbbSimpleInteger & operator=( const SbbSimpleInteger& rhs);
00107 
00108   // Destructor 
00109   ~SbbSimpleInteger ();
00110   
00112   virtual double infeasibility(int & preferredWay, double & otherWay) const;
00113 
00121   virtual void feasibleRegion();
00122 
00124   virtual SbbBranchingObject * createBranch(int way) const;
00125 
00139   virtual SbbBranchingObject * preferredNewFeasible() const;
00140   
00148   virtual SbbBranchingObject * notPreferredNewFeasible() const ;
00149   
00155   virtual void resetBounds();
00156   
00158   inline int sequence() const
00159   {return sequence_;};
00160 
00162   inline int modelSequence() const
00163   {return columnNumber_;};
00164 
00166   inline double originalLowerBound() const
00167   { return originalLower_;};
00168   inline double originalUpperBound() const
00169   { return originalUpper_;};
00170 
00171 
00172 private:
00174 
00176   int sequence_;
00178   int columnNumber_;
00180   double originalLower_;
00182   double originalUpper_;
00183 };
00184 
00185 
00196 class SbbIntegerBranchingObject : public SbbBranchingObject {
00197 
00198 public:
00199 
00201   SbbIntegerBranchingObject ();
00202 
00210   SbbIntegerBranchingObject (SbbModel *model, int variable,
00211                              int way , double value) ;
00212   
00220   SbbIntegerBranchingObject (SbbModel *model, int variable, int way,
00221                              double lowerValue, double upperValue) ;
00222   
00224   SbbIntegerBranchingObject ( const SbbIntegerBranchingObject &);
00225    
00227   SbbIntegerBranchingObject & operator= (const SbbIntegerBranchingObject& rhs);
00228 
00230   virtual SbbBranchingObject * clone() const;
00231 
00233   virtual ~SbbIntegerBranchingObject ();
00234   
00238   virtual void branch();
00239 
00240 private:
00242   double down_[2];
00244   double up_[2];
00245 };
00246 
00247 
00256 class SbbCliqueBranchingObject : public SbbBranchingObject {
00257 
00258 public:
00259 
00260   // Default Constructor 
00261   SbbCliqueBranchingObject ();
00262 
00263   // Useful constructor
00264   SbbCliqueBranchingObject (SbbModel * model,  const SbbClique * clique,
00265                             int way,
00266                             int numberOnDownSide, const int * down,
00267                             int numberOnUpSide, const int * up);
00268   
00269   // Copy constructor 
00270   SbbCliqueBranchingObject ( const SbbCliqueBranchingObject &);
00271    
00272   // Assignment operator 
00273   SbbCliqueBranchingObject & operator=( const SbbCliqueBranchingObject& rhs);
00274 
00276   virtual SbbBranchingObject * clone() const;
00277 
00278   // Destructor 
00279   virtual ~SbbCliqueBranchingObject ();
00280   
00282   virtual void branch();
00283 private:
00285   const SbbClique * clique_;
00287   unsigned int downMask_[2];
00289   unsigned int upMask_[2];
00290 };
00291 
00292 
00297 class SbbLongCliqueBranchingObject : public SbbBranchingObject {
00298 
00299 public:
00300 
00301   // Default Constructor 
00302   SbbLongCliqueBranchingObject ();
00303 
00304   // Useful constructor
00305   SbbLongCliqueBranchingObject (SbbModel * model,  const SbbClique * clique,
00306                                  int way,
00307                             int numberOnDownSide, const int * down,
00308                             int numberOnUpSide, const int * up);
00309   
00310   // Copy constructor 
00311   SbbLongCliqueBranchingObject ( const SbbLongCliqueBranchingObject &);
00312    
00313   // Assignment operator 
00314   SbbLongCliqueBranchingObject & operator=( const SbbLongCliqueBranchingObject& rhs);
00315 
00317   virtual SbbBranchingObject * clone() const;
00318 
00319   // Destructor 
00320   virtual ~SbbLongCliqueBranchingObject ();
00321   
00323   virtual void branch();
00324 private:
00326   const SbbClique * clique_;
00328   unsigned int * downMask_;
00330   unsigned int * upMask_;
00331 };
00332 
00339 class SbbBranchDefaultDecision : public SbbBranchDecision {
00340 public:
00341   // Default Constructor 
00342   SbbBranchDefaultDecision ();
00343 
00344   // Copy constructor 
00345   SbbBranchDefaultDecision ( const SbbBranchDefaultDecision &);
00346 
00347   virtual ~SbbBranchDefaultDecision();
00348 
00350   virtual SbbBranchDecision * clone() const;
00351 
00353   virtual void initialize(SbbModel * model);
00354 
00374   virtual int betterBranch(SbbBranchingObject * thisOne,
00375                             SbbBranchingObject * bestSoFar,
00376                             double changeUp, int numInfUp,
00377                             double changeDn, int numInfDn);
00378 
00379 private:
00380   
00382   SbbBranchDefaultDecision & operator=(const SbbBranchDefaultDecision& rhs);
00383 
00385 
00387   double bestCriterion_;
00388 
00390   double bestChangeUp_;
00391 
00393   int bestNumberUp_;
00394 
00396   double bestChangeDown_;
00397 
00399   int bestNumberDown_;
00400 
00402   SbbBranchingObject * bestObject_;
00403 
00404 };
00405 
00406 #endif

Generated on Wed Dec 3 14:36:19 2003 for Sbb by doxygen 1.3.5