8 #ifndef CbcSimpleInteger_H 9 #define CbcSimpleInteger_H 37 int way,
double value);
47 double lowerValue,
double upperValue);
62 void fillPart(
int variable,
int way,
double value);
71 virtual void fix(OsiSolverInterface *solver,
72 double *lower,
double *upper,
73 int branchState)
const;
76 virtual bool tighten(OsiSolverInterface *);
104 memcpy(
down_, bounds, 2 *
sizeof(
double));
109 memcpy(
up_, bounds, 2 *
sizeof(
double));
111 #ifdef FUNNY_BRANCHING 114 inline const int *variables()
const 119 inline const double *newBounds()
const 124 inline int numberExtraChangedBounds()
const 126 return numberExtraChangedBounds_;
129 int applyExtraBounds(
int iColumn,
double lower,
double upper,
int way);
133 inline bool active()
const 135 return (
down_[1] != -COIN_DBL_MAX);
160 #ifdef FUNNY_BRANCHING 167 int numberExtraChangedBounds_;
197 OsiSimpleInteger *osiObject()
const;
199 virtual double infeasibility(
const OsiBranchingInformation *info,
200 int &preferredWay)
const;
208 virtual double feasibleRegion(OsiSolverInterface *solver,
const OsiBranchingInformation *info)
const;
215 virtual CbcBranchingObject *createCbcBranch(OsiSolverInterface *solver,
const OsiBranchingInformation *info,
int way);
224 virtual OsiSolverBranch *solverBranch(OsiSolverInterface *solver,
const OsiBranchingInformation *info)
const;
232 virtual void feasibleRegion();
238 virtual int columnNumber()
const;
242 columnNumber_ = value;
249 virtual void resetBounds(
const OsiSolverInterface *solver);
253 virtual void resetSequenceEtc(
int numberColumns,
const int *originalColumns);
257 return originalLower_;
261 originalLower_ = value;
265 return originalUpper_;
269 originalUpper_ = value;
Simple branching object for an integer variable.
void setDownBounds(const double bounds[2])
Set lower and upper bounds for down branch.
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 CbcBranchObjType type() const
Return the type (an integer identifier) of this.
virtual ~CbcIntegerBranchingObject()
Destructor.
virtual CbcRangeCompare compareBranchingObject(const CbcBranchingObject *brObj, const bool replaceIfOverlap=false)
Compare the this with brObj.
Define a single integer class.
void fillPart(int variable, int way, double value)
Does part of constructor.
virtual CbcBranchingObject * clone() const
Clone.
virtual double branch()
Sets the bounds for the variable according to the current arm of the branch and advances the object s...
CbcModel * model() const
Return model.
void setUpBounds(const double bounds[2])
Set lower and upper bounds for up branch.
double originalUpper_
Original upper bound.
double originalUpperBound() const
const double * downBounds() const
Lower and upper bounds for down branch.
int way() const
Get the state of the branching object.
virtual void fix(OsiSolverInterface *solver, double *lower, double *upper, int branchState) const
Update bounds in solver as in 'branch' and update given 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...
double originalLower_
data
int preferredWay_
If -1 down always chosen first, +1 up always, 0 normal.
int variable() const
Index identifying the associated CbcObject within its class.
virtual double branch()=0
Execute the actions required to branch, as specified by the current state of the 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.
virtual void print()
Print something about branch - only if log level high.
double originalLowerBound() const
Original bounds.
int columnNumber_
Column number in model.
double breakEven() const
Breakeven e.g 0.7 -> >= 0.7 go up first.
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)
virtual OsiSolverBranch * solverBranch() const
Create an OsiSolverBranch object.
const double * upBounds() const
Lower and upper bounds for up branch.
Simple Branch and bound class.