19#ifndef MINOTAURUNIVARQUADHANDLER_H
20#define MINOTAURUNIVARQUADHANDLER_H
28typedef LinearFunction* LinearFunctionPtr;
88 ModVector &mods, BrVarCandSet &cands,
89 BrCandVector &gencands,
bool &is_inf);
91 double getBranchingPt_(
double vio,
double lb,
double ub,
double allowed_vio);
103 bool &should_prune,
double &inf_meas);
169 static const std::string me_;
175 PresolveStats pStats_;
204 void addCut_(RelaxationPtr rel, LinUnivarPtr luv,
double xl,
double xval,
205 double yval,
bool &ifcuts);
219 void addCut_(RelaxationPtr rel, LinBivarPtr lbv,
double x1l,
double x2l,
220 double x1val,
double x2val,
double yval,
bool &ifcuts);
230 bool bwdPropBivar_(LinBivarPtr lbv,
bool *changed);
245 bool bwdPropBivar_(LinBivarPtr lbv, RelaxationPtr rel,
bool mod_rel,
246 bool *changed, ModVector &p_mods, ModVector &r_mods);
256 bool bwdPropUnivar_(LinUnivarPtr luv,
bool *changed);
271 bool bwdPropUnivar_(LinUnivarPtr luv, RelaxationPtr rel,
bool mod_rel,
272 bool *changed, ModVector &p_mods, ModVector &r_mods);
283 double calcUpperUnivar_(
double a,
double b,
double lx,
double ux);
294 void findLinPt_(
double xval,
double yval, LinUnivarPtr luv,
double &xl);
304 bool fwdPropBivar_(LinBivarPtr lbv,
bool *changed);
319 bool fwdPropBivar_(LinBivarPtr lbv, RelaxationPtr rel,
bool mod_rel,
320 bool *changed, ModVector &p_mods, ModVector &r_mods);
330 bool fwdPropUnivar_(LinUnivarPtr luv,
bool *changed);
345 bool fwdPropUnivar_(LinUnivarPtr luv, RelaxationPtr rel,
bool mod_rel,
346 bool *changed, ModVector &p_mods, ModVector &r_mods);
355 LinearFunctionPtr getSecant_(VariablePtr y, VariablePtr x,
366 std::vector<LinearFunctionPtr> getSecant_(VariablePtr y, VariablePtr x1,
367 VariablePtr x2,
bool pos, DoubleVector &rhs);
377 LinearFunctionPtr getTangent_(VariablePtr y, VariablePtr x,
378 double a,
double b,
double pt);
389 LinearFunctionPtr getTangent_(VariablePtr y, VariablePtr x1, VariablePtr x2,
390 bool pos,
UInt i,
double &rhs);
393 bool isAtBnds_(ConstVariablePtr x,
double xval);
407 bool isViolatedAtBounds_(ConstraintPtr c1, ConstraintPtr c2, VariablePtr x1,
408 VariablePtr x2,
double l1,
double u1,
double l2,
409 double u2,
bool pos);
418 void relax_(RelaxationPtr rel,
bool *is_inf);
433 void upBivarCon_(LinBivarPtr lbv, RelaxationPtr rel, ModVector &r_mods);
447 int updatePBounds_(VariablePtr v,
double lb,
double ub,
bool *changed);
468 int updatePBounds_(VariablePtr v,
double lb,
double ub, RelaxationPtr rel,
469 bool mod_rel,
bool *changed, ModVector &p_mods,
486 void upUnivarCon_(ConstraintPtr con, VariablePtr x, VariablePtr y,
double a,
487 double b, RelaxationPtr rel, ModVector &r_mods);
497 bool varBndsFromCons_(
bool *changed);
Define abstract base class for handlers of various kinds.
Base class for describing candidates for branching on a node in branch-and-bound.
Definition: BrCand.h:32
The Constraint class is used to manage a constraint.
Definition: Constraint.h:61
Abstract base class to manage cuts in the relaxation.
Definition: CutManager.h:42
Definition: Environment.h:28
Base class for handling specific types of constraints or objective.
Definition: Handler.h:49
Definition: Modification.h:29
Definition: Relaxation.h:53
Definition: SolutionPool.h:28
Definition: Solution.h:30
Iterator for LinBivar
Definition: UnivarQuadHandler.h:71
void relaxNodeInc(NodePtr node, RelaxationPtr rel, bool *is_inf)
Create an incremental relaxation for a node.
Definition: UnivarQuadHandler.cpp:1861
void relaxInitFull(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)
Create root relaxation if doing full node relaxations.
Definition: UnivarQuadHandler.cpp:1844
SolveStatus presolve(PreModQ *pre_mods, bool *changed, Solution **)
Initial presolve.
Definition: UnivarQuadHandler.cpp:1672
void getBranchingCandidates(RelaxationPtr rel, const DoubleVector &x, ModVector &mods, BrVarCandSet &cands, BrCandVector &gencands, bool &is_inf)
find branching candidates.
Definition: UnivarQuadHandler.cpp:780
bool presolveNode(RelaxationPtr p, NodePtr node, SolutionPoolPtr s_pool, ModVector &p_mods, ModVector &r_mods)
Presolve the problem and its relaxation at a node.
Definition: UnivarQuadHandler.cpp:1692
bool isFeasible(ConstSolutionPtr sol, RelaxationPtr relaxation, bool &should_prune, double &inf_meas)
Check if a solution is feasible.
Definition: UnivarQuadHandler.cpp:1574
~UnivarQuadHandler()
Destroy.
Definition: UnivarQuadHandler.cpp:69
void writeStats(std::ostream &out) const
Write statistics to ostream out.
Definition: UnivarQuadHandler.cpp:2170
void relaxInitInc(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)
Create root relaxation if doing incremental node relaxations.
Definition: UnivarQuadHandler.cpp:1850
Branches getBranches(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, SolutionPoolPtr s_pool)
Return branches for branching.
Definition: UnivarQuadHandler.cpp:729
void relaxNodeFull(NodePtr node, RelaxationPtr rel, bool *is_inf)
Create a relaxation for a node, building from scratch.
Definition: UnivarQuadHandler.cpp:1856
ModificationPtr getBrMod(BrCandPtr, DoubleVector &, RelaxationPtr, BranchDirection)
Get the modifcation that creates a given (up or down) branch.
Definition: UnivarQuadHandler.h:94
std::string getName() const
Return the name of the handler.
Definition: UnivarQuadHandler.cpp:959
void addConstraint(ConstraintPtr newcon)
Add constraint to be handled by this handler.
Definition: UnivarQuadHandler.cpp:82
void separate(ConstSolutionPtr sol, NodePtr node, RelaxationPtr rel, CutManager *cutman, SolutionPoolPtr s_pool, ModVector &p_mods, ModVector &r_mods, bool *sol_found, SeparationStatus *status)
add cuts to separate a given point.
Definition: UnivarQuadHandler.cpp:1879
UnivarQuadHandler(EnvPtr env, ProblemPtr problem)
Default constructor.
Definition: UnivarQuadHandler.cpp:56
Definition: Variable.h:31
Definition: ActiveNodeStore.h:20
LinBivarVec::iterator LinBivarVecIter
Vector of LinBivar
Definition: UnivarQuadHandler.h:65
BranchDirection
Two directions for branching.
Definition: Types.h:201
UnivarQuadHandler * UnivarQuadHandlerPtr
Shared pointer to UnivarQuadHandler.
Definition: QuadTransformer.h:29
std::vector< LinBivarPtr > LinBivarVec
Pointer to LinBivar
Definition: UnivarQuadHandler.h:64
LinUnivarVec::iterator LinUnivarVecIter
Vector of LinUnivar
Definition: UnivarQuadHandler.h:45
unsigned int UInt
Unsigned integer.
Definition: Types.h:30
SeparationStatus
Status from separation routine:
Definition: Types.h:217
std::vector< LinUnivarPtr > LinUnivarVec
Pointer to LinUnivar
Definition: UnivarQuadHandler.h:44
SolveStatus
Different states an algorithm like branch-and-bound can be in.
Definition: Types.h:158
Iterator for LinUnivar
Definition: UnivarQuadHandler.h:51
ConstraintPtr tan3
The linear underestimator at (l1, u2)
Definition: UnivarQuadHandler.h:60
ConstraintPtr tan2
The linear underestimator at (l1, l2)
Definition: UnivarQuadHandler.h:59
ConstraintPtr oeCon1
Sign between x_1 and x_2. If true then + else -.
Definition: UnivarQuadHandler.h:56
ConstraintPtr tan1
The linear constraint that gives the over estimator
Definition: UnivarQuadHandler.h:58
ConstraintPtr tan4
The linear underestimator at (u1, l2)
Definition: UnivarQuadHandler.h:61
VariablePtr x1
The variable y.
Definition: UnivarQuadHandler.h:53
VariablePtr x2
The variable x_1.
Definition: UnivarQuadHandler.h:54
ConstraintPtr oeCon2
The linear constraint that gives the over estimator
Definition: UnivarQuadHandler.h:57
bool pos
The variable x_2.
Definition: UnivarQuadHandler.h:55
A structure to save information about constraints of the form .
Definition: UnivarQuadHandler.h:34
double b
Coefficient of x^2.
Definition: UnivarQuadHandler.h:38
ConstraintPtr tan2
The linear underestimator at the lower bound of x
Definition: UnivarQuadHandler.h:41
ConstraintPtr tan1
The linear constraint that gives the over estimator
Definition: UnivarQuadHandler.h:40
ConstraintPtr oeCon
Coefficient of x.
Definition: UnivarQuadHandler.h:39
VariablePtr x
The variable y.
Definition: UnivarQuadHandler.h:36
double a
The variable x.
Definition: UnivarQuadHandler.h:37