12 #ifndef COUENNEOBJECT_HPP
13 #define COUENNEOBJECT_HPP
19 #include "OsiBranchingObject.hpp"
31 #define THRES_ZERO_SYMM 0.8
45 class CouenneCutGenerator;
99 virtual double infeasibility (
const OsiBranchingInformation *
info,
int &way)
const;
106 virtual double feasibleRegion (OsiSolverInterface*,
const OsiBranchingInformation*)
const;
110 virtual OsiBranchingObject *
createBranch (OsiSolverInterface*,
111 const OsiBranchingInformation*,
int)
const;
Cut Generator for linear convexifications.
pseudocostMult
type of up/down estimate to return for pseudocosts
const double large_bound
if |branching point| > this, change it
CouenneObject()
empty constructor (for unused objects)
virtual int columnNumber() const
Returns the column index.
void fint fint fint real fint real real real real real real real real real fint real fint fint fint real fint fint fint fint * info
OsiObject for auxiliary variables $w=f(x)$.
enum brSelStrat Strategy() const
return branching point selection strategy
CouNumber alpha_
Combination parameter for the mid-point branching point selection strategy.
virtual OsiBranchingObject * createBranch(OsiSolverInterface *, const OsiBranchingInformation *, int) const
create CouenneBranchingObject or CouenneThreeWayBranchObj based on this object
void setEstimate(double est, int direction)
set up/down estimate (0 for down, 1 for up).
exprVar * reference_
The (auxiliary) variable this branching object refers to.
void setEstimates(const OsiBranchingInformation *info, CouNumber *infeasibility, CouNumber *brpt) const
set up/down estimates based on branching information
enum brSelStrat strategy_
Branching point selection strategy.
bool doFBBT_
shall we do Feasibility based Bound Tightening (FBBT) at branching?
CouNumber feas_tolerance_
feasibility tolerance (equal to that of CouenneProblem)
double downEstimate_
down estimate (to be used in pseudocost)
CouenneProblem * problem_
pointer to Couenne problem
CouNumber minMaxDelta(funtriplet *ft, CouNumber lb, CouNumber ub)
CouNumber lp_clamp() const
Defines safe interval percentage for using LP point as a branching point.
const CouNumber default_alpha
void setParameters(Bonmin::BabSetupBase *base)
set object parameters by reading from command line
A class to have all elements necessary to setup a branch-and-bound.
bool doConvCuts_
shall we add convexification cuts at branching?
virtual double intInfeasibility(double value, double lb, double ub) const
integer infeasibility: min {value - floor(value), ceil(value) - value}
Class for MINLP problems with symbolic information.
const CouNumber closeToBounds
CouNumber getBrPoint(funtriplet *ft, CouNumber x0, CouNumber l, CouNumber u, const OsiBranchingInformation *info=NULL) const
pick branching point based on current strategy
const CouNumber max_pseudocost
double CouNumber
main number type in Couenne
enum pseudocostMult pseudoMultType_
multiplier type for pseudocost
double upEstimate_
up estimate (to be used in pseudocost)
CouNumber midInterval(CouNumber x, CouNumber l, CouNumber u, const OsiBranchingInformation *info=NULL) const
returns a point "inside enough" a given interval, or x if it already is.
~CouenneObject()
Destructor.
exprVar * Reference() const
return reference auxiliary variable
virtual double downEstimate() const
Return "down" estimate (for non-convex, distance old <–> new LP point)
CouenneCutGenerator * cutGen_
pointer to cut generator (not necessary, can be NULL)
virtual CouenneObject * clone() const
Cloning method.
CouNumber lp_clamp_
Defines safe interval percentage for using LP point as a branching point.
branch_obj
type of object (for branching variable selection)
const CouNumber default_clamp
JnlstPtr jnlst_
SmartPointer to the Journalist.
virtual double infeasibility(const OsiBranchingInformation *info, int &way) const
compute infeasibility of this variable, |w - f(x)| (where w is the auxiliary variable defined as w = ...
virtual double checkInfeasibility(const OsiBranchingInformation *info) const
compute infeasibility of this variable, |w - f(x)|, where w is the auxiliary variable defined as w = ...
virtual bool isCuttable() const
are we on the bad or good side of the expression?
CouNumber maxHeight(funtriplet *ft, CouNumber lb, CouNumber ub)
virtual double feasibleRegion(OsiSolverInterface *, const OsiBranchingInformation *) const
fix (one of the) arguments of reference auxiliary variable
void fint fint fint real fint real * x
virtual double upEstimate() const
Return "up" estimate (for non-convex, distance old <–> new LP point)
bool isInteger(CouNumber x)
is this number integer?