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_;}; 00039 00046 bool activate(const OsiSolverInterface & si, const char * model); 00052 bool activate(const OsiSolverInterface & si, const double * solution); 00054 void redoSolution(int numberColumns,const int * originalColumns); 00056 00063 bool onOptimalPath(const OsiSolverInterface & si) const; 00065 00068 00069 bool active() const; 00071 00074 00075 OsiRowCutDebugger (); 00076 00080 OsiRowCutDebugger (const OsiSolverInterface & si, const char * model); 00081 00082 // Constructor with full solution (only integers need be correct) 00083 OsiRowCutDebugger (const OsiSolverInterface & si, const double * solution); 00084 00086 OsiRowCutDebugger ( 00087 const OsiRowCutDebugger &); 00088 00090 OsiRowCutDebugger & 00091 operator=( 00092 const OsiRowCutDebugger& rhs); 00093 00095 virtual 00096 ~OsiRowCutDebugger (); 00098 00099 private: 00100 00101 // Private member methods 00102 00103 00106 00108 00109 // Private member data 00110 00113 00114 int numberColumns_; 00116 bool * integerVariable_; 00118 double * optimalSolution_; 00120 }; 00121 00122 //############################################################################# 00128 void 00129 OsiRowCutDebuggerUnitTest(const OsiSolverInterface * siP, 00130 const std::string & mpsDir); 00131 00132 #endif