/home/coin/SVN-release/CoinAll-1.1.0/Osi/src/OsiCut.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2000, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #ifndef OsiCut_H
00004 #define OsiCut_H
00005 
00006 #include "OsiCollections.hpp"
00007 #include "OsiSolverInterface.hpp"
00008 
00017 #if 0
00018 / // count of how many times the cut has been used
00019 / // count of how many times the cut has been tested
00020 #endif
00021 
00022 #ifndef COIN_NOTEST_DUPLICATE
00023 #define COIN_DEFAULT_VALUE_FOR_DUPLICATE true
00024 #else
00025 #define COIN_DEFAULT_VALUE_FOR_DUPLICATE false
00026 #endif
00027 
00028 
00029 class OsiCut  {
00030   
00031 public:
00032     
00033   //-------------------------------------------------------------------
00036 
00037   inline void setEffectiveness( double e ); 
00039   inline double effectiveness() const; 
00041 
00044 
00045   inline void setGloballyValid( bool trueFalse ) 
00046   { globallyValid_=trueFalse ? 1 : 0;}
00047   inline void setGloballyValid( ) 
00048   { globallyValid_=1;}
00049   inline void setNotGloballyValid( ) 
00050   { globallyValid_=0;}
00052   inline bool globallyValid() const
00053   { return globallyValid_!=0;}
00055   inline void setGloballyValidAsInteger( int trueFalse ) 
00056   { globallyValid_=trueFalse;}
00058   inline int globallyValidAsInteger() const
00059   { return globallyValid_;}
00061 
00064 
00065   virtual void print() const {}
00067    
00068 #if 0
00069   / **@name Times used */
00070   / /@{
00071   / // Set times used
00072   inline void setTimesUsed( int t );
00073   / // Increment times used
00074   inline void incrementTimesUsed();
00075   / // Get times used
00076   inline int timesUsed() const;
00077   / /@}
00078   
00079   / **@name Times tested */
00080   / /@{
00081   / // Set times tested
00082   inline void setTimesTested( int t );
00083   / // Increment times tested
00084   inline void incrementTimesTested();
00085   / // Get times tested
00086   inline int timesTested() const;
00087   / /@}
00088 #endif
00089 
00090   //----------------------------------------------------------------
00091 
00094 
00095     inline virtual bool operator==(const OsiCut& rhs) const; 
00097     inline virtual bool operator!=(const OsiCut& rhs) const; 
00099     inline virtual bool operator< (const OsiCut& rhs) const; 
00101     inline virtual bool operator> (const OsiCut& rhs) const; 
00103 
00104   //----------------------------------------------------------------
00105   // consistent() - returns true if the cut is consistent with repect to itself.
00106   //         This might include checks to ensure that a packed vector
00107   //         itself does not have a negative index.
00108   // consistent(const OsiSolverInterface& si) - returns true if cut is consistent with
00109   //         respect to the solver interface's model. This might include a check to 
00110   //         make sure a column index is not greater than the number
00111   //         of columns in the problem.
00112   // infeasible(const OsiSolverInterface& si) - returns true if the cut is infeasible 
00113   //         "with respect to itself". This might include a check to ensure 
00114   //         the lower bound is greater than the upper bound, or if the
00115   //         cut simply replaces bounds that the new bounds are feasible with 
00116   //         respect to the old bounds.
00117   //-----------------------------------------------------------------
00125   inline virtual bool consistent() const=0; 
00126 
00132   inline virtual bool consistent(const OsiSolverInterface& si) const=0;
00133 
00155   inline virtual bool infeasible(const OsiSolverInterface &si) const=0;
00156 
00161   virtual double violated(const double * solution) const=0;
00163 
00164 protected:
00165 
00168 
00169   OsiCut ();
00170   
00172   OsiCut ( const OsiCut &);
00173    
00175   OsiCut & operator=( const OsiCut& rhs);
00176 
00178   virtual ~OsiCut ();
00180   
00181 private:
00182   
00185 
00186   double effectiveness_;
00188   int globallyValid_;
00189 #if 0
00191   int timesUsed_;
00193   int timesTested_;
00194 #endif
00195 
00196 };
00197 
00198 
00199 //-------------------------------------------------------------------
00200 // Set/Get member data
00201 //-------------------------------------------------------------------
00202 void OsiCut::setEffectiveness(double e)  { effectiveness_=e; }
00203 double OsiCut::effectiveness() const { return effectiveness_; }
00204 
00205 #if 0
00206 void OsiCut::setTimesUsed( int t ) { timesUsed_=t; }
00207 void OsiCut::incrementTimesUsed() { timesUsed_++; }
00208 int OsiCut::timesUsed() const { return timesUsed_; }
00209 
00210 void OsiCut::setTimesTested( int t ) { timesTested_=t; }
00211 void OsiCut::incrementTimesTested() { timesTested_++; }
00212 int OsiCut::timesTested() const{ return timesTested_; }
00213 #endif
00214 
00215 //----------------------------------------------------------------
00216 // == operator 
00217 //-------------------------------------------------------------------
00218 bool
00219 OsiCut::operator==(const OsiCut& rhs) const
00220 {
00221   return effectiveness()==rhs.effectiveness();
00222 }
00223 bool
00224 OsiCut::operator!=(const OsiCut& rhs) const
00225 {
00226   return !( (*this)==rhs );
00227 }
00228 bool
00229 OsiCut::operator< (const OsiCut& rhs) const
00230 {
00231   return effectiveness()<rhs.effectiveness();
00232 }
00233 bool
00234 OsiCut::operator> (const OsiCut& rhs) const
00235 {
00236   return effectiveness()>rhs.effectiveness();
00237 }
00238 #endif

Generated on Sun Nov 14 14:06:39 2010 for Coin-All by  doxygen 1.4.7