00001
00002
00003 #ifndef CglOddHole_H
00004 #define CglOddHole_H
00005
00006 #include <string>
00007
00008 #include "CglCutGenerator.hpp"
00009
00011 class CglOddHole : public CglCutGenerator {
00012 friend void CglOddHoleUnitTest(const OsiSolverInterface * siP,
00013 const std::string mpdDir );
00014
00015 public:
00016
00017
00038 virtual void generateCuts( const OsiSolverInterface & si, OsiCuts & cs,
00039 const CglTreeInfo info = CglTreeInfo()) const;
00041
00044
00045
00046
00047 void createRowList( const OsiSolverInterface & si,
00048 const int * possible=NULL);
00050 void createRowList(int numberRows, const int * whichRow);
00052
00055
00056
00057 void createCliqueList(int numberCliques, const int * cliqueStart,
00058 const int * cliqueMember);
00060
00063
00064 int numberPossible();
00066
00068
00069 double getMinimumViolation() const;
00070 void setMinimumViolation(double value);
00072 double getMinimumViolationPer() const;
00073 void setMinimumViolationPer(double value);
00075 int getMaximumEntries() const;
00076 void setMaximumEntries(int value);
00078
00081
00082 CglOddHole ();
00083
00085 CglOddHole (
00086 const CglOddHole &);
00087
00089 virtual CglCutGenerator * clone() const;
00090
00092 CglOddHole &
00093 operator=(
00094 const CglOddHole& rhs);
00095
00097 virtual
00098 ~CglOddHole ();
00099
00101 virtual void refreshSolver(OsiSolverInterface * solver);
00103
00104 private:
00105
00106
00107
00108
00111
00112
00113 void generateCuts(const OsiRowCutDebugger * debugger,
00114 const CoinPackedMatrix & rowCopy,
00115 const double * solution, const double * dj,
00116 OsiCuts & cs, const int * suitableRow,
00117 const int * fixedColumn,const CglTreeInfo info,
00118 bool packed);
00120
00121
00122
00125
00126 int * suitableRows_;
00128 int * startClique_;
00130 int * member_;
00132 double epsilon_;
00134 double onetol_;
00136 double minimumViolation_;
00138 double minimumViolationPer_;
00140 int maximumEntries_;
00142 int numberRows_;
00144 int numberCliques_;
00146 };
00147
00148
00154 void CglOddHoleUnitTest(const OsiSolverInterface * siP,
00155 const std::string mpdDir );
00156
00157 #endif