00001
00002
00003 #ifndef CglGomory_H
00004 #define CglGomory_H
00005
00006 #include <string>
00007
00008 #include "CglCutGenerator.hpp"
00009
00010 class CoinWarmStartBasis;
00012 class CglGomory : public CglCutGenerator {
00013 friend void CglGomoryUnitTest(const OsiSolverInterface * siP,
00014 const std::string mpdDir );
00015
00016 public:
00017
00018
00032 virtual void generateCuts( const OsiSolverInterface & si, OsiCuts & cs,
00033 const CglTreeInfo info = CglTreeInfo()) const;
00036 int generateCuts( const OsiRowCutDebugger * debugger,
00037 OsiCuts & cs,
00038 const CoinPackedMatrix & columnCopy,
00039 const CoinPackedMatrix & rowCopy,
00040 const double * objective, const double * colsol,
00041 const double * colLower, const double * colUpper,
00042 const double * rowLower, const double * rowUpper,
00043 const char * intVar ,
00044 const CoinWarmStartBasis* warm,
00045 const CglTreeInfo info = CglTreeInfo()) const;
00048 int generateCuts( const OsiRowCutDebugger * debugger,
00049 OsiCuts & cs,
00050 const CoinPackedMatrix & columnCopy,
00051 const double * objective, const double * colsol,
00052 const double * colLower, const double * colUpper,
00053 const double * rowLower, const double * rowUpper,
00054 const char * intVar ,
00055 const CoinWarmStartBasis* warm,
00056 const CglTreeInfo info = CglTreeInfo()) const;
00057
00059 virtual bool needsOptimalBasis() const;
00061
00064
00065 void setLimit(int limit);
00067 int getLimit() const;
00069 void setLimitAtRoot(int limit);
00071 int getLimitAtRoot() const;
00073
00078
00079 void setAway(double value);
00081 double getAway() const;
00083 void setAwayAtRoot(double value);
00085 double getAwayAtRoot() const;
00087
00097
00098 void setConditionNumberMultiplier(double value);
00100 double getConditionNumberMultiplier() const;
00102 void setLargestFactorMultiplier(double value);
00104 double getLargestFactorMultiplier() const;
00106
00109
00110 CglGomory ();
00111
00113 CglGomory (
00114 const CglGomory &);
00115
00117 virtual CglCutGenerator * clone() const;
00118
00120 CglGomory &
00121 operator=(
00122 const CglGomory& rhs);
00123
00125 virtual
00126 ~CglGomory ();
00128 virtual std::string generateCpp( FILE * fp);
00130
00131 private:
00132
00133
00134
00135
00136
00139
00140 double away_;
00142 double awayAtRoot_;
00144 double conditionNumberMultiplier_;
00146 double largestFactorMultiplier_;
00148 int limit_;
00150 int limitAtRoot_;
00152 };
00153
00154
00160 void CglGomoryUnitTest(const OsiSolverInterface * siP,
00161 const std::string mpdDir );
00162
00163 #endif