00001 // Copyright (C) 2000, International Business Machines 00002 // Corporation and others. All Rights Reserved. 00003 #ifndef OsiRowCutDebugger_H 00004 #define OsiRowCutDebugger_H 00005 00006 #include <string> 00007 00008 #include "OsiCuts.hpp" 00009 #include "OsiSolverInterface.hpp" 00010 00012 class OsiRowCutDebugger { 00013 friend void OsiRowCutDebuggerUnitTest(const OsiSolverInterface * siP, 00014 const std::string & mpsDir); 00015 00016 public: 00017 00030 virtual int validateCuts(const OsiCuts & cs, int first, int last) const; 00031 00033 virtual bool invalidCut(const OsiRowCut & rowcut) const; 00034 00036 const double * optimalSolution() const 00037 { return optimalSolution_;} 00038 00040 int numberColumns() const { return (numberColumns_) ; } 00042 00049 bool activate(const OsiSolverInterface & si, const char * model); 00055 bool activate(const OsiSolverInterface & si, const double * solution); 00057 void redoSolution(int numberColumns,const int * originalColumns); 00059 00066 bool onOptimalPath(const OsiSolverInterface & si) const; 00068 00071 00072 bool active() const; 00074 00077 00078 OsiRowCutDebugger (); 00079 00083 OsiRowCutDebugger (const OsiSolverInterface & si, const char * model); 00084 00085 // Constructor with full solution (only integers need be correct) 00086 OsiRowCutDebugger (const OsiSolverInterface & si, const double * solution); 00087 00089 OsiRowCutDebugger ( 00090 const OsiRowCutDebugger &); 00091 00093 OsiRowCutDebugger & 00094 operator=( 00095 const OsiRowCutDebugger& rhs); 00096 00098 virtual 00099 ~OsiRowCutDebugger (); 00101 00102 private: 00103 00104 // Private member methods 00105 00106 00109 00111 00112 // Private member data 00113 00116 00117 int numberColumns_; 00119 bool * integerVariable_; 00121 double * optimalSolution_; 00123 }; 00124 00125 //############################################################################# 00131 void 00132 OsiRowCutDebuggerUnitTest(const OsiSolverInterface * siP, 00133 const std::string & mpsDir); 00134 00135 #endif