27 const std::string mpdDir );
116 char * possible=NULL,
117 bool withObjective=
true);
126 int minimumSize=2,
int maximumSize=100);
231 unsigned int equality:1;
306 const int * realRow,
const double * rowLower,
const double * rowUpper,
307 const char * intVar,
double * minR,
double * maxR,
int * markR,
315 double * rowLower,
double * rowUpper,
316 char * intVar,
double * minR,
double * maxR,
int * markR,
324 double * rowLower,
double * rowUpper,
325 char * intVar,
double * minR,
double * maxR,
int * markR,
331 double * rowLower,
double * rowUpper,
332 double * colLower,
double * colUpper,
338 int tighten(
double *colLower,
double * colUpper,
339 const int *column,
const double *rowElements,
341 const int * rowLength,
342 double *rowLower,
double *rowUpper,
343 int nRows,
int nCols,
char * intVar,
int maxpass,
346 void tighten2(
double *colLower,
double * colUpper,
347 const int *column,
const double *rowElements,
349 const int * rowLength,
350 double *rowLower,
double *rowUpper,
351 double * minR,
double * maxR,
int * markR,
468 { assert ((dis.
affected&0x80000000)!=0);
return true;}
473 {
return (dis.
affected&0x40000000)!=0;}
477 {
return (dis.
affected&0x20000000)!=0;}
479 { dis.
affected = (affectedToUB ? 0x20000000 : 0)|(dis.
affected&0xdfffffff);}
488 const std::string mpdDir );
int probeCliques(const OsiSolverInterface &si, const OsiRowCutDebugger *debugger, OsiCuts &cs, double *colLower, double *colUpper, CoinPackedMatrix *rowCopy, CoinPackedMatrix *columnCopy, const int *realRow, double *rowLower, double *rowUpper, char *intVar, double *minR, double *maxR, int *markR, CglTreeInfo *info)
Does probing and adding cuts (with cliques)
int gutsOfGenerateCuts(const OsiSolverInterface &si, OsiCuts &cs, double *rowLower, double *rowUpper, double *colLower, double *colUpper, CglTreeInfo *info)
Does most of work of generateCuts Returns number of infeasibilities.
int getMaxPassRoot() const
Get maximum number of passes per node (root node)
int probeSlacks(const OsiSolverInterface &si, const OsiRowCutDebugger *debugger, OsiCuts &cs, double *colLower, double *colUpper, CoinPackedMatrix *rowCopy, CoinPackedMatrix *columnCopy, double *rowLower, double *rowUpper, char *intVar, double *minR, double *maxR, int *markR, CglTreeInfo *info)
Does probing and adding cuts for clique slacks.
disaggregation * cutVector_
int maxStack_
Maximum number of variables to look at in one probe.
double * colLower_
Lower bounds on columns.
void setupRowCliqueInformation(const OsiSolverInterface &si)
Sets up clique information for each row.
int maxProbe_
Maximum number of unsatisfied variables to probe.
int getMaxLook() const
Get maximum number of variables to look at in one probe.
This just uses implication info.
void setMaxElements(int value)
Set maximum number of elements in row for it to be considered.
CliqueEntry * cliqueRow_
For each column with nonzero in row copy this gives a clique "number".
int * lookedAt_
Which ones looked at this time.
int getMaxProbe() const
Get maximum number of unsatisfied variables to look at.
int maxStackRoot_
Maximum number of variables to look at in one probe at root.
void setMaxLookRoot(int value)
Set maximum number of variables to look at in one probe (root node)
int maxElements_
Maximum number of elements in row for scan.
int numberCliques() const
Number of cliques.
void setMaxPass(int value)
Set maximum number of passes per node.
virtual CglCutGenerator * clone() const
Clone.
CglTreeProbingInfo * probingInfo_
Pointer to tree probing info.
int numberColumns_
Number of columns in problem ( must == current)
void setWhenAtUBInDisaggregation(disaggregationAction &dis, bool whenAtUB)
int maxProbeRoot_
Maximum number of unsatisfied variables to probe at root.
const double * relaxedRowLower() const
Lower.
CliqueEntry * cliqueEntry() const
Entries for clique.
virtual std::string generateCpp(FILE *fp)
Create C++ lines to get to current state.
int numberRows_
Number of rows in snapshot (or when cliqueRow stuff computed)
Information about where the cut generator is invoked from.
CglImplication & operator=(const CglImplication &rhs)
Assignment operator.
int maxPass_
Maximum number of passes to do in probing.
Collections of row cuts and column cuts.
CliqueType * cliqueType() const
Clique type.
double * rowUpper_
Upper bounds on rows.
int number01Integers_
Number of 0-1 integer variables.
disaggregationAction * index
void setMode(int mode)
Set.
const int * lookedAt() const
Which ones looked at this time.
CglImplication()
Default constructor.
int * endFixStart_
End of fixes for a column.
CliqueType * cliqueType_
Clique type.
void setAffectedInDisaggregation(disaggregationAction &dis, int affected)
char * tightenBounds_
If not null and [i] !=0 then also tighten even if continuous.
const char * tightenBounds() const
Array which says tighten continuous.
void deleteSnapshot()
Deletes snapshot.
int * zeroFixStart_
Start of zeroFixes cliques for a column in matrix or -1 if not in any clique.
int createCliques(OsiSolverInterface &si, int minimumSize=2, int maximumSize=100)
Creates cliques for use by probing.
const double * tightUpper() const
Upper.
int * whichClique_
Clique numbers for one or zero fixes.
int * cliqueRowStart_
cliqueRow_ starts for each row
int logLevel_
Log level - 0 none, 1 - a bit, 2 - more details.
void setProbingInfo(CglTreeProbingInfo *info)
Set implication.
Abstract Base Class for describing an interface to a solver.
void setMaxLook(int value)
Set maximum number of variables to look at in one probe.
virtual CglCutGenerator * clone() const
Clone.
void setMaxElementsRoot(int value)
Set maximum number of elements in row for it to be considered (root node)
virtual void generateCuts(const OsiSolverInterface &si, OsiCuts &cs, const CglTreeInfo info=CglTreeInfo())
Generate cuts from implication table Insert generated cuts into the cut set cs.
int * oneFixStart_
Start of oneFixes cliques for a column in matrix or -1 if not in any clique.
int totalTimesCalled_
Total number of times called.
int mode_
Mode - 0 lazy using snapshot, 1 just unsatisfied, 2 all.
OsiSolverInterface * cliqueModel(const OsiSolverInterface *model, int type)
Create a fake model by adding cliques if type&4 then delete rest of model first, if 1 then add proper...
CliqueEntry * cliqueEntry_
Entries for clique.
Derived class to pick up probing info.
int probe(const OsiSolverInterface &si, const OsiRowCutDebugger *debugger, OsiCuts &cs, double *colLower, double *colUpper, CoinPackedMatrix *rowCopy, CoinPackedMatrix *columnCopy, const CoinBigIndex *rowStartPos, const int *realRow, const double *rowLower, const double *rowUpper, const char *intVar, double *minR, double *maxR, int *markR, CglTreeInfo *info)
Does probing and adding cuts (without cliques and mode_!=0)
bool zeroOneInDisaggregation(const disaggregationAction &dis)
double * colUpper_
Upper bounds on columns.
int numberIntegers_
Number of integer variables.
int maxPassRoot_
Maximum number of passes to do in probing at root.
void setMaxProbe(int value)
Set maximum number of unsatisfied variables to look at.
Cut Generator Base Class.
int numberCliques_
Cliques Number of cliques.
virtual bool mayGenerateRowCutsInTree() const
Returns true if may generate Row cuts in tree (rather than root node).
Only useful type of disaggregation is most normal For now just done for 0-1 variables Can be used for...
CglProbing()
Default constructor.
bool affectedToUBInDisaggregation(const disaggregationAction &dis)
const double * relaxedRowUpper() const
Upper.
double primalTolerance_
Tolerance to see if infeasible.
int getUsingObjective() const
Get.
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 probing/disaggregation cuts for the model of the solver interface, si.
void setZeroOneInDisaggregation(disaggregationAction &dis, bool zeroOne)
struct CglProbing::disaggregation_struct_tag disaggregation
Disaggregation cuts and for building cliques.
double * rowLower_
Lower bounds on rows.
void CglProbingUnitTest(const OsiSolverInterface *siP, const std::string mpdDir)
A function that tests the methods in the CglProbing class.
CoinBigIndex * cliqueStart() const
Start of each clique.
int numberThisTime_
Number looked at this time.
int getMaxLookRoot() const
Get maximum number of variables to look at in one probe (root node)
Sparse Matrix Base Class.
void tighten2(double *colLower, double *colUpper, const int *column, const double *rowElements, const CoinBigIndex *rowStart, const int *rowLength, double *rowLower, double *rowUpper, double *minR, double *maxR, int *markR, int nRows)
This just sets minima and maxima on rows.
int rowCuts_
Row cuts flag 0 no cuts, 1 just disaggregation type, 2 coefficient ( 3 both), 4 just column cuts -n a...
int getMaxElements() const
Get maximum number of elements in row for it to be considered.
int numberThisTime() const
Number looked at this time.
const double * tightLower() const
Lower.
virtual ~CglImplication()
Destructor.
CoinBigIndex * cliqueStart_
Start of each clique.
int getLogLevel() const
Get log level.
void setLogLevel(int value)
Set log level - 0 none, 1 - a bit, 2 - more details.
void setAffectedToUBInDisaggregation(disaggregationAction &dis, bool affectedToUB)
virtual void refreshSolver(OsiSolverInterface *solver)
This can be used to refresh any inforamtion.
Disaggregation cuts and for building cliques.
void tightenThese(const OsiSolverInterface &solver, int number, const int *which)
Mark variables to be tightened.
int getMaxPass() const
Get maximum number of passes per node.
int tighten(double *colLower, double *colUpper, const int *column, const double *rowElements, const CoinBigIndex *rowStart, const CoinBigIndex *rowStartPos, const int *rowLength, double *rowLower, double *rowUpper, int nRows, int nCols, char *intVar, int maxpass, double tolerance)
This tightens column bounds (and can declare infeasibility) It may also declare rows to be redundant...
int snapshot(const OsiSolverInterface &si, char *possible=NULL, bool withObjective=true)
Create a copy of matrix which is to be used this is to speed up process and to give global cuts Can g...
Validate cuts against a known solution.
void setUsingObjective(int yesNo)
Set 0 don't 1 do -1 don't even think about it.
friend void CglProbingUnitTest(const OsiSolverInterface *siP, const std::string mpdDir)
A function that tests the methods in the CglProbing class.
bool whenAtUBInDisaggregation(const disaggregationAction &dis)
int maxElementsRoot_
Maximum number of elements in row for scan at root.
int generateCutsAndModify(const OsiSolverInterface &si, OsiCuts &cs, CglTreeInfo *info)
int usingObjective_
Whether to include objective as constraint.
void setMaxProbeRoot(int value)
Set maximum number of unsatisfied variables to look at (root node)
void setRowCuts(int type)
Set 0 no cuts, 1 just disaggregation type, 2 coefficient ( 3 both)
int getMaxElementsRoot() const
Get maximum number of elements in row for it to be considered (root node)
CoinPackedMatrix * columnCopy_
Column copy (only if snapshot)
int affectedInDisaggregation(const disaggregationAction &dis)
virtual ~CglProbing()
Destructor.
Probing Cut Generator Class.
void setMaxPassRoot(int value)
Set maximum number of passes per node (root node)
CoinPackedMatrix * rowCopy_
Row copy (only if snapshot)
CglProbing & operator=(const CglProbing &rhs)
Assignment operator.
void deleteCliques()
Delete all clique information.
int getMaxProbeRoot() const
Get maximum number of unsatisfied variables to look at (root node)