13#ifndef MINOTAURABSHANDLER_H
14#define MINOTAURABSHANDLER_H
38 std::vector<ConstraintPtr> linCons;
41 : con(c), iv(i), ov(o), riv(0), rov(0), sense(s), secCon(0)
46typedef std::vector<AbsConsPtr> AbsConsVector;
47typedef AbsConsVector::iterator AbsConsIter;
48typedef AbsConsVector::const_iterator AbsConsConstIter;
69 ModVector &p_mods, ModVector &r_mods,
bool *sol_found,
73 ModVector &mods, BrVarCandSet &cands,
74 BrCandVector &gencands,
bool &is_inf);
84 ModVector &p_mods, ModVector &r_mods);
89 static const std::string me_;
100 AbsConsVector consd_;
106 double getViol_(
const AbsCons &cd,
const DoubleVector &x)
const;
107 bool propAbsBnds_(
AbsConsPtr cdata,
bool *changed);
108 int updatePBnds_(
VariablePtr p,
double newlb,
double newub,
bool *changed);
110 bool mod_rel,
bool *changed, ModVector &p_mods, ModVector &r_mods);
Define abstract base class for handlers of various kinds.
Declare important 'types' used in Minotaur.
Definition AbsHandler.h:50
void writeStats(std::ostream &out) const
Write statistics to ostream out.
Definition AbsHandler.cpp:366
ModificationPtr getBrMod(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, BranchDirection dir)
Get the modifcation that creates a given (up or down) branch.
Definition AbsHandler.cpp:214
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 AbsHandler.cpp:344
Branches getBranches(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, SolutionPoolPtr s_pool)
Return branches for branching.
Definition AbsHandler.cpp:257
void relaxInitFull(RelaxationPtr rel, SolutionPool *sp, bool *is_inf) override
Create root relaxation if doing full node relaxations.
Definition AbsHandler.cpp:349
void relaxInitInc(RelaxationPtr rel, SolutionPool *s_pool, bool *is_inf)
Create root relaxation if doing incremental node relaxations.
Definition AbsHandler.cpp:139
void getBranchingCandidates(RelaxationPtr rel, const DoubleVector &x, ModVector &mods, BrVarCandSet &cands, BrCandVector &gencands, bool &is_inf)
find branching candidates.
Definition AbsHandler.cpp:241
void relaxNodeInc(NodePtr node, RelaxationPtr rel, bool *is_infeasible)
Create an incremental relaxation for a node.
Definition AbsHandler.cpp:147
bool isFeasible(ConstSolutionPtr sol, RelaxationPtr rel, bool &isfeas, double &inf_meas)
Check if a solution is feasible.
Definition AbsHandler.cpp:178
SolveStatus presolve(PreModQ *pre_mods, bool *changed, Solution **sol)
Initial presolve.
Definition AbsHandler.cpp:333
void relaxNodeFull(NodePtr node, RelaxationPtr rel, bool *is_inf) override
Create a relaxation for a node, building from scratch.
Definition AbsHandler.cpp:355
std::string getName() const
Return the name of the handler.
Definition AbsHandler.cpp:361
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 AbsHandler.cpp:201
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
virtual void addConstraint(ConstraintPtr newcon)
Add constraint to be handled by this handler.
Definition Handler.h:62
Definition Modification.h:29
Definition Relaxation.h:53
Definition SolutionPool.h:28
Definition AbsHandler.h:19
BranchDirection
Two directions for branching.
Definition Types.h:201
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
Stores data for a single y = |x| constraint.
Definition AbsHandler.h:29