17#ifndef MINOTAURQUADRATICHANDLER_H
18#define MINOTAURQUADRATICHANDLER_H
29typedef LinearFunction* LinearFunctionPtr;
30typedef Engine* EnginePtr;
49typedef LinSqr* LinSqrPtr;
54typedef std::map<VariablePtr, LinSqrPtr, CompareVariablePtr>
LinSqrMap;
55typedef LinSqrMap::iterator LinSqrMapIter;
86 ModVector& mods, BrVarCandSet& cands,
87 BrCandVector& gencands,
bool& is_inf);
98 bool& should_prune,
double& inf_meas);
105 ModVector& p_mods, ModVector& r_mods);
112 void fillmap4auxVars(std::map<std::pair<int, int>,
int>& map4auxVars);
159 struct PresolveStats {
176 struct BoundTighteningStats {
218 BoundTighteningStats bStats_;
249 static const std::string me_;
258 PresolveStats pStats_;
264 ConstraintVector optCuts_;
316 double calcUpperUnivar_(
double a,
double b,
double lx,
double ux);
326 bool calcVarBnd_(
VariablePtr v,
double coef,
double lb,
double ub,
bool* c1);
329 double ub,
bool* c1, ModVector& p_mods, ModVector& r_mods);
342 double ub,
bool* c1,
bool* c2);
345 double coef,
double lb,
double ub,
bool* c1,
bool* c2,
346 ModVector& p_mods, ModVector& r_mods);
358 bool calcVarBnd_(
VariablePtr v,
double a,
double b,
double ly,
double uy,
362 double ly,
double uy,
bool* c1, ModVector& p_mods,
371 void dupRows_(
bool* changed);
381 void findLinPt_(
double xval,
double yval,
double& xl,
double& yl);
389 double getBndByLP_(
bool& is_inf);
402 DoubleVector& fwdLb, DoubleVector& fwdUb,
UInt& count_inf_lb,
437 double ub,
double& r);
450 DoubleVector& fwdLb, DoubleVector& fwdUb,
UInt& count_inf_lb,
467 double& implLb,
double& implUb, DoubleVector& fwdLb,
468 DoubleVector& fwdUb,
UInt& count_inf_lb,
UInt& count_inf_ub,
473 DoubleVector& fwdLb, DoubleVector& fwdUb,
474 UInt& count_inf_lb,
UInt& count_inf_ub, VarVector& qvars);
486 double getSumExcept1_(DoubleVector::iterator b, DoubleVector::iterator e,
487 DoubleVector::iterator curr,
BoundType bt,
double bound,
497 void getTermBnds_(
VariablePtr v,
double coef,
double& lb,
double& ub);
519 void getTermBnds_(
VariablePtr v,
double a,
double b,
double& lb,
double& ub);
528 bool isFeasible_(
const double* x,
double objval,
double& inf_meas);
531 bool isFeasibleToRelaxation_(
RelaxationPtr rel,
const double* x);
534 void linearize_(LinSqrMapIter lx2);
537 bool linearize_(
LinBilSetIter linbil,
bool isx0Binary,
bool isx1Binary);
547 bool propBilBnds_(
LinBil* lx0x1,
bool* changed);
564 bool* changed, ModVector& p_mods, ModVector& r_mods);
574 bool propSqrBnds_(LinSqrMapIter lx2,
bool* changed);
590 bool propSqrBnds_(LinSqrMapIter lx2,
RelaxationPtr rel,
bool mod_rel,
591 bool* changed, ModVector& p_mods, ModVector& r_mods);
612 void resetBoundsinOrig_(DoubleVector& varlb, DoubleVector& varub);
618 void setItmpFromSol_(
const double* x);
629 bool tightenLP_(
RelaxationPtr rel,
double bestSol,
bool* changed,
630 ModVector& p_mods, ModVector& r_mods);
639 bool tightenQuad_(
bool* changed);
641 bool tightenQuad_(
RelaxationPtr rel,
double bestSol,
bool* changed,
642 ModVector& p_mods, ModVector& r_mods);
651 bool tightenSimple_(
bool* changed);
662 DoubleVector& varlb, DoubleVector& varub);
685 int updatePBounds_(
VariablePtr v,
double lb,
double ub,
bool* changed);
722 bool mod_rel,
bool* changed, ModVector& p_mods,
766 bool varBndsFromCons_(
bool* changed);
Define abstract base class for handlers of various kinds.
Declare a class for storing linear under and overestimators of bilinear functions ,...
Define class for generating cuts for quadratic constraints from the simplex tableau.
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
The base class linear function is of the form c'x.
Definition LinearFunction.h:31
Definition Modification.h:29
Iterator for LinSqrMap
Definition QuadHandler.h:63
Branches getBranches(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, SolutionPoolPtr s_pool)
Return branches for branching.
Definition QuadHandler.cpp:437
std::string getName() const
Return the name of the handler.
Definition QuadHandler.cpp:712
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 QuadHandler.cpp:1232
void relaxInitFull(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)
Create root relaxation if doing full node relaxations.
Definition QuadHandler.cpp:1622
bool isFeasible(ConstSolutionPtr sol, RelaxationPtr relaxation, bool &should_prune, double &inf_meas)
Check if a solution is feasible.
Definition QuadHandler.cpp:975
void removeCuts(RelaxationPtr rel, ConstSolutionPtr sol)
Definition QuadHandler.cpp:1642
double addDefaultBounds(VariablePtr x, BoundType lu)
Definition QuadHandler.cpp:184
SolveStatus presolve(PreModQ *pre_mods, bool *changed, Solution **sol)
Initial presolve.
Definition QuadHandler.cpp:1134
void addConstraint(ConstraintPtr newcon)
Add constraint to be handled by this handler.
Definition QuadHandler.cpp:130
void relaxNodeFull(NodePtr node, RelaxationPtr rel, bool *is_inf)
Create a relaxation for a node, building from scratch.
Definition QuadHandler.cpp:1632
ModificationPtr getBrMod(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, BranchDirection dir)
Get the modifcation that creates a given (up or down) branch.
Definition QuadHandler.cpp:631
void relaxInitInc(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)
Create root relaxation if doing incremental node relaxations.
Definition QuadHandler.cpp:1627
void simplePresolve(ProblemPtr p, SolutionPoolPtr spool, ModVector &t_mods, SolveStatus &status)
Definition QuadHandler.cpp:1174
void relaxNodeInc(NodePtr node, RelaxationPtr rel, bool *is_inf)
Create an incremental relaxation for a node.
Definition QuadHandler.cpp:1637
void getBranchingCandidates(RelaxationPtr rel, const DoubleVector &x, ModVector &mods, BrVarCandSet &cands, BrCandVector &gencands, bool &is_inf)
find branching candidates.
Definition QuadHandler.cpp:488
bool postSolveRootNode(RelaxationPtr rel, SolutionPoolPtr s_pool, ConstSolutionPtr sol, ModVector &p_mods, ModVector &r_mods)
At the root node post solve the problem and its relaxation. LP based bound tightening (OBBT) is emplo...
Definition QuadHandler.cpp:1425
void writeStats(std::ostream &out) const
Write statistics to ostream out.
Definition QuadHandler.cpp:3697
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 QuadHandler.cpp:1713
~QuadHandler()
Destroy.
Definition QuadHandler.cpp:105
int fixNodeErr(RelaxationPtr rel, ConstSolutionPtr sol, SolutionPoolPtr s_pool, bool &sol_found)
Definition QuadHandler.cpp:369
Definition QuadraticFunction.h:38
Definition Relaxation.h:53
Definition SimplexQuadCutGen.h:78
Definition SolutionPool.h:28
Definition ActiveNodeStore.h:20
QuadHandler * QuadHandlerPtr
Shared pointer to QuadHandler.
Definition QuadHandler.h:770
BranchDirection
Two directions for branching.
Definition Types.h:201
BoundType
Different types of variable-bounds.
Definition Types.h:131
std::vector< LinSqrPtr > LinSqrVec
Pointer to LinSqr
Definition QuadHandler.h:50
LinBilSet::iterator LinBilSetIter
Iterator of LinBil objects over a set.
Definition LinBil.h:119
unsigned int UInt
Unsigned integer.
Definition Types.h:30
std::map< VariablePtr, LinSqrPtr, CompareVariablePtr > LinSqrMap
Iterator for LinSqr
Definition QuadHandler.h:54
LinSqrVec::iterator LinSqrVecIter
Vector of LinSqr
Definition QuadHandler.h:51
SeparationStatus
Status from separation routine:
Definition Types.h:217
SolveStatus
Different states an algorithm like branch-and-bound can be in.
Definition Types.h:158
std::set< LinBil *, CompareLinBil > LinBilSet
A set of bilinear objects.
Definition LinBil.h:116
A structure to save information about constraints of the form .
Definition QuadHandler.h:36
VariablePtr x
The variable y.
Definition QuadHandler.h:38
LinSqr(VariablePtr y0, VariablePtr x0, ConstraintPtr con)
Quadratic constraint in the transformed problem
Definition QuadHandler.h:41
ConstraintPtr oeCon
The variable x.
Definition QuadHandler.h:39
ConstraintPtr qcon
The linear constraint that gives the over estimator
Definition QuadHandler.h:40