#include <OsiBranchingObject.hpp>
Inheritance diagram for OsiObject:
Public Member Functions | |
OsiObject () | |
Default Constructor. | |
OsiObject (const OsiObject &) | |
Copy constructor. | |
OsiObject & | operator= (const OsiObject &rhs) |
Assignment operator. | |
virtual OsiObject * | clone () const =0 |
Clone. | |
virtual | ~OsiObject () |
Destructor. | |
virtual double | infeasibility (const OsiSolverInterface *solver, int &whichWay) const |
Infeasibility of the object. | |
virtual double | infeasibility (const OsiBranchingInformation *info, int &whichWay) const =0 |
virtual double | checkInfeasibility (const OsiBranchingInformation *info) const |
virtual double | feasibleRegion (OsiSolverInterface *solver) const |
For the variable(s) referenced by the object, look at the current solution and set bounds to match the solution. | |
virtual double | feasibleRegion (OsiSolverInterface *solver, const OsiBranchingInformation *info) const =0 |
For the variable(s) referenced by the object, look at the current solution and set bounds to match the solution. | |
virtual OsiBranchingObject * | createBranch (OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const =0 |
Create a branching object and indicate which way to branch first. | |
virtual bool | canDoHeuristics () const |
Return true if object can take part in normal heuristics. | |
virtual bool | canMoveToNearest () const |
Return true if object can take part in move to nearest heuristic. | |
virtual int | columnNumber () const |
Column number if single column object -1 otherwise, Used by heuristics. | |
int | priority () const |
Return Priority - note 1 is highest priority. | |
void | setPriority (int priority) |
Set priority. | |
virtual bool | boundBranch () const |
Return true if branch should only bound variables. | |
virtual bool | canHandleShadowPrices () const |
Return true if knows how to deal with Pseudo Shadow Prices. | |
int | numberWays () const |
Return maximum number of ways branch may have. | |
void | setNumberWays (int numberWays) |
Set maximum number of ways branch may have. | |
void | setWhichWay (int way) |
Return preferred way to branch. | |
int | whichWay () const |
Return current preferred way to branch. | |
virtual int | preferredWay () const |
Get pre-emptive preferred way of branching - -1 off, 0 down, 1 up (for 2-way). | |
double | infeasibility () const |
Return infeasibility. | |
virtual double | upEstimate () const |
Return "up" estimate (default 1.0e-5). | |
virtual double | downEstimate () const |
Return "down" estimate (default 1.0e-5). | |
virtual void | resetBounds (const OsiSolverInterface *solver) |
Reset variable bounds to their original values. | |
virtual void | resetSequenceEtc (int numberColumns, const int *originalColumns) |
Change column numbers after preprocessing. | |
virtual void | updateBefore (const OsiObject *rhs) |
Updates stuff like pseudocosts before threads. | |
virtual void | updateAfter (const OsiObject *rhs, const OsiObject *baseObject) |
Updates stuff like pseudocosts after threads finished. | |
Protected Attributes | |
double | infeasibility_ |
Computed infeasibility. | |
short | whichWay_ |
Computed preferred way to branch. | |
short | numberWays_ |
Maximum number of ways on branch. | |
int | priority_ |
Priority. |
The branching model used in Osi is based on the idea of an object. In the abstract, an object is something that has a feasible region, can be evaluated for infeasibility, can be branched on (i.e., there's some constructive action to be taken to move toward feasibility), and allows comparison of the effect of branching.
This class (OsiObject) is the base class for an object. To round out the branching model, the class OsiBranchingObject describes how to perform a branch, and the class OsiBranchDecision describes how to compare two OsiBranchingObjects.
To create a new type of object you need to provide three methods: infeasibility(), feasibleRegion(), and createBranch(), described below.
This base class is primarily virtual to allow for any form of structure. Any form of discontinuity is allowed.
As there is an overhead in getting information from solvers and because other useful information is available there is also an OsiBranchingInformation class which can contain pointers to information. If used it must at minimum contain pointers to current value of objective, maximum allowed objective and pointers to arrays for bounds and solution and direction of optimization. Also integer and primal tolerance.
Classes which inherit might have other information such as depth, number of solutions, pseudo-shadow prices etc etc. May be easier just to throw in here - as I keep doing
Definition at line 51 of file OsiBranchingObject.hpp.
OsiObject::OsiObject | ( | ) |
Default Constructor.
OsiObject::OsiObject | ( | const OsiObject & | ) |
Copy constructor.
virtual OsiObject::~OsiObject | ( | ) | [virtual] |
Destructor.
virtual OsiObject* OsiObject::clone | ( | ) | const [pure virtual] |
Clone.
Implemented in CbcFollowOn2, CbcLink, CbcSimpleIntegerFixed, CbcClique, CbcSOS, CbcSimpleInteger, CbcNWay, CbcSimpleIntegerPseudoCost, CbcFollowOn, CbcObject, CbcBranchCut, CbcBranchToFixLots, CbcBranchAllDifferent, CbcSimpleIntegerDynamicPseudoCost, CbcLotsize, OsiOldLink, OsiLink, OsiBiLinear, OsiBiLinearEquality, OsiSimpleFixedInteger, OsiUsesBiLinear, OsiSimpleInteger, OsiSOS, and OsiLotsize.
virtual double OsiObject::infeasibility | ( | const OsiSolverInterface * | solver, | |
int & | whichWay | |||
) | const [virtual] |
Infeasibility of the object.
This is some measure of the infeasibility of the object. 0.0 indicates that the object is satisfied.
The preferred branching direction is returned in whichWay, where for normal two-way branching 0 is down, 1 is up
This is used to prepare for strong branching but should also think of case when no strong branching
The object may also compute an estimate of cost of going "up" or "down". This will probably be based on pseudo-cost ideas
This should also set mutable infeasibility_ and whichWay_ This is for instant re-use for speed
Default for this just calls infeasibility with OsiBranchingInformation NOTE - Convention says that an infeasibility of COIN_DBL_MAX means object has worked out it can't be satisfied!
Reimplemented in CbcObject.
virtual double OsiObject::infeasibility | ( | const OsiBranchingInformation * | info, | |
int & | whichWay | |||
) | const [pure virtual] |
Implemented in CbcObject, OsiOldLink, OsiLink, OsiBiLinear, OsiSimpleFixedInteger, OsiUsesBiLinear, OsiSimpleInteger, OsiSOS, and OsiLotsize.
virtual double OsiObject::checkInfeasibility | ( | const OsiBranchingInformation * | info | ) | const [virtual] |
Reimplemented in OsiBiLinear.
virtual double OsiObject::feasibleRegion | ( | OsiSolverInterface * | solver | ) | const [virtual] |
For the variable(s) referenced by the object, look at the current solution and set bounds to match the solution.
Returns measure of how much it had to move solution to make feasible
Reimplemented in CbcObject.
virtual double OsiObject::feasibleRegion | ( | OsiSolverInterface * | solver, | |
const OsiBranchingInformation * | info | |||
) | const [pure virtual] |
For the variable(s) referenced by the object, look at the current solution and set bounds to match the solution.
Returns measure of how much it had to move solution to make feasible Faster version
Implemented in CbcSimpleInteger, CbcObject, OsiOldLink, OsiLink, OsiBiLinear, OsiUsesBiLinear, OsiSimpleInteger, OsiSOS, and OsiLotsize.
virtual OsiBranchingObject* OsiObject::createBranch | ( | OsiSolverInterface * | solver, | |
const OsiBranchingInformation * | info, | |||
int | way | |||
) | const [pure virtual] |
Create a branching object and indicate which way to branch first.
The branching object has to know how to create branches (fix variables, etc.)
Implemented in CbcObject, OsiOldLink, OsiLink, OsiBiLinear, OsiSimpleFixedInteger, OsiUsesBiLinear, OsiSimpleInteger, OsiSOS, and OsiLotsize.
virtual bool OsiObject::canDoHeuristics | ( | ) | const [inline, virtual] |
Return true if object can take part in normal heuristics.
Reimplemented in CbcSOS, CbcLotsize, OsiOldLink, OsiLink, OsiBiLinear, OsiSOS, and OsiLotsize.
Definition at line 118 of file OsiBranchingObject.hpp.
virtual bool OsiObject::canMoveToNearest | ( | ) | const [inline, virtual] |
Return true if object can take part in move to nearest heuristic.
Definition at line 122 of file OsiBranchingObject.hpp.
virtual int OsiObject::columnNumber | ( | ) | const [virtual] |
Column number if single column object -1 otherwise, Used by heuristics.
Reimplemented in CbcSimpleInteger, CbcLotsize, OsiSimpleInteger, and OsiLotsize.
int OsiObject::priority | ( | ) | const [inline] |
Return Priority - note 1 is highest priority.
Definition at line 129 of file OsiBranchingObject.hpp.
References priority_.
Referenced by CbcModel::priority().
void OsiObject::setPriority | ( | int | priority | ) | [inline] |
virtual bool OsiObject::boundBranch | ( | ) | const [inline, virtual] |
Return true if branch should only bound variables.
Reimplemented in CbcBranchCut, OsiOldLink, OsiLink, and OsiBiLinear.
Definition at line 136 of file OsiBranchingObject.hpp.
virtual bool OsiObject::canHandleShadowPrices | ( | ) | const [inline, virtual] |
Return true if knows how to deal with Pseudo Shadow Prices.
Reimplemented in OsiSimpleInteger, OsiSOS, and OsiLotsize.
Definition at line 139 of file OsiBranchingObject.hpp.
int OsiObject::numberWays | ( | ) | const [inline] |
Return maximum number of ways branch may have.
Definition at line 142 of file OsiBranchingObject.hpp.
References numberWays_.
void OsiObject::setNumberWays | ( | int | numberWays | ) | [inline] |
Set maximum number of ways branch may have.
Definition at line 145 of file OsiBranchingObject.hpp.
References numberWays_.
void OsiObject::setWhichWay | ( | int | way | ) | [inline] |
Return preferred way to branch.
If two then way=0 means down and 1 means up, otherwise way points to preferred branch
Definition at line 151 of file OsiBranchingObject.hpp.
References whichWay_.
int OsiObject::whichWay | ( | ) | const [inline] |
Return current preferred way to branch.
If two then way=0 means down and 1 means up, otherwise way points to preferred branch
Definition at line 157 of file OsiBranchingObject.hpp.
References whichWay_.
virtual int OsiObject::preferredWay | ( | ) | const [inline, virtual] |
Get pre-emptive preferred way of branching - -1 off, 0 down, 1 up (for 2-way).
Reimplemented in CbcObject, and OsiObject2.
Definition at line 160 of file OsiBranchingObject.hpp.
double OsiObject::infeasibility | ( | ) | const [inline] |
Return infeasibility.
Definition at line 163 of file OsiBranchingObject.hpp.
References infeasibility_.
virtual double OsiObject::upEstimate | ( | ) | const [virtual] |
Return "up" estimate (default 1.0e-5).
Reimplemented in CbcSimpleIntegerPseudoCost, CbcSimpleIntegerDynamicPseudoCost, OsiSimpleInteger, OsiSOS, and OsiLotsize.
virtual double OsiObject::downEstimate | ( | ) | const [virtual] |
Return "down" estimate (default 1.0e-5).
Reimplemented in CbcSimpleIntegerPseudoCost, CbcSimpleIntegerDynamicPseudoCost, OsiSimpleInteger, OsiSOS, and OsiLotsize.
virtual void OsiObject::resetBounds | ( | const OsiSolverInterface * | solver | ) | [inline, virtual] |
Reset variable bounds to their original values.
Bounds may be tightened, so it may be good to be able to reset them to their original values.
Reimplemented in CbcSimpleInteger, CbcObject, CbcLotsize, OsiSimpleInteger, and OsiLotsize.
Definition at line 173 of file OsiBranchingObject.hpp.
virtual void OsiObject::resetSequenceEtc | ( | int | numberColumns, | |
const int * | originalColumns | |||
) | [inline, virtual] |
Change column numbers after preprocessing.
Reimplemented in CbcSimpleInteger, OsiOldLink, OsiLink, OsiBiLinear, OsiSimpleInteger, OsiSOS, and OsiLotsize.
Definition at line 176 of file OsiBranchingObject.hpp.
virtual void OsiObject::updateBefore | ( | const OsiObject * | rhs | ) | [inline, virtual] |
Updates stuff like pseudocosts before threads.
Reimplemented in CbcSimpleIntegerDynamicPseudoCost.
Definition at line 178 of file OsiBranchingObject.hpp.
virtual void OsiObject::updateAfter | ( | const OsiObject * | rhs, | |
const OsiObject * | baseObject | |||
) | [inline, virtual] |
Updates stuff like pseudocosts after threads finished.
Reimplemented in CbcSimpleIntegerDynamicPseudoCost.
Definition at line 180 of file OsiBranchingObject.hpp.
double OsiObject::infeasibility_ [mutable, protected] |
Computed infeasibility.
Definition at line 186 of file OsiBranchingObject.hpp.
Referenced by infeasibility().
short OsiObject::whichWay_ [mutable, protected] |
Computed preferred way to branch.
Definition at line 188 of file OsiBranchingObject.hpp.
Referenced by setWhichWay(), and whichWay().
short OsiObject::numberWays_ [protected] |
Maximum number of ways on branch.
Definition at line 190 of file OsiBranchingObject.hpp.
Referenced by numberWays(), and setNumberWays().
int OsiObject::priority_ [protected] |
Priority.
Definition at line 192 of file OsiBranchingObject.hpp.
Referenced by priority(), and setPriority().