15#ifndef MINOTAURLOGHANDLER_H
16#define MINOTAURLOGHANDLER_H
27 typedef LinearFunction *LinearFunctionPtr;
28 typedef Objective *ObjectivePtr;
47 ConstraintVector linCons;
63 typedef LogCons *LogConsPtr;
64 typedef std::vector<LogConsPtr> LogConsVec;
65 typedef LogConsVec::iterator LogConsIter;
71 static const std::string me_;
76 struct LogPresolveStats
94 struct BoundTighteningStats
103 BoundTighteningStats bStats_;
104 LogPresolveStats pStats_;
118 ConstraintVector optCuts_;
125 void addLin_(LogCons &cd,
RelaxationPtr rel, DoubleVector &tmpX,
126 DoubleVector &grad, ModVector &mods,
bool init);
134 void addSecant_(LogCons &cd,
RelaxationPtr rel, DoubleVector &tmpX,
135 ModVector &mods,
bool init);
149 void dupRows_(
bool *changed);
152 double getViol_(
const LogCons &cd,
const DoubleVector &x)
const;
160 void initRelax_(LogCons &cd,
RelaxationPtr rel, DoubleVector &tmpX,
165 bool propLogBnds_(LogConsPtr lcd,
bool *changed);
171 bool tightenSimple_(
bool *changed);
183 void updateRelax_(LogCons &cd,
RelaxationPtr rel, DoubleVector &tmpX,
184 DoubleVector &grad, ModVector &mods);
187 int updatePBnds_(
VariablePtr p,
double newlb,
double newub,
189 bool varBndsFromCons_(
bool *changed);
244 bool &should_prune,
double &inf_meas);
249 ModVector &p_mods, ModVector &r_mods,
bool *sol_found,
260 ModVector &mods, BrVarCandSet &cands,
261 BrCandVector &gencands,
bool &is_inf);
276 ModVector &p_mods, ModVector &r_mods);
279 std::string
getName()
const override;
282 void writeStats(std::ostream &out)
const override;
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
Base class for storing branching modifications.
Definition Branch.h:33
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)
Separation (cuts) — not implemented yet.
Definition LogHandler.cpp:369
double aTol_
Absolute feasibility tolerance.
Definition LogHandler.h:194
Branches getBranches(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, SolutionPoolPtr s_pool)
Generate branches.
Definition LogHandler.cpp:456
void relaxNodeFull(NodePtr, RelaxationPtr, bool *)
Full relaxation at a node (unused for LogHandler)
Definition LogHandler.h:253
LoggerPtr log_
Logger.
Definition LogHandler.h:207
DoubleVector tmpX_
Temporary vectors for evaluations.
Definition LogHandler.h:210
ProblemPtr p_
Problem pointer.
Definition LogHandler.h:204
std::string getName() const override
Name of the handler.
Definition LogHandler.cpp:819
void relaxInitFull(RelaxationPtr, SolutionPool *, bool *)
Full relaxation (unused)
Definition LogHandler.h:237
void relaxInitInc(RelaxationPtr rel, SolutionPool *, bool *is_inf)
Create initial incremental relaxation.
Definition LogHandler.cpp:294
double rTol_
Relative feasibility tolerance.
Definition LogHandler.h:197
void addConstraint(ConstraintPtr)
Add constraint to be handled by this handler.
Definition LogHandler.h:229
bool isFeasible(ConstSolutionPtr sol, RelaxationPtr relaxation, bool &should_prune, double &inf_meas)
Check feasibility.
Definition LogHandler.cpp:346
ModificationPtr getBrMod(BrCandPtr cand, DoubleVector &x, RelaxationPtr rel, BranchDirection dir)
Branch modification for a variable.
Definition LogHandler.cpp:419
double eTol_
Tolerances for log constraints.
Definition LogHandler.h:200
void writeStats(std::ostream &out) const override
Stats.
Definition LogHandler.cpp:824
SolveStatus presolve(PreModQ *pre_mods, bool *changed, Solution **sol)
Top-level presolve.
Definition LogHandler.cpp:771
void relaxNodeInc(NodePtr node, RelaxationPtr rel, bool *isInfeasible)
Incremental relaxation at a node.
Definition LogHandler.cpp:312
bool presolveNode(RelaxationPtr p, NodePtr node, SolutionPoolPtr s_pool, ModVector &p_mods, ModVector &r_mods)
Node-level presolve.
Definition LogHandler.cpp:806
void getBranchingCandidates(RelaxationPtr rel, const DoubleVector &x, ModVector &mods, BrVarCandSet &cands, BrCandVector &gencands, bool &is_inf)
Branching candidates.
Definition LogHandler.cpp:382
~LogHandler()
Destructor.
Definition LogHandler.cpp:62
void addConstraint(ConstraintPtr newcon, ConstVariablePtr ivar, ConstVariablePtr ovar, char sense='E')
Definition LogHandler.cpp:332
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
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