15#ifndef MINOTAURLOGHANDLER_H
16#define MINOTAURLOGHANDLER_H
27 typedef LinearFunction *LinearFunctionPtr;
28 typedef Objective *ObjectivePtr;
61 bool &should_prune,
double &inf_meas);
66 ModVector &p_mods, ModVector &r_mods,
bool *sol_found,
77 ModVector &mods, BrVarCandSet &cands,
78 BrCandVector &gencands,
bool &is_inf);
93 ModVector &p_mods, ModVector &r_mods);
96 std::string
getName()
const override;
99 void writeStats(std::ostream &out)
const override;
116 ConstraintVector linCons;
132 typedef LogCons *LogConsPtr;
133 typedef std::vector<LogConsPtr> LogConsVec;
134 typedef LogConsVec::iterator LogConsIter;
140 static const std::string me_;
152 struct LogPresolveStats
170 struct BoundTighteningStats
179 BoundTighteningStats bStats_;
180 LogPresolveStats pStats_;
195 ConstraintVector optCuts_;
221 void addCut_(VariablePtr x, VariablePtr y,
double xval,
double yval,
222 RelaxationPtr rel,
bool& ifcuts);
226 double addDefaultLogBounds_(VariablePtr x,
BoundType lu);
232 void addLin_(LogCons &cd, RelaxationPtr rel, DoubleVector &tmpX,
233 DoubleVector &grad, ModVector &mods,
bool init);
240 void addSecant_(LogCons &cd, RelaxationPtr rel, DoubleVector &tmpX,
241 ModVector &mods,
bool init);
244 void dupRows_(
bool *changed);
254 LinearFunctionPtr getLogSec_(VariablePtr x, VariablePtr y,
double lb,
255 double ub,
double &rhs);
258 double getViol_(
const LogCons &cd,
const DoubleVector &x)
const;
262 bool isFeasible_(ConstSolutionPtr sol, RelaxationPtr relaxation,
263 bool &should_prune,
double &inf_meas);
272 void initRelax_(LogCons &cd, RelaxationPtr rel, DoubleVector &tmpX,
279 bool propLogBnds_(LogConsPtr lcd,
bool *changed);
282 bool treatDupRows_(ConstraintPtr c1, ConstraintPtr c2,
double mult,
295 void updateRelax_(LogCons &cd, RelaxationPtr rel, DoubleVector &tmpX,
296 DoubleVector &grad, ModVector &mods);
299 int updatePBnds_(VariablePtr p,
double newlb,
double newub,
302 int updatePBnds_(VariablePtr v,
double newlb,
double newub,
303 RelaxationPtr rel,
bool mod_rel,
bool *changed,
304 ModVector &p_mods, ModVector &r_mods);
307 bool varBndsFromCons_(
bool *changed);
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 Environment.h:28
Base class for handling specific types of constraints or objective.
Definition Handler.h:49
Definition LogHandler.h:31
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 LogHandler.cpp:416
Branches getBranches(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, SolutionPoolPtr s_pool)
Return branches for branching.
Definition LogHandler.cpp:556
void relaxNodeFull(NodePtr, RelaxationPtr, bool *)
Create a relaxation for a node, building from scratch.
Definition LogHandler.h:70
std::string getName() const override
Return the name of the handler.
Definition LogHandler.cpp:1072
void relaxInitFull(RelaxationPtr, SolutionPool *, bool *)
Create root relaxation if doing full node relaxations.
Definition LogHandler.h:54
void relaxInitInc(RelaxationPtr rel, SolutionPool *, bool *is_inf)
Create root relaxation if doing incremental node relaxations.
Definition LogHandler.cpp:275
void addConstraint(ConstraintPtr)
Add constraint to be handled by this handler.
Definition LogHandler.h:50
bool isFeasible(ConstSolutionPtr sol, RelaxationPtr relaxation, bool &should_prune, double &inf_meas)
Check if a solution is feasible.
Definition LogHandler.cpp:357
ModificationPtr getBrMod(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, BranchDirection dir)
Get the modifcation that creates a given (up or down) branch.
Definition LogHandler.cpp:517
void writeStats(std::ostream &out) const override
Write statistics to ostream out.
Definition LogHandler.cpp:1077
SolveStatus presolve(PreModQ *pre_mods, bool *changed, Solution **sol)
Initial presolve.
Definition LogHandler.cpp:1034
void relaxNodeInc(NodePtr node, RelaxationPtr rel, bool *isInfeasible)
Create an incremental relaxation for a node.
Definition LogHandler.cpp:293
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 LogHandler.cpp:1061
void getBranchingCandidates(RelaxationPtr rel, const DoubleVector &x, ModVector &mods, BrVarCandSet &cands, BrCandVector &gencands, bool &is_inf)
find branching candidates.
Definition LogHandler.cpp:466
void addConstraint(ConstraintPtr newcon, ConstVariablePtr ivar, ConstVariablePtr ovar, char sense='E')
Definition LogHandler.cpp:312
Definition Modification.h:29
Definition Relaxation.h:53
Definition SolutionPool.h:28
Definition ActiveNodeStore.h:20
BranchDirection
Two directions for branching.
Definition Types.h:201
BoundType
Different types of variable-bounds.
Definition Types.h:131
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