Osi  trunk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
OsiCut.hpp
Go to the documentation of this file.
00001 // Copyright (C) 2000, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 // This code is licensed under the terms of the Eclipse Public License (EPL).
00004 
00005 #ifndef OsiCut_H
00006 #define OsiCut_H
00007 
00008 #include "OsiCollections.hpp"
00009 #include "OsiSolverInterface.hpp"
00010 
00019 /*
00020   COIN_NOTEST_DUPLICATE is rooted in CoinUtils. Check there before you
00021   meddle here.
00022 */
00023 #ifdef COIN_FAST_CODE
00024 #ifndef COIN_NOTEST_DUPLICATE
00025 #define COIN_NOTEST_DUPLICATE
00026 #endif
00027 #endif
00028 
00029 #ifndef COIN_NOTEST_DUPLICATE
00030 #define COIN_DEFAULT_VALUE_FOR_DUPLICATE true
00031 #else
00032 #define COIN_DEFAULT_VALUE_FOR_DUPLICATE false
00033 #endif
00034 
00035 
00036 class OsiCut  {
00037   
00038 public:
00039     
00040   //-------------------------------------------------------------------
00043 
00044   inline void setEffectiveness( double e ); 
00046   inline double effectiveness() const; 
00048 
00051 
00052   inline void setGloballyValid( bool trueFalse ) 
00053   { globallyValid_=trueFalse ? 1 : 0;}
00054   inline void setGloballyValid( ) 
00055   { globallyValid_=1;}
00056   inline void setNotGloballyValid( ) 
00057   { globallyValid_=0;}
00059   inline bool globallyValid() const
00060   { return globallyValid_!=0;}
00062   inline void setGloballyValidAsInteger( int trueFalse ) 
00063   { globallyValid_=trueFalse;}
00065   inline int globallyValidAsInteger() const
00066   { return globallyValid_;}
00068 
00071 
00072   virtual void print() const {}
00074    
00075 #if 0
00076   / **@name Times used */
00077   / /@{
00078   / // Set times used
00079   inline void setTimesUsed( int t );
00080   / // Increment times used
00081   inline void incrementTimesUsed();
00082   / // Get times used
00083   inline int timesUsed() const;
00084   / /@}
00085   
00086   / **@name Times tested */
00087   / /@{
00088   / // Set times tested
00089   inline void setTimesTested( int t );
00090   / // Increment times tested
00091   inline void incrementTimesTested();
00092   / // Get times tested
00093   inline int timesTested() const;
00094   / /@}
00095 #endif
00096 
00097   //----------------------------------------------------------------
00098 
00101 
00102     inline virtual bool operator==(const OsiCut& rhs) const; 
00104     inline virtual bool operator!=(const OsiCut& rhs) const; 
00106     inline virtual bool operator< (const OsiCut& rhs) const; 
00108     inline virtual bool operator> (const OsiCut& rhs) const; 
00110 
00111   //----------------------------------------------------------------
00112   // consistent() - returns true if the cut is consistent with repect to itself.
00113   //         This might include checks to ensure that a packed vector
00114   //         itself does not have a negative index.
00115   // consistent(const OsiSolverInterface& si) - returns true if cut is consistent with
00116   //         respect to the solver interface's model. This might include a check to 
00117   //         make sure a column index is not greater than the number
00118   //         of columns in the problem.
00119   // infeasible(const OsiSolverInterface& si) - returns true if the cut is infeasible 
00120   //         "with respect to itself". This might include a check to ensure 
00121   //         the lower bound is greater than the upper bound, or if the
00122   //         cut simply replaces bounds that the new bounds are feasible with 
00123   //         respect to the old bounds.
00124   //-----------------------------------------------------------------
00132   inline virtual bool consistent() const=0; 
00133 
00139   inline virtual bool consistent(const OsiSolverInterface& si) const=0;
00140 
00162   inline virtual bool infeasible(const OsiSolverInterface &si) const=0;
00163 
00168   virtual double violated(const double * solution) const=0;
00170 
00171 protected:
00172 
00175 
00176   OsiCut ();
00177   
00179   OsiCut ( const OsiCut &);
00180    
00182   OsiCut & operator=( const OsiCut& rhs);
00183 
00185   virtual ~OsiCut ();
00187   
00188 private:
00189   
00192 
00193   double effectiveness_;
00195   int globallyValid_;
00196 #if 0
00197 
00198   int timesUsed_;
00200   int timesTested_;
00201 #endif
00202 
00203 };
00204 
00205 
00206 //-------------------------------------------------------------------
00207 // Set/Get member data
00208 //-------------------------------------------------------------------
00209 void OsiCut::setEffectiveness(double e)  { effectiveness_=e; }
00210 double OsiCut::effectiveness() const { return effectiveness_; }
00211 
00212 #if 0
00213 void OsiCut::setTimesUsed( int t ) { timesUsed_=t; }
00214 void OsiCut::incrementTimesUsed() { timesUsed_++; }
00215 int OsiCut::timesUsed() const { return timesUsed_; }
00216 
00217 void OsiCut::setTimesTested( int t ) { timesTested_=t; }
00218 void OsiCut::incrementTimesTested() { timesTested_++; }
00219 int OsiCut::timesTested() const{ return timesTested_; }
00220 #endif
00221 
00222 //----------------------------------------------------------------
00223 // == operator 
00224 //-------------------------------------------------------------------
00225 bool
00226 OsiCut::operator==(const OsiCut& rhs) const
00227 {
00228   return effectiveness()==rhs.effectiveness();
00229 }
00230 bool
00231 OsiCut::operator!=(const OsiCut& rhs) const
00232 {
00233   return !( (*this)==rhs );
00234 }
00235 bool
00236 OsiCut::operator< (const OsiCut& rhs) const
00237 {
00238   return effectiveness()<rhs.effectiveness();
00239 }
00240 bool
00241 OsiCut::operator> (const OsiCut& rhs) const
00242 {
00243   return effectiveness()>rhs.effectiveness();
00244 }
00245 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines