Go to the documentation of this file.
14 #ifndef CglFlowCover_H
15 #define CglFlowCover_H
19 #include "CoinError.hpp"
150 const std::string mpdDir );
171 virtual void generateCuts(
const OsiSolverInterface & si, OsiCuts & cs,
233 void flipRow(
int rowLen,
double* coef,
double& rhs)
const;
236 void flipRow(
int rowLen,
double* coef,
char& sen,
double& rhs)
const;
240 int rowLen,
int* ind,
241 double* coef,
char sen,
279 std::cout <<
"ERROR: Should allocate memory for rowType_ before "
280 <<
"using it " << std::endl;
281 throw CoinError(
"Forgot to allocate memory for rowType_",
282 "setRowType",
"CglFlowCover");
298 std::cout <<
"ERROR: Should allocate memory for vubs_ before "
299 <<
"using it " << std::endl;
300 throw CoinError(
"Forgot to allocate memory for vubs_",
"setVubs",
305 for (
int i = 0; i <
numCols_; ++i) {
306 os <<
"ix: " << i <<
", " <<
vubs_[i];
322 std::cout <<
"ERROR: Should allocate memory for vlbs_ before "
323 <<
"using it " << std::endl;
324 throw CoinError(
"Forgot to allocate memory for vlbs_",
"setVlbs",
369 const std::string mpdDir );
CglFlowColType
This enumerative constant describes the various col types.
CglFlowRowType * rowTypes_
CglFlowRowType of the rows in model.
CglFlowVUB(const CglFlowVUB &source)
Information about where the cut generator is invoked from.
@ CGLFLOW_ROW_VARUB
After the row is flipped to 'L', the row has exactly two variables: one is negative binary and the ot...
const CglFlowRowType * getRowTypes() const
int maxNumCuts_
The maximum number of flow cuts to be generated.
@ CGLFLOW_ROW_MIXUB
Rows can not be classfied into other types and the row sense is NOT 'E'.
double upper_
The index of the associated 0-1 variable.
@ CGLFLOW_COL_SECONDARY
The column is a secondary candidate.
bool doneInitPre_
Indicate whether initial flow preprecessing has been done.
double INFTY_
Very large number.
virtual std::string generateCpp(FILE *fp)
Create C++ lines to get to current state.
Lifed Simple Generalized Flow Cover Cut Generator Class.
void setVal(const double v)
void setRowTypes(CglFlowRowType *rt)
Set rowtypes, take over the ownership.
void setVlbs(CglFlowVLB *vlbs)
Set CglFlowVLBs,take over the ownership.
friend void CglFlowCoverUnitTest(const OsiSolverInterface *siP, const std::string mpdDir)
A function that tests the methods in the CglFlowCover class.
@ CGLFLOW_COL_INCUTDONE
The column is decided to be in cover.
void setMaxNumCuts(int mc)
@ CGLFLOW_COL_PRIME
This enumerative constant describes the various stati of vars in determining the cover.
const CglFlowVUB * getVubs() const
std::ostream & operator<<(std::ostream &os, const CglFlowVUB &v)
Overloaded operator<< for printing VUB and VLB.
CglFlowColCut
This enumerative constant describes the various stati of vars in a cut or not.
@ CGLFLOW_ROW_VAREQ
The row sense is 'E', the row has exactly two variables: one is binary and the other is a continous,...
CglFlowVUB & operator=(const CglFlowVUB &rhs)
@ CGLFLOW_COL_INCUT
The column is in cover now.
void flipRow(int rowLen, double *coef, double &rhs) const
Transform a row from ">=" to "<=", and vice versa.
int numFlowCuts_
The number flow cuts found.
int numCols_
The number columns of the problem.
bool firstProcess_
First time preprocessing.
CglFlowVLB * vlbs_
The array of CglFlowVLBs.
@ CGLFLOW_COL_INLMIN
The column is in L-.
int numRows_
The number rows of the problem.
Cut Generator Base Class.
double TOLERANCE_
If violation of a cut is greater that this number, the cut is useful.
Variable upper bound class.
CglFlowRowType determineOneRowType(const OsiSolverInterface &si, int rowLen, int *ind, double *coef, char sen, double rhs) const
Determine the type of a given row.
CglFlowCover & operator=(const CglFlowCover &rhs)
Assignment operator.
bool generateOneFlowCut(const OsiSolverInterface &si, const int rowLen, int *ind, double *coef, char sense, double rhs, OsiRowCut &flowCut, double &violation)
Based a given row, a LP solution and other model data, this function tries to generate a violated lif...
@ CGLFLOW_ROW_UNINTERSTED
All variables are binary.
@ CGLFLOW_ROW_NOBINUB
All variables are NOT binary and the row sense is NOT 'E'.
@ CGLFLOW_COL_CONTNEG
The column is a negative continous variable.
void setNumFlowCuts(int fc)
@ CGLFLOW_ROW_SUMVAREQ
The row has one binary and 2 or more other types of variables and the row sense is 'E'.
void setVlbs(const CglFlowVLB &vlb, int i)
const CglFlowVUB & getVubs(int i) const
const CglFlowVLB & getVlbs(int i) const
CglFlowCover()
Default constructor.
@ CGLFLOW_ROW_NOBINEQ
All variables are NOT binary and the row sense is 'E'.
@ CGLFLOW_ROW_SUMVARUB
The row has one binary and 2 or more other types of variables and the row sense is NOT 'E'.
int getMaxNumCuts() const
void incNumFlowCuts(int fc=1)
CglFlowVUB * vubs_
The array of CglFlowVUBs.
@ CGLFLOW_ROW_MIXEQ
Rows can not be classfied into other types and the row sense is 'E'.
void setVubs(const CglFlowVUB &vub, int i)
bool liftPlus(double &alpha, double &beta, int r, double m_j, double lambda, double y_j, double x_j, double dPrimePrime, double *M) const
void printVubs(std::ostream &os) const
void setVubs(CglFlowVUB *vubs)
Set CglFlowVUBs,take over the ownership.
virtual CglCutGenerator * clone() const
Clone.
@ CGLFLOW_ROW_UNDEFINED
The row type of this row is NOT defined yet.
virtual ~CglFlowCover()
Destructor.
CglFlowVUB CglFlowVLB
Variable lower bound class, which is the same as vub.
CglFlowRowType getRowType(const int i) const
@ CGLFLOW_COL_CONTPOS
The column is a positive continous variable.
CglFlowRowType
This enumerative constant describes the various row types.
@ CGLFLOW_COL_OUTCUT
The column is NOT in cover.
@ CGLFLOW_COL_INLMINMIN
The column is in L–.
virtual void generateCuts(const OsiSolverInterface &si, OsiCuts &cs, const CglTreeInfo info=CglTreeInfo())
Generate Lifed Simple Generalized flow cover cuts for the model data contained in si.
void setRowTypes(const CglFlowRowType rt, const int i)
void flowPreprocess(const OsiSolverInterface &si)
Do the following tasks:
@ CGLFLOW_ROW_VARLB
After the row is flipped to 'L', the row has exactlytwo variables: one is positive binary and the oth...
void CglFlowCoverUnitTest(const OsiSolverInterface *siP, const std::string mpdDir)
A function that tests the methods in the CglFlowCover class.
@ CGLFLOW_COL_BINNEG
The column(variable) is a negative binary variable.
@ CGLFLOW_COL_BINPOS
The column is a positive binary variable.
@ CGLFLOW_COL_INLMINDONE
The column is decided to be in L-.
void liftMinus(double &movement, int t, int r, double z, double dPrimePrime, double lambda, double ml, double *M, double *rho) const
Lift functions.
const CglFlowVLB * getVlbs() const
double EPSILON_
Tolerance used for numerical purpose.
int UNDEFINED_
The variable upper bound of a flow is not indentified yet.
CglFlowVUB()
The Value of the associated upper bound.