6 #ifndef CbcCutGenerator_H
7 #define CbcCutGenerator_H
9 #include "OsiSolverInterface.hpp"
10 #include "OsiCuts.hpp"
11 #include "CglCutGenerator.hpp"
16 class OsiRowCutDebugger;
71 bool generateCuts( OsiCuts &cs,
int fullScan, OsiSolverInterface * solver,
83 int howOften = 1,
const char * name = NULL,
85 bool infeasible =
false,
int howOftenInsub = -100,
109 return generatorName_;
132 return whenCutGenerator_;
136 return whenCutGeneratorInSub_;
162 return depthCutGenerator_;
166 return depthCutGeneratorInSub_;
170 { maximumTries_ = value;}
173 {
return maximumTries_;}
181 return (switches_&1) != 0;
186 switches_ |= value ? 1 : 0;
190 return (switches_&2) != 0;
195 switches_ |= value ? 2 : 0;
201 return (switches_&4) != 0;
208 switches_ |= value ? 4 : 0;
212 return (switches_&64) != 0;
217 switches_ |= value ? 64 : 0;
218 timeInCutGenerator_ = 0.0;
222 return timeInCutGenerator_;
225 timeInCutGenerator_ += value;
236 numberTimes_ = value;
239 numberTimes_ += value;
249 numberCuts_ += value;
253 return numberElements_;
256 numberElements_ = value;
259 numberElements_ += value;
263 return numberColumnCuts_;
266 numberColumnCuts_ = value;
269 numberColumnCuts_ += value;
273 return numberCutsActive_;
276 numberCutsActive_ = value;
279 numberCutsActive_ += value;
282 switchOffIfLessThan_ = value;
285 return switchOffIfLessThan_;
289 return (switches_&128) != 0;
294 switches_ |= yesNo ? 128 : 0;
298 return (switches_&8) != 0;
303 switches_ |= yesNo ? 8 : 0;
307 return (switches_&16) != 0;
312 switches_ |= yesNo ? 16 : 0;
316 return (switches_&512) != 0;
321 switches_ |= yesNo ? 512 : 0;
325 return (switches_&1024) != 0;
330 switches_ |= yesNo ? 1024 : 0;
334 return (switches_&2048) != 0;
339 switches_ |= yesNo ? 2048 : 0;
343 return (switches_&4096) != 0;
348 switches_ |= yesNo ? 4096 : 0;
352 return numberCutsAtRoot_;
355 numberCutsAtRoot_ = value;
359 return numberActiveCutsAtRoot_;
362 numberActiveCutsAtRoot_ = value;
366 return numberShortCutsAtRoot_;
369 numberShortCutsAtRoot_ = value;
377 return (switches_&32) != 0;
382 switches_ |= yesNo ? 32 : 0;
386 return (switches_&256) != 0;
391 switches_ |= yesNo ? 256 : 0;
406 double timeInCutGenerator_;
411 CglCutGenerator * generator_;
414 char * generatorName_;
419 int whenCutGenerator_;
423 int whenCutGeneratorInSub_;
426 int switchOffIfLessThan_;
431 int depthCutGenerator_;
437 int depthCutGeneratorInSub_;
448 int numberColumnCuts_;
450 int numberCutsActive_;
452 int numberCutsAtRoot_;
454 int numberActiveCutsAtRoot_;
456 int numberShortCutsAtRoot_;
464 # define SCANCUTS 1000
466 # define SCANCUTS_PROBING 1000
void setNumberColumnCuts(int value)
int switchOffIfLessThan() const
void setWhatDepth(int value)
Set the cut generation depth.
int numberCutsAtRoot() const
Number of cuts generated at root.
bool switchedOff() const
Whether generator switched off for moment.
void setNormal(bool value)
Set whether the cut generator should be called in the normal place.
void setWhetherToUse(bool yesNo)
Set whether to use if any cuts generated.
void setIneffectualCuts(bool yesNo)
Set whether last round of cuts did little.
void setNumberCutsInTotal(int value)
bool globalCutsAtRoot() const
Whether global cuts at root.
int maximumTries() const
Get maximum number of times to enter.
const char * cutGeneratorName() const
return name of generator
void incrementNumberCutsInTotal(int value=1)
bool whetherCallAtEnd() const
Whether to call at end.
int switches() const
Get switches (for debug)
void setWhenInfeasible(bool value)
Set whether the cut generator should be called when the subproblem is found to be infeasible...
int whatDepth() const
Get the cut generation depth criterion.
CbcCutGenerator & operator=(const CbcCutGenerator &rhs)
Assignment operator.
bool atSolution() const
Get whether the cut generator should be called when a solution is found.
int numberElementsInTotal() const
Total number of elements added.
void setGlobalCuts(bool yesNo)
Set whether global cuts.
void setNumberCutsAtRoot(int value)
bool generateCuts(OsiCuts &cs, int fullScan, OsiSolverInterface *solver, CbcNode *node)
Generate cuts for the client model.
int numberActiveCutsAtRoot() const
Number of cuts active at root.
void setTiming(bool value)
Set whether the cut generator is being timed.
int numberCutsActive() const
Total number of cuts active after (at end of n cut passes at each node)
void setNeedsOptimalBasis(bool yesNo)
Set if optimal basis needed.
bool globalCuts() const
Whether global cuts.
bool whenInfeasible() const
Get whether the cut generator should be called when the subproblem is found to be infeasible...
void setWhetherInMustCallAgainMode(bool yesNo)
Set whether in must call again mode (or after others)
void setNumberShortCutsAtRoot(int value)
void setAtSolution(bool value)
Set whether the cut generator should be called when a solution is found.
double timeInCutGenerator() const
Return time taken in cut generator.
void setSwitchedOff(bool yesNo)
Set whether generator switched off for moment.
void incrementNumberColumnCuts(int value=1)
void refreshModel(CbcModel *model)
Set the client model.
bool whetherInMustCallAgainMode() const
Whether in must call again mode (or after others)
void setNumberTimesEntered(int value)
int numberTimesEntered() const
Number times cut generator entered.
int inaccuracy() const
Get level of cut inaccuracy (0 means exact e.g. cliques)
Information required while the node is live.
void setNumberCutsActive(int value)
int numberColumnCuts() const
Total number of column cuts.
int numberCutsInTotal() const
Total number of cuts added.
void setWhetherCallAtEnd(bool yesNo)
Set whether to call at end.
~CbcCutGenerator()
Destructor.
bool timing() const
Get whether the cut generator is being timed.
bool ineffectualCuts() const
Whether last round of cuts did little.
int whatDepthInSub() const
Get the cut generation depth criterion.in sub tree.
void generateTuning(FILE *fp)
Create C++ lines to show how to tune.
void scaleBackStatistics(int factor)
Scale back statistics by factor.
void setMaximumTries(int value)
Set maximum number of times to enter.
void setModel(CbcModel *model)
Set model.
void setGlobalCutsAtRoot(bool yesNo)
Set whether global cuts at root.
void incrementNumberCutsActive(int value=1)
void setInaccuracy(int level)
Set level of cut inaccuracy (0 means exact e.g. cliques)
CglCutGenerator * generator() const
Get the CglCutGenerator corresponding to this CbcCutGenerator.
void setNumberElementsInTotal(int value)
bool whetherToUse() const
Whether to use if any cuts generated.
bool normal() const
Get whether the cut generator should be called in the normal place.
void setWhatDepthInSub(int value)
Set the cut generation depth in sub tree.
CbcCutGenerator()
Default constructor.
void setNumberActiveCutsAtRoot(int value)
bool mustCallAgain() const
Whether generator MUST be called again if any cuts (i.e. ignore break from loop)
int numberShortCutsAtRoot() const
Number of short cuts at root.
void setMustCallAgain(bool yesNo)
Set whether generator MUST be called again if any cuts (i.e. ignore break from loop) ...
bool needsOptimalBasis() const
Say if optimal basis needed.
int howOftenInSub() const
Get the cut generation interval.in sub tree.
Interface between Cbc and Cut Generation Library.
void addStatistics(const CbcCutGenerator *other)
Add in statistics from other.
void setSwitchOffIfLessThan(int value)
Simple Branch and bound class.
void setHowOften(int value)
Set the cut generation interval.
int howOften() const
Get the cut generation interval.
void incrementTimeInCutGenerator(double value)
void incrementNumberElementsInTotal(int value=1)
void incrementNumberTimesEntered(int value=1)