8 #ifndef CbcSimpleInteger_H
9 #define CbcSimpleInteger_H
38 int way ,
double value) ;
48 double lowerValue,
double upperValue) ;
63 void fillPart (
int variable,
int way ,
double value) ;
72 virtual void fix(OsiSolverInterface * solver,
73 double * lower,
double * upper,
74 int branchState)
const ;
77 virtual bool tighten(OsiSolverInterface * ) ;
102 memcpy(
down_, bounds, 2*
sizeof(
double));
106 memcpy(
up_, bounds, 2*
sizeof(
double));
108 #ifdef FUNNY_BRANCHING
111 inline const int * variables()
const {
115 inline const double * newBounds()
const {
119 inline int numberExtraChangedBounds()
const {
120 return numberExtraChangedBounds_;
123 int applyExtraBounds(
int iColumn,
double lower,
double upper,
int way) ;
127 inline bool active()
const {
128 return (
down_[1] != -COIN_DBL_MAX);
153 #ifdef FUNNY_BRANCHING
160 int numberExtraChangedBounds_;
194 virtual double infeasibility(
const OsiBranchingInformation * info,
203 virtual double feasibleRegion(OsiSolverInterface * solver,
const OsiBranchingInformation * info)
const;
219 virtual OsiSolverBranch *
solverBranch(OsiSolverInterface * solver,
const OsiBranchingInformation * info)
const;
243 virtual void resetBounds(
const OsiSolverInterface * solver) ;
247 virtual void resetSequenceEtc(
int numberColumns,
const int * originalColumns) ;
Simple branching object for an integer variable.
const double * upBounds() const
Lower and upper bounds for up branch.
OsiSimpleInteger * osiObject() const
Construct an OsiSimpleInteger object.
void setDownBounds(const double bounds[2])
Set lower and upper bounds for down branch.
virtual ~CbcSimpleInteger()
virtual void feasibleRegion()=0
For the variable(s) referenced by the object, look at the current solution and set bounds to match th...
void setBreakEven(double value)
Set breakeven e.g 0.7 -> >= 0.7 go up first.
void setOriginalLowerBound(double value)
double down_[2]
Lower [0] and upper [1] bounds for the down arm (way_ = -1)
CbcIntegerBranchingObject()
Default constructor.
CbcIntegerBranchingObject & operator=(const CbcIntegerBranchingObject &rhs)
Assignment operator.
virtual void fix(OsiSolverInterface *solver, double *lower, double *upper, int branchState) const
Update bounds in solver as in 'branch' and update given bounds.
virtual int columnNumber() const
Column number if single column object -1 otherwise, so returns >= 0 Used by heuristics.
virtual OsiSolverBranch * solverBranch() const
Create an OsiSolverBranch object.
virtual ~CbcIntegerBranchingObject()
Destructor.
virtual void resetBounds(const OsiSolverInterface *solver)
Reset variable bounds to their original values.
virtual CbcRangeCompare compareBranchingObject(const CbcBranchingObject *brObj, const bool replaceIfOverlap=false)
Compare the this with brObj.
virtual CbcBranchingObject * createCbcBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way)
Create a branching object and indicate which way to branch first.
const double * downBounds() const
Lower and upper bounds for down branch.
int preferredWay() const
If -1 down always chosen first, +1 up always, 0 normal.
Define a single integer class.
void fillPart(int variable, int way, double value)
Does part of constructor.
virtual double branch()
Sets the bounds for the variable according to the current arm of the branch and advances the object s...
int variable() const
Index identifying the associated CbcObject within its class.
void setUpBounds(const double bounds[2])
Set lower and upper bounds for up branch.
virtual CbcBranchingObject * clone() const
Clone.
double originalUpper_
Original upper bound.
int way() const
Get the state of the branching object.
double originalLowerBound() const
Original bounds.
Abstract branching object base class Now just difference with OsiBranchingObject. ...
virtual void previousBranch()
Reset every information so that the branching object appears to point to the previous child...
virtual CbcObject * clone() const
Clone.
double originalLower_
data
double originalUpperBound() const
int preferredWay_
If -1 down always chosen first, +1 up always, 0 normal.
virtual double infeasibility(const OsiBranchingInformation *info, int &preferredWay) const
Infeasibility - large is 0.5.
virtual void feasibleRegion()
Set bounds to fix the variable at the current (integer) value.
virtual CbcBranchObjType type() const
Return the type (an integer identifier) of this.
CbcModel * model() const
Return model.
virtual double branch()=0
Execute the actions required to branch, as specified by the current state of the branching object...
void fillCreateBranch(CbcIntegerBranchingObject *branching, const OsiBranchingInformation *info, int way)
Fills in a created branching object.
virtual bool tighten(OsiSolverInterface *)
Change (tighten) bounds in object to reflect bounds in solver.
virtual void print() const
Print something about branch - only if log level high.
double breakEven() const
Breakeven e.g 0.7 -> >= 0.7 go up first.
virtual void print()
Print something about branch - only if log level high.
CbcSimpleInteger & operator=(const CbcSimpleInteger &rhs)
int columnNumber_
Column number in model.
double breakEven_
Breakeven i.e. >= this preferred is up.
double up_[2]
Lower [0] and upper [1] bounds for the up arm (way_ = 1)
void setColumnNumber(int value)
Set column number.
void setOriginalUpperBound(double value)
Simple Branch and bound class.
virtual void resetSequenceEtc(int numberColumns, const int *originalColumns)
Change column numbers after preprocessing.