00001 // Copyright (C) 2004, International Business Machines 00002 // Corporation and others. All Rights Reserved. 00003 #ifndef CglDuplicateRow_H 00004 #define CglDuplicateRow_H 00005 00006 #include <string> 00007 00008 #include "CglCutGenerator.hpp" 00009 class CglStored; 00010 00012 class CglDuplicateRow : public CglCutGenerator { 00013 00014 public: 00015 00016 00037 virtual void generateCuts( const OsiSolverInterface & si, OsiCuts & cs, 00038 const CglTreeInfo info = CglTreeInfo()) const; 00039 private: 00041 void generateCuts12( const OsiSolverInterface & si, OsiCuts & cs, 00042 const CglTreeInfo info = CglTreeInfo()) const; 00044 void generateCuts4( const OsiSolverInterface & si, OsiCuts & cs, 00045 const CglTreeInfo info = CglTreeInfo()) const; 00047 void generateCuts8( const OsiSolverInterface & si, OsiCuts & cs, 00048 const CglTreeInfo info = CglTreeInfo()) const; 00049 public: 00069 CglStored * outDuplicates( OsiSolverInterface * solver); 00070 00072 00075 00076 inline const int * duplicate() const 00077 { return duplicate_;} 00079 inline int sizeDynamic() const 00080 { return sizeDynamic_;} 00082 inline int numberOriginalRows() const 00083 { return matrix_.getNumRows();} 00085 00088 00089 inline int logLevel() const 00090 { return logLevel_;} 00091 inline void setLogLevel(int value) 00092 { logLevel_ = value;} 00094 00095 00098 00099 inline int maximumRhs() const 00100 { return maximumRhs_;} 00102 inline void setMaximumRhs(int value) 00103 { maximumRhs_=value;} 00105 00108 00109 inline int maximumDominated() const 00110 { return maximumDominated_;} 00112 inline void setMaximumDominated(int value) 00113 { maximumDominated_=value;} 00115 00117 00118 inline int mode() const 00119 { return mode_;} 00121 inline void setMode(int value) 00122 { mode_=value;} 00124 00127 00128 CglDuplicateRow (); 00129 00131 CglDuplicateRow (OsiSolverInterface * solver); 00132 00134 CglDuplicateRow ( 00135 const CglDuplicateRow & rhs); 00136 00138 virtual CglCutGenerator * clone() const; 00139 00141 CglDuplicateRow & 00142 operator=( 00143 const CglDuplicateRow& rhs); 00144 00146 virtual 00147 ~CglDuplicateRow (); 00149 virtual std::string generateCpp( FILE * fp); 00150 00152 virtual void refreshSolver(OsiSolverInterface * solver); 00154 00155 protected: 00156 00157 00158 // Protected member data 00159 00162 00163 CoinPackedMatrix matrix_; 00165 CoinPackedMatrix matrixByRow_; 00167 int * rhs_; 00169 mutable int * duplicate_; 00171 int * lower_; 00173 mutable CglStored * storedCuts_; 00175 int maximumDominated_; 00177 int maximumRhs_; 00179 mutable int sizeDynamic_; 00181 int mode_; 00183 int logLevel_; 00185 }; 00186 #endif