12 #ifndef CglMixedIntegerRounding_H
13 #define CglMixedIntegerRounding_H
19 #include "CoinError.hpp"
89 const std::string mpdDir);
129 virtual void generateCuts(
const OsiSolverInterface & si, OsiCuts & cs,
143 const int preproc = -1);
175 throw CoinError(
"Unallowable value. maxaggr must be > 0",
176 "gutsOfConstruct",
"CglMixedIntegerRounding");
191 if ((criterion >= 1) && (criterion <= 3)) {
195 throw CoinError(
"Unallowable value. criterion must be 1, 2 or 3",
196 "gutsOfConstruct",
"CglMixedIntegerRounding");
235 const int rowLen,
const int* ind,
236 const double* coef,
const char sense,
237 const double rhs)
const;
242 const double* colUpperBound,
243 const double* colLowerBound,
244 const CoinPackedMatrix& matrixByRow,
246 const double* coefByRow,
248 const CoinBigIndex* rowStarts,
249 const int* rowLengths,
251 const double* coefByCol,
253 const CoinBigIndex* colStarts,
254 const int* colLengths,
259 const int rowSelected,
260 std::set<int>& setRowsAggregated,
261 int* listRowsAggregated,
266 const CoinPackedMatrix& matrixByRow,
267 CoinPackedVector& rowToAggregate,
268 double& rhsToAggregate)
const;
272 const CoinPackedVector& rowAggregated,
273 const double* colUpperBound,
274 const double* colLowerBound,
275 const std::set<int>& setRowsAggregated,
276 const double* xlp,
const double* coefByCol,
277 const int* rowInds,
const CoinBigIndex* colStarts,
278 const int* colLengths,
280 int& colSelected )
const;
285 CoinPackedVector& rowToAggregate,
double rhs,
286 CoinPackedVector& rowAggregated,
287 double& rhsAggregated )
const;
294 const double UB)
const;
298 const CoinPackedVector& rowAggregated,
300 const double* xlpExtra,
301 const double* colUpperBound,
302 const double* colLowerBound,
303 CoinPackedVector& mixedKnapsack,
304 double& rhsMixedKnapsack,
double& sStar,
305 CoinPackedVector& contVariablesInS )
const;
309 const CoinPackedMatrix& matrixByRow,
310 const CoinPackedVector& rowAggregated,
311 const int* listRowsAggregated,
312 const char* sense,
const double* RHS,
316 const double* xlp,
const double sStar,
317 const double* colUpperBound,
318 const double* colLowerBound,
319 const CoinPackedVector& mixedKnapsack,
320 const double& rhsMixedKnapsack,
321 const CoinPackedVector& contVariablesInS,
322 OsiRowCut& flowCut )
const;
327 const double numeratorBeta,
328 const int *knapsackIndices,
329 const double* knapsackElements,
332 const double* colUpperBound,
333 const std::set<int>& setC,
334 CoinPackedVector& cMIR,
337 double& violation)
const;
340 inline double functionG(
const double d,
const double f )
const;
344 std::ofstream & fout,
346 const OsiSolverInterface& si,
347 const CoinPackedVector& rowAggregated,
348 const double& rhsAggregated,
const double* xlp,
349 const double* xlpExtra,
350 const int* listRowsAggregated,
351 const int* listColsSelected,
353 const double* colUpperBound,
354 const double* colLowerBound )
const;
427 const std::string mpdDir);
void setMULTIPLY_(bool multiply)
Set MULTIPLY_.
virtual std::string generateCpp(FILE *fp)
Create C++ lines to get to current state.
void mixIntRoundPreprocess(const OsiSolverInterface &si)
virtual void refreshSolver(OsiSolverInterface *solver)
This can be used to refresh any inforamtion.
virtual ~CglMixedIntegerRounding()
Destructor.
friend void CglMixedIntegerRoundingUnitTest(const OsiSolverInterface *siP, const std::string mpdDir)
After the row is flipped to 'L', the row has exactly two variables: one is negative binary and the ot...
void setCRITERION_(int criterion)
Set CRITERION_.
CglMixIntRoundVLB * vlbs_
int doPreproc_
Controls the preprocessing of the matrix to identify rows suitable for cut generation.
CglMixedIntegerRounding & operator=(const CglMixedIntegerRounding &rhs)
Assignment operator.
void setVal(const double v)
Information about where the cut generator is invoked from.
CglMixedIntegerRounding()
Default constructor.
void gutsOfConstruct(const int maxaggr, const bool multiply, const int criterion, const int preproc)
CglMixIntRoundVUB & operator=(const CglMixIntRoundVUB &rhs)
Mixed Integer Rounding Cut Generator Class.
void setMAXAGGR_(int maxaggr)
Set MAXAGGR_.
int UNDEFINED_
There is no variable upper bound or variable lower bound defined.
bool getDoPreproc() const
Get doPreproc.
int getCRITERION_() const
Get CRITERION_.
bool boundSubstitution(const OsiSolverInterface &si, const CoinPackedVector &rowAggregated, const double *xlp, const double *xlpExtra, const double *colUpperBound, const double *colLowerBound, CoinPackedVector &mixedKnapsack, double &rhsMixedKnapsack, double &sStar, CoinPackedVector &contVariablesInS) const
Cut Generator Base Class.
bool selectRowToAggregate(const OsiSolverInterface &si, const CoinPackedVector &rowAggregated, const double *colUpperBound, const double *colLowerBound, const std::set< int > &setRowsAggregated, const double *xlp, const double *coefByCol, const int *rowInds, const CoinBigIndex *colStarts, const int *colLengths, int &rowSelected, int &colSelected) const
bool cMirSeparation(const OsiSolverInterface &si, const CoinPackedMatrix &matrixByRow, const CoinPackedVector &rowAggregated, const int *listRowsAggregated, const char *sense, const double *RHS, const double *xlp, const double sStar, const double *colUpperBound, const double *colLowerBound, const CoinPackedVector &mixedKnapsack, const double &rhsMixedKnapsack, const CoinPackedVector &contVariablesInS, OsiRowCut &flowCut) const
void aggregateRow(const int colSelected, CoinPackedVector &rowToAggregate, double rhs, CoinPackedVector &rowAggregated, double &rhsAggregated) const
CglMixIntRoundVUB(const CglMixIntRoundVUB &source)
virtual CglCutGenerator * clone() const
Clone.
void CglMixedIntegerRoundingUnitTest(const OsiSolverInterface *siP, const std::string mpdDir)
bool getMULTIPLY_() const
Get MULTIPLY_.
void generateMirCuts(const OsiSolverInterface &si, const double *xlp, const double *colUpperBound, const double *colLowerBound, const CoinPackedMatrix &matrixByRow, const double *LHS, const double *coefByRow, const int *colInds, const CoinBigIndex *rowStarts, const int *rowLengths, const double *coefByCol, const int *rowInds, const CoinBigIndex *colStarts, const int *colLengths, OsiCuts &cs) const
RowType determineRowType(const OsiSolverInterface &si, const int rowLen, const int *ind, const double *coef, const char sense, const double rhs) const
bool isLowerSubst(const double inf, const double aj, const double xlp, const double LB, const double UB) const
void gutsOfCopy(const CglMixedIntegerRounding &rhs)
CglMixIntRoundVUB * vubs_
void printStats(std::ofstream &fout, const bool hasCut, const OsiSolverInterface &si, const CoinPackedVector &rowAggregated, const double &rhsAggregated, const double *xlp, const double *xlpExtra, const int *listRowsAggregated, const int *listColsSelected, const int level, const double *colUpperBound, const double *colLowerBound) const
double functionG(const double d, const double f) const
void cMirInequality(const int numInt, const double delta, const double numeratorBeta, const int *knapsackIndices, const double *knapsackElements, const double *xlp, const double sStar, const double *colUpperBound, const std::set< int > &setC, CoinPackedVector &cMIR, double &rhscMIR, double &sCoef, double &violation) const
CglMixIntRoundVUB CglMixIntRoundVLB
void setDoPreproc(int value)
Set doPreproc.
void copyRowSelected(const int iAggregate, const int rowSelected, std::set< int > &setRowsAggregated, int *listRowsAggregated, double *xlpExtra, const char sen, const double rhs, const double lhs, const CoinPackedMatrix &matrixByRow, CoinPackedVector &rowToAggregate, double &rhsToAggregate) const
The row sense is 'E', the row has exactly two variables: one is binary and the other is a continous...
virtual void generateCuts(const OsiSolverInterface &si, OsiCuts &cs, const CglTreeInfo info=CglTreeInfo())
Generate Mixed Integer Rounding cuts for the model data contained in si.
After the row is flipped to 'L', the row has exactly two variables: one is positive binary and the ot...
int getMAXAGGR_() const
Get MAXAGGR_.