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