00001
00002
00003
00004
00005 #ifndef OsiRowCutDebugger_H
00006 #define OsiRowCutDebugger_H
00007
00014 #include <string>
00015
00016 #include "OsiCuts.hpp"
00017 #include "OsiSolverInterface.hpp"
00018
00042 class OsiRowCutDebugger {
00043 friend void OsiRowCutDebuggerUnitTest(const OsiSolverInterface * siP,
00044 const std::string & mpsDir);
00045
00046 public:
00047
00059 virtual int validateCuts(const OsiCuts & cs, int first, int last) const;
00060
00066 virtual bool invalidCut(const OsiRowCut & rowcut) const;
00067
00074 bool onOptimalPath(const OsiSolverInterface &si) const;
00076
00088 bool activate(const OsiSolverInterface &si, const char *model) ;
00089
00101 bool activate(const OsiSolverInterface &si, const double* solution,
00102 bool keepContinuous = false) ;
00103
00105 bool active() const;
00107
00110
00111 inline const double * optimalSolution() const
00112 { return knownSolution_;}
00113
00115 inline int numberColumns() const { return (numberColumns_) ; }
00116
00118 inline double optimalValue() const { return knownValue_;}
00119
00130 void redoSolution(int numberColumns, const int *originalColumns);
00131
00133 int printOptimalSolution(const OsiSolverInterface & si) const;
00135
00138
00139 OsiRowCutDebugger ();
00140
00145 OsiRowCutDebugger(const OsiSolverInterface &si, const char *model) ;
00146
00151 OsiRowCutDebugger(const OsiSolverInterface &si, const double *solution,
00152 bool enforceOptimality = false) ;
00153
00155 OsiRowCutDebugger(const OsiRowCutDebugger &);
00156
00158 OsiRowCutDebugger& operator=(const OsiRowCutDebugger& rhs);
00159
00161 virtual ~OsiRowCutDebugger ();
00163
00164 private:
00165
00166
00167
00170
00171 double knownValue_;
00172
00177 int numberColumns_;
00178
00180 bool * integerVariable_;
00181
00183 double * knownSolution_;
00185 };
00186
00187 #endif