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