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.
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.
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.
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.
The column is decided to be in cover.
void setMaxNumCuts(int mc)
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.
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)
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.
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...
All variables are binary.
All variables are NOT binary and the row sense is NOT 'E'.
The column is a negative continous variable.
void setNumFlowCuts(int fc)
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.
All variables are NOT binary and the row sense is 'E'.
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.
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.
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
The column is a positive continous variable.
CglFlowRowType
This enumerative constant describes the various row types.
The column is NOT in cover.
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:
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.
The column(variable) is a negative binary variable.
The column is a positive binary variable.
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.