17#ifndef MINOTAURQuadraticHANDLER_H
18#define MINOTAURQuadraticHANDLER_H
28typedef LPEngine *LPEnginePtr;
29typedef LinearFunction *LinearFunctionPtr;
30typedef Engine *EnginePtr;
47typedef std::map<VariablePtr, LinkPowPtr, CompareVariablePtr>
LinkPowMap;
48typedef LinkPowMap::iterator LinkPowMapIter;
74 ModVector &mods, BrVarCandSet &cands,
75 BrCandVector &gencands,
bool &is_inf);
86 bool &should_prune,
double &inf_meas);
93 ModVector &p_mods, ModVector &r_mods);
137 struct PresolveStats {
153 struct BoundTighteningStats {
195 BoundTighteningStats bStats_;
223 static const std::string me_;
232 PresolveStats pStats_;
279 double calcUpperUnivar_(
double a,
double b,
double lx,
double ux);
289 bool calcVarBnd_(
VariablePtr v,
double coef,
double lb,
double ub,
bool *c1);
292 double ub,
bool *c1, ModVector &p_mods, ModVector &r_mods);
305 double ub,
bool *c1,
bool *c2);
308 double coef,
double lb,
double ub,
bool *c1,
bool *c2,
309 ModVector &p_mods, ModVector &r_mods);
321 bool calcVarBnd_(
VariablePtr v,
double a,
double b,
double ly,
double uy,
325 double ly,
double uy,
bool *c1, ModVector &p_mods,
338 void findLinPt_(
double xval,
double yval,
double &xl,
double &yl,
double k);
346 double getBndByLP_(
bool &is_inf);
359 DoubleVector &fwdLb, DoubleVector &fwdUb,
UInt &count_inf_lb,
377 double lb,
double ub,
double &rhs,
int type);
390 DoubleVector &fwdLb, DoubleVector &fwdUb,
UInt &count_inf_lb,
407 double &implLb,
double &implUb, DoubleVector &fwdLb,
408 DoubleVector &fwdUb,
UInt &count_inf_lb,
UInt &count_inf_ub,
413 DoubleVector &fwdLb, DoubleVector &fwdUb,
414 UInt &count_inf_lb,
UInt &count_inf_ub, VarVector &qvars);
426 double getSumExcept1_(DoubleVector::iterator b, DoubleVector::iterator e,
427 DoubleVector::iterator curr,
BoundType bt,
double bound,
437 void getTermBnds_(
VariablePtr v,
double coef,
double &lb,
double &ub);
459 void getTermBnds_(
VariablePtr v,
double a,
double b,
double &lb,
double &ub);
465 bool isFeasibleToRelaxation_(
RelaxationPtr rel,
const double *x);
475 bool propKPowBnds_(LinkPowMapIter lxk,
bool *changed);
491 bool propKPowBnds_(LinkPowMapIter lxk,
RelaxationPtr rel,
bool mod_rel,
492 bool *changed, ModVector &p_mods, ModVector &r_mods);
510 void resetBoundsinOrig_(DoubleVector &varlb, DoubleVector &varub);
516 void setItmpFromSol_(
const double *x);
527 bool tightenLP_(
RelaxationPtr rel,
double bestSol,
bool *changed,
528 ModVector &p_mods, ModVector &r_mods);
537 bool tightenkPow_(
bool *changed);
539 bool tightenkPow_(
RelaxationPtr rel,
double bestSol,
bool *changed,
540 ModVector &p_mods, ModVector &r_mods);
549 bool tightenSimple_(
bool *changed);
560 DoubleVector &varlb, DoubleVector &varub);
574 int updatePBounds_(
VariablePtr v,
double lb,
double ub,
bool *changed);
596 bool mod_rel,
bool *changed, ModVector &p_mods,
605 void updateUb_(
SolutionPoolPtr s_pool,
double nlpval,
bool &sol_found);
630 bool varBndsFromCons_(
bool *changed);
Declare class CGraph for storing computational graph of a nonlinear function.
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: LPEngine.h:29
The base class linear function is of the form c'x.
Definition: LinearFunction.h:31
Definition: Modification.h:29
Definition: QuadraticFunction.h:38
Definition: Relaxation.h:53
Definition: SolutionPool.h:28
Definition: Solution.h:30
Definition: Variable.h:31
Iterator for LinkPowMap
Definition: kPowHandler.h:55
void relaxNodeInc(NodePtr node, RelaxationPtr rel, bool *is_inf)
Create an incremental relaxation for a node.
Definition: kPowHandler.cpp:1132
kPowHandler(EnvPtr env, ProblemPtr problem, ProblemPtr orig_p)
Default constructor.
Definition: kPowHandler.cpp:62
void relaxInitInc(RelaxationPtr rel, SolutionPool *, bool *is_inf)
Create root relaxation if doing incremental node relaxations.
Definition: kPowHandler.cpp:1122
bool isFeasible(ConstSolutionPtr sol, RelaxationPtr relaxation, bool &should_prune, double &inf_meas)
Check if a solution is feasible.
Definition: kPowHandler.cpp:652
void addConstraint(ConstraintPtr newcon)
Add constraint to be handled by this handler.
Definition: kPowHandler.cpp:98
void writeStats(std::ostream &out) const
Write statistics to ostream out.
Definition: kPowHandler.cpp:2816
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: kPowHandler.cpp:1180
int fixNodeErr(RelaxationPtr rel, ConstSolutionPtr sol, SolutionPoolPtr s_pool, bool &sol_found)
Definition: kPowHandler.cpp:292
void relaxNodeFull(NodePtr node, RelaxationPtr rel, bool *is_inf)
Create a relaxation for a node, building from scratch.
Definition: kPowHandler.cpp:1127
void getBranchingCandidates(RelaxationPtr rel, const DoubleVector &x, ModVector &mods, BrVarCandSet &cands, BrCandVector &gencands, bool &is_inf)
find branching candidates.
Definition: kPowHandler.cpp:409
void relaxInitFull(RelaxationPtr rel, SolutionPool *, bool *is_inf)
Create root relaxation if doing full node relaxations.
Definition: kPowHandler.cpp:1116
~kPowHandler()
Destroy.
Definition: kPowHandler.cpp:82
ModificationPtr getBrMod(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, BranchDirection dir)
Get the modifcation that creates a given (up or down) branch.
Definition: kPowHandler.cpp:450
Branches getBranches(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, SolutionPoolPtr s_pool)
Return branches for branching.
Definition: kPowHandler.cpp:358
std::string getName() const
Return the name of the handler.
Definition: kPowHandler.cpp:486
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: kPowHandler.cpp:1012
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: kPowHandler.cpp:861
SolveStatus presolve(PreModQ *pre_mods, bool *changed, Solution **sol)
Initial presolve.
Definition: kPowHandler.cpp:766
Definition: ActiveNodeStore.h:20
BranchDirection
Two directions for branching.
Definition: Types.h:201
LinkPowVec::iterator LinkPowVecIter
Vector of LinkPow
Definition: kPowHandler.h:44
BoundType
Different types of variable-bounds.
Definition: Types.h:131
kPowHandler * kPowHandlerPtr
Shared pointer to kPowHandler.
Definition: kPowHandler.h:634
std::map< VariablePtr, LinkPowPtr, CompareVariablePtr > LinkPowMap
Iterator for LinkPow
Definition: kPowHandler.h:47
std::vector< LinkPowPtr > LinkPowVec
Pointer to LinkPow
Definition: kPowHandler.h:43
unsigned int UInt
Unsigned integer.
Definition: Types.h:30
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
A structure to save information about constraints of the form .
Definition: kPowHandler.h:36
double k
The variable x.
Definition: kPowHandler.h:39
ConstraintPtr oeCon
The power k
Definition: kPowHandler.h:40
VariablePtr x
The variable y.
Definition: kPowHandler.h:38