13#include "OsiBranchingObject.hpp"
14class OsiSolverInterface;
21class OsiChooseVariable;
52 CbcBranchingObject *possibleBranch;
67class CbcObject :
public OsiObject {
74 CbcObject(CbcModel *
model);
77 CbcObject(
const CbcObject &);
80 CbcObject &operator=(
const CbcObject &rhs);
83 virtual CbcObject *clone()
const = 0;
102#ifdef CBC_NEW_STYLE_BRANCH
103 virtual double infeasibility(
const OsiBranchingInformation *info,
113 throw CoinError(
"Need code",
"infeasibility",
"CbcBranchBase");
122 virtual double feasibleRegion(OsiSolverInterface *solver,
const OsiBranchingInformation *info)
const;
135#ifdef CBC_NEW_STYLE_BRANCH
140 const OsiBranchingInformation *
148 const OsiBranchingInformation * ,
int )
const
150 throw CoinError(
"Need code",
"createBranch",
"CbcBranchBase");
158 virtual OsiBranchingObject *
createOsiBranch(OsiSolverInterface *solver,
const OsiBranchingInformation *info,
int way)
const;
199 virtual void floorCeiling(
double &floorValue,
double &ceilingValue,
double value,
200 double tolerance)
const;
213 inline int id()
const
230 return (
id_ >= 1000000000 &&
id_ < 1100000000);
const OsiBranchingObject * branchingObject() const
Branching object for this node.
int position() const
Get position in object_ list.
void setPosition(int position)
Set position in object_ list.
virtual void updateInformation(const CbcObjectUpdateData &)
Update object by CbcObjectUpdateData.
CbcModel * model() const
Return model.
void setId(int value)
Set identifier (normally column number in matrix) but 1000000000 to 1100000000 means optional branchi...
virtual void resetBounds(const OsiSolverInterface *)
Reset variable bounds to their original values.
virtual void feasibleRegion()=0
For the variable(s) referenced by the object, look at the current solution and set bounds to match th...
void setModel(CbcModel *model)
update model
virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface *, const OsiBranchingInformation *, int)
Create a branching object and indicate which way to branch first.
int id() const
Identifier (normally column number in matrix).
virtual CbcBranchingObject * notPreferredNewFeasible() const
Given a valid solution (with reduced costs, etc.), return a branching object which would give a new f...
int preferredWay() const
If -1 down always chosen first, +1 up always, 0 normal.
virtual CbcObjectUpdateData createUpdateInformation(const OsiSolverInterface *solver, const CbcNode *node, const CbcBranchingObject *branchingObject)
Pass in information on branch just done and create CbcObjectUpdateData instance.
virtual void redoSequenceEtc(CbcModel *, int, const int *)
Redoes data when sequence numbers change.
virtual void floorCeiling(double &floorValue, double &ceilingValue, double value, double tolerance) const
Returns floor and ceiling i.e.
virtual OsiBranchingObject * createBranch(OsiSolverInterface *, const OsiBranchingInformation *, int) const
virtual OsiSolverBranch * solverBranch() const
Create an OsiSolverBranch object.
virtual OsiBranchingObject * createOsiBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const
Create an Osibranching object and indicate which way to branch first.
int preferredWay_
If -1 down always chosen first, +1 up always, 0 normal.
virtual CbcBranchingObject * preferredNewFeasible() const
Given a valid solution (with reduced costs, etc.), return a branching object which would give a new f...
virtual double infeasibility(const OsiBranchingInformation *, int &preferredWay) const
Abstract base class for `objects'.
int id_
Identifier (normally column number in matrix).
virtual void initializeForBranching(CbcModel *)
Initialize for branching.
void setPreferredWay(int value)
Set -1 down always chosen first, +1 up always, 0 normal.
bool optionalObject() const
Return true if optional branching object i.e.
int position_
Position in object list.
Abstract branching object base class Now just difference with OsiBranchingObject.
Simple Branch and bound class.
Information required to recreate the subproblem at this node.