15#ifndef MINOTAURHANDLER_H
16#define MINOTAURHANDLER_H
31typedef Relaxation* RelaxationPtr;
32typedef PreMod* PreModPtr;
33typedef const Solution* ConstSolutionPtr;
34typedef SolutionPool* SolutionPoolPtr;
35typedef std::deque<PreModPtr> PreModQ;
36typedef PreModQ::iterator PreModQIter;
37typedef PreModQ::const_iterator PreModQConstIter;
64 cons_.push_back(newcon);
70 virtual ConstraintVector::const_iterator
consBegin()
const
78 virtual ConstraintVector::const_iterator
consEnd()
const
124 ModVector& mods, BrVarCandSet& cands,
125 BrCandVector& gencands,
bool& is_inf) = 0;
155 ModVector& p_mods, ModVector& r_mods);
176 bool& should_prune,
double& inf_meas) = 0;
186 return !cons_.empty();
231 ModVector& r_mods) = 0;
338 ModVector& p_mods, ModVector& r_mods,
bool* sol_found,
386 ConstraintVector cons_;
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
Base class for handling specific types of constraints or objective.
Definition: Handler.h:49
virtual bool isFeasible(ConstSolutionPtr sol, RelaxationPtr rel, bool &should_prune, double &inf_meas)=0
Check if a solution is feasible.
virtual bool isNeeded()
Return true if this handler is needed for the problem.
Definition: Handler.h:184
virtual bool postSolveRootNode(RelaxationPtr, SolutionPoolPtr, ConstSolutionPtr, ModVector &, ModVector &)
At the root node post solve the problem and its relaxation. LP based bound tightening (OBBT) is emplo...
Definition: Handler.h:249
virtual ConstraintVector::const_iterator consEnd() const
Definition: Handler.h:78
virtual SolveStatus presolve(PreModQ *pre_mods, bool *changed, Solution **sol)=0
Initial presolve.
bool getStrongerMods(RelaxationPtr rel, NodePtr node, SolutionPoolPtr s_pool, ModVector &p_mods, ModVector &r_mods)
do node presolve to get mods for stronger branching All params are presolveNode params.
Definition: Handler.cpp:27
virtual void removeCuts(RelaxationPtr, ConstSolutionPtr)
Definition: Handler.h:319
virtual void setModFlags(bool mod_prob, bool mod_rel)
Tell the handler whether the problem will be modified or the relaxation will be modified or both....
Definition: Handler.h:351
void undoStrongerMods(ProblemPtr p, RelaxationPtr rel, ModVector &p_mods, ModVector &r_mods)
Undo Modifications made during stronger branching.
Definition: Handler.cpp:44
virtual void simplePresolve(ProblemPtr, SolutionPoolPtr, ModVector &, SolveStatus &status)
Definition: Handler.h:365
virtual Branches getBranches(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, SolutionPoolPtr s_pool)=0
Return branches for branching.
virtual int fixNodeErr(RelaxationPtr, ConstSolutionPtr, SolutionPoolPtr, bool &)
Definition: Handler.cpp:21
virtual bool presolveNode(RelaxationPtr rel, NodePtr node, SolutionPoolPtr s_pool, ModVector &p_mods, ModVector &r_mods)=0
Presolve the problem and its relaxation at a node.
virtual ConstraintVector::const_iterator consBegin() const
Definition: Handler.h:70
virtual void relaxNodeInc(NodePtr node, RelaxationPtr rel, bool *is_inf)=0
Create an incremental relaxation for a node.
virtual ModificationPtr getBrMod(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, BranchDirection dir)=0
Get the modifcation that creates a given (up or down) branch.
Handler()
Default constructor.
Definition: Handler.h:52
virtual void getBranchingCandidates(RelaxationPtr rel, const DoubleVector &x, ModVector &mods, BrVarCandSet &cands, BrCandVector &gencands, bool &is_inf)=0
find branching candidates.
bool modProb_
If true, modify the original (or transformed) problem.
Definition: Handler.h:389
virtual void relaxNodeFull(NodePtr node, RelaxationPtr rel, bool *is_inf)=0
Create a relaxation for a node, building from scratch.
virtual void separate(ConstSolutionPtr sol, NodePtr node, RelaxationPtr rel, CutManager *cutman, SolutionPoolPtr s_pool, ModVector &p_mods, ModVector &r_mods, bool *sol_found, SeparationStatus *status)=0
add cuts to separate a given point.
virtual void addConstraint(ConstraintPtr newcon)
Add constraint to be handled by this handler.
Definition: Handler.h:62
virtual void relaxInitFull(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)=0
Create root relaxation if doing full node relaxations.
virtual ~Handler()
Destroy.
Definition: Handler.h:55
virtual void writeStats(std::ostream &) const
Write statistics to ostream out.
Definition: Handler.h:383
virtual std::string getName() const =0
Return the name of the handler.
virtual void relaxInitInc(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)=0
Create root relaxation if doing incremental node relaxations.
bool modRel_
If true, modify the relaxation of original (or transformed) problem.
Definition: Handler.h:392
Definition: Modification.h:29
Definition: Relaxation.h:53
Definition: SolutionPool.h:28
Definition: Solution.h:30
Definition: ActiveNodeStore.h:20
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