14#ifndef MINOTAURCXQUADRATICHANDLER_H
15#define MINOTAURCXQUADRATICHANDLER_H
26class QuadraticFunction;
27typedef LinearFunction* LinearFunctionPtr;
28typedef QuadraticFunction* QuadraticFunctionPtr;
44typedef std::map<VariablePtr, SecantPtr, CompareVariablePtr>
VarSecantMap;
117 ConstraintPtr getC2() {
return c2_;};
118 ConstraintPtr getC3() {
return c3_;};
139 bool isViolated(
const double *x,
const double &tol)
const;
145 bool isViolated(
const double &x0val,
const double &x1val,
146 const double &y0val,
const double &tol)
const;
203 static const std::string
me_;
233 double & lb,
double & ub,
double & r);
250 double &rhs,
UInt i);
295 bool &is_inf,
double &inf_meas);
302 ModVector &r_mods,
bool *sol_found,
308 const DoubleVector &x, ModVector &mods,
309 BrVarCandSet &cands, BrCandVector &,
Define abstract base class for handlers of various kinds.
Declare important 'types' used in Minotaur.
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: CxQuadHandler.h:174
Branches getBranches(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, SolutionPoolPtr s_pool)
Return branches for branching.
Definition: CxQuadHandler.cpp:775
VariablePtr addMcCormickLower_(VariablePtr x0, VariablePtr x1, RelaxationPtr rel)
Add two McCormick inequalities for .
Definition: CxQuadHandler.cpp:457
void relaxOneSided_(QuadraticFunctionPtr qf, ConstraintPtr cons, RelaxationPtr rel)
Definition: CxQuadHandler.cpp:231
void relaxInitFull(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)
Create root relaxation if doing full node relaxations.
Definition: CxQuadHandler.cpp:117
void relaxObj_(ObjectivePtr obj, RelaxationPtr rel)
Relax the objective function, to make it convex.
Definition: CxQuadHandler.cpp:281
SolveStatus presolve(PreModQ *pre_mods, bool *changed, Solution **sol)
Initial presolve.
Definition: CxQuadHandler.cpp:942
ModificationPtr getBrMod(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, BranchDirection dir)
Get the modifcation that creates a given (up or down) branch.
Definition: CxQuadHandler.cpp:688
VariablePtr addMcCormickUpper_(VariablePtr x0, VariablePtr x1, RelaxationPtr rel)
Add two McCormick inequalities for .
Definition: CxQuadHandler.cpp:397
bool presolveNode(RelaxationPtr rel, NodePtr node, SolutionPoolPtr s_pool, ModVector &p_mods, ModVector &r_mods)
Presolve the problem and its relaxation at a node.
Definition: CxQuadHandler.cpp:836
CxQuadHandler(EnvPtr env, ProblemPtr problem)
Default constructor.
Definition: CxQuadHandler.cpp:54
void separate(ConstSolutionPtr sol, NodePtr node, RelaxationPtr rel, CutManager *cutman, SolutionPoolPtr s_pool, ModVector &p_mods, ModVector &r_mods, bool *sol_found, SeparationStatus *status)
Definition: CxQuadHandler.cpp:827
void relaxInitInc(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)
Create root relaxation if doing incremental node relaxations.
Definition: CxQuadHandler.cpp:124
bool isFeasible(ConstSolutionPtr sol, RelaxationPtr relaxation, bool &is_inf, double &inf_meas)
Definition: CxQuadHandler.cpp:564
static const std::string me_
For printing.
Definition: CxQuadHandler.h:203
VariablePtr addMcCormick_(VariablePtr x0, VariablePtr x1, RelaxationPtr rel)
Add all four McCormick inequalities for .
Definition: CxQuadHandler.cpp:387
void relax_(RelaxationPtr rel, bool *is_inf)
Definition: CxQuadHandler.cpp:73
void getBranchingCandidates(RelaxationPtr rel, const DoubleVector &x, ModVector &mods, BrVarCandSet &cands, BrCandVector &, bool &is_inf)
Return it is constrained to be an integer.
Definition: CxQuadHandler.cpp:597
McCormickSet mcCons_
Definition: CxQuadHandler.h:187
double eTol_
Tolerance.
Definition: CxQuadHandler.h:197
ProblemPtr problem_
Original problem.
Definition: CxQuadHandler.h:206
VarSet brVars_
Definition: CxQuadHandler.h:194
std::string getName() const
Return the name of the handler.
Definition: CxQuadHandler.cpp:1093
void relaxTwoSided_(QuadraticFunctionPtr qf, ConstraintPtr cons, RelaxationPtr rel)
Definition: CxQuadHandler.cpp:143
LoggerPtr logger_
Logger.
Definition: CxQuadHandler.h:200
~CxQuadHandler()
Destroy.
Definition: CxQuadHandler.cpp:62
VarSecantMap cvCons_
Definition: CxQuadHandler.h:181
void relaxNodeInc(NodePtr node, RelaxationPtr rel, bool *is_inf)
Create an incremental relaxation for a node.
Definition: CxQuadHandler.cpp:137
void addSecant_(VariablePtr x, VariablePtr y, RelaxationPtr rel)
Definition: CxQuadHandler.cpp:338
LinearFunctionPtr getMcLf_(VariablePtr x0, double lb0, double ub0, VariablePtr x1, double lb1, double ub1, VariablePtr y, double &rhs, UInt i)
Generate the appropriate McCormick inequality using the bounds.
Definition: CxQuadHandler.cpp:517
LinearFunctionPtr getNewSecantLf_(VariablePtr x, VariablePtr y, double &lb, double &ub, double &r)
Get linear function and right hand side (r) for a secant constraint.
Definition: CxQuadHandler.cpp:364
void relaxNodeFull(NodePtr node, RelaxationPtr rel, bool *is_inf)
Create a relaxation for a node, building from scratch.
Definition: CxQuadHandler.cpp:131
Definition: Environment.h:28
Definition: Function.h:37
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: CxQuadHandler.h:55
VariablePtr getX1()
Get .
Definition: CxQuadHandler.h:127
McCormick(VariablePtr x0, VariablePtr x1, Sense sense)
Default constructor.
Definition: CxQuadHandler.cpp:1100
Sense
LT: x0x1 <= y; GT: x0x1 >= y; EQ: x0x1 = y.
Definition: CxQuadHandler.h:58
Sense getSense()
Get the sense of the bilinear constraint: LT, EQ, GT.
Definition: CxQuadHandler.h:133
void setC3(ConstraintPtr c)
Set the third constrait: .
Definition: CxQuadHandler.h:112
~McCormick()
Destroy.
Definition: CxQuadHandler.cpp:1115
void setSense(Sense sense)
Set the sense of the bilinear constraint: LT, EQ, GT.
Definition: CxQuadHandler.h:136
ConstraintPtr getC0()
Get one of the four constraints.
Definition: CxQuadHandler.h:115
VariablePtr getX0()
Get .
Definition: CxQuadHandler.h:124
VariablePtr getAux()
Get the auxiliary variable.
Definition: CxQuadHandler.h:121
void setC1(ConstraintPtr c)
Set the first constraint: .
Definition: CxQuadHandler.h:106
void setAux(VariablePtr y)
Definition: CxQuadHandler.h:100
void setC0(ConstraintPtr c)
Set the zeroth constraint: .
Definition: CxQuadHandler.h:103
VariablePtr getOtherX(ConstVariablePtr x) const
Get the variable other than x, in the product.
Definition: CxQuadHandler.cpp:1200
void setC2(ConstraintPtr c)
Set the third constrait: .
Definition: CxQuadHandler.h:109
bool isViolated(const double *x, const double &tol) const
Check if a bilinear constraint is violated at the current point x.
Definition: CxQuadHandler.cpp:1144
Definition: Modification.h:29
Definition: Objective.h:39
Definition: QuadraticFunction.h:38
Definition: Relaxation.h:53
Definition: SolutionPool.h:28
Definition: Solution.h:30
Definition: Variable.h:31
Definition: ActiveNodeStore.h:20
VarSecantMap::iterator VarSecantMapIter
Iterator for VarSecantMap.
Definition: CxQuadHandler.h:47
Secant * SecantPtr
Pointer to Secant.
Definition: CxQuadHandler.h:38
BranchDirection
Two directions for branching.
Definition: Types.h:201
const CxQuadHandler * CxQuadConstHandlerPtr
Shared pointer to const CxQuadHandler.
Definition: CxQuadHandler.h:337
McCormickSet::iterator McCormickSetIter
Iterator of McCormick objects over a set.
Definition: CxQuadHandler.h:164
McCormick * McCormickPtr
shared pointer to McCormick object.
Definition: CxQuadHandler.h:149
std::map< VariablePtr, SecantPtr, CompareVariablePtr > VarSecantMap
Map of 'x' and the secant that is used for .
Definition: CxQuadHandler.h:44
CxQuadHandler * CxQuadHandlerPtr
Shared pointer to CxQuadHandler.
Definition: CxQuadHandler.h:334
std::set< McCormickPtr, CompareMcCormick > McCormickSet
A set of McCormick objects.
Definition: CxQuadHandler.h:161
unsigned int UInt
Unsigned integer.
Definition: Types.h:30
SeparationStatus
Status from separation routine:
Definition: Types.h:217
std::vector< SecantPtr >::iterator SecantIterator
Vector-iterator for Secant.
Definition: CxQuadHandler.h:41
SolveStatus
Different states an algorithm like branch-and-bound can be in.
Definition: Types.h:158
Definition: CxQuadHandler.h:156
Save information about constraints of the form .
Definition: CxQuadHandler.h:31
ConstraintPtr cons
The variable x.
Definition: CxQuadHandler.h:34
VariablePtr sqVar
The variable y.
Definition: CxQuadHandler.h:33