Minotaur 0.4.1
Docs for developers
QGHandler.MotivationStats.h
1//
2// Minotaur -- It's only 1/2 bull
3//
4// (C)opyright 2009 - 2025 The Minotaur Team.
5//
6
15#ifndef MINOTAURQGHANDLER_H
16#define MINOTAURQGHANDLER_H
17
18#include <stack>
19
20#include "Handler.h"
21#include "Engine.h"
22#include "Problem.h"
23#include "Function.h"
24#include "Solution.h"
25
26namespace Minotaur {
27
28struct QGStats {
29 size_t nlpS;
30 size_t nlpF;
31 size_t nlpI;
32 size_t nlpIL;
33 size_t cuts;
34 size_t inactiveCuts;
35 size_t cutsAtRoot; // Num of cuts added at root
36};
37
39 double zero;
40 double first;
41 double second;
42 double third;
43 double fourth;
44 double fifth;
45 double all;
46};
47
56class QGHandler : public Handler {
57
58private:
60 EnvPtr env_;
61
62 EngineStatus sepNLPStatus_;
63 EngineStatus rootNLPStatus_;
64 UInt inactiveCutsAtRoot_;
65 double rootObjVio_;
66 double rootMaxVio_;
67 double rootMinVio_;
68 double rootAvgVio_;
69 int lastNodeId_;
70 double intNodes_;
71 double fracNodes_;
72 vioInterval *vioInt_;
73 double * solNLP_; // root nlp sol
74 double nlpObjVal_; // root nlp obj value
75 double lpDist_; // distance of root lp sol from continuous feasiblre region
76
78 double intTol_;
79
81 LoggerPtr logger_;
82
84 static const std::string me_;
85
87 ProblemPtr minlp_;
88
90 std::vector<ConstraintPtr> nlCons_;
91
93 EnginePtr nlpe_;
94
96 std::stack<Modification *> nlpMods_;
97
99 EngineStatus nlpStatus_;
100
101
107 VariablePtr objVar_;
108
110 bool oNl_;
111
113 RelaxationPtr rel_;
114
116 double relobj_;
117
119 double solAbsTol_;
120
122 double solRelTol_;
123
125 double objATol_;
126
128 double objRTol_;
129
131 QGStats *stats_;
132
134 //ConstSolutionPtr rootNLPSol_;
135
136public:
146
149
151 Branches getBranches(BrCandPtr, DoubleVector &, RelaxationPtr,
153 {return Branches();};
154
157 const DoubleVector &, ModVector &,
158 BrVarCandSet &, BrCandVector &, bool &) {};
159
163 {return ModificationPtr();};
164
165 double * getRootNlpSol() {return solNLP_;}
166 double getRootNlpObjVal() {return nlpObjVal_;}
167
168 // Base class method.
169 std::string getName() const;
170
171 // Base class method. Check if x is feasible. x has to satisfy integrality
172 // and also nonlinear constraints.
174 bool & should_prune, double &inf_meas);
175
177 SolveStatus presolve(PreModQ *, bool *) {return Finished;};
178
181 ModVector &)
182 {return false;};
183
185 void postsolveGetX(const double *, UInt, DoubleVector *) {};
186
188 void relaxInitFull(RelaxationPtr rel, bool *is_inf);
189
191 void relaxInitInc(RelaxationPtr rel, bool *is_inf);
192
194 void relaxNodeFull(NodePtr node, RelaxationPtr rel, bool *is_inf);
195
197 void relaxNodeInc(NodePtr node, RelaxationPtr rel, bool *is_inf);
198
199
202 CutManager *cutman, SolutionPoolPtr s_pool, ModVector &p_mods,
203 ModVector &r_mods, bool *sol_found, SeparationStatus *status);
204
206 void writeStats(std::ostream &out) const;
207
209 //ConstSolutionPtr getRootNLPSol_() {return rootNLPSol_;}
210
211private:
216 void addInitLinearX_(const double *x);
217
222 void consVio_(ConstSolutionPtr sol);
223
224 void cutIntSol_(ConstSolutionPtr sol, CutManager *cutMan,
225 SolutionPoolPtr s_pool, bool *sol_found,
226 SeparationStatus *status);
227
232 void fixInts_(const double *x);
233
239 void initLinear_(bool *isInf);
240
241 bool isLinPart_(ConstraintPtr con);
242
247 void linearAt_(FunctionPtr f, double fval, const double *x,
248 double *c, LinearFunctionPtr *lf, int *error);
249
254 void linearizeObj_();
255
260 void cutToCons_(const double *nlpx, const double *lpx, CutManager *,
261 SeparationStatus *status);
262
264 void addCut_(const double *nlpx, const double *lpx, ConstraintPtr con,
265 CutManager *cutman, SeparationStatus *status);
266
267
268 void cutsAtLpSol_(const double *lpx, CutManager *cutman,
269 SeparationStatus *status);
270
271 //void objCutAtLpSol_(const double *lpx, CutManager *cutman,
272 //SeparationStatus *status);
273
274
279 void cutToObj_(const double *nlpx, const double *lpx, CutManager *,
280 SeparationStatus *status);
281
286 void relax_(bool *is_inf);
287
288 void rootLPVio_(ConstSolutionPtr sol);
289
291 void solveNLP_();
292
293 void shortestDist_(ConstSolutionPtr sol);
294
296 void unfixInts_();
297
302 void updateUb_(SolutionPoolPtr s_pool, double nlpval, bool *sol_found);
303
304 };
305
306 typedef QGHandler* QGHandlerPtr;
307}
308#endif
309
Define the base class Engine.
Get information about a Function.
Define abstract base class for handlers of various kinds.
Declare the base class Modification.
Implement base class Solution.
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: Engine.h:34
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: Logger.h:37
Definition: Modification.h:29
Definition: Node.h:54
Definition: Problem.h:74
Handler for convex constraints, based on quesada-grossmann algorithm.
Definition: QGHandler.h:45
void getBranchingCandidates(RelaxationPtr, const DoubleVector &, ModVector &, BrVarCandSet &, BrCandVector &, bool &)
Does nothing.
Definition: QGHandler.MotivationStats.h:156
bool presolveNode(RelaxationPtr, NodePtr, SolutionPoolPtr, ModVector &, ModVector &)
Does nothing.
Definition: QGHandler.MotivationStats.h:180
void relaxInitInc(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)
Base class method. calls relax_().
Definition: QGHandler.cpp:591
void writeStats(std::ostream &out) const
Show statistics.
void relaxNodeInc(NodePtr node, RelaxationPtr rel, bool *is_inf)
Base class method. Does nothing.
bool isFeasible(ConstSolutionPtr sol, RelaxationPtr relaxation, bool &should_prune, double &inf_meas)
Check if a solution is feasible.
std::string getName() const
Return the name of the handler.
ModificationPtr getBrMod(BrCandPtr, DoubleVector &, RelaxationPtr, BranchDirection)
Does nothing.
Definition: QGHandler.MotivationStats.h:161
void separate(ConstSolutionPtr sol, NodePtr node, RelaxationPtr rel, CutManager *cutman, SolutionPoolPtr s_pool, ModVector &p_mods, ModVector &r_mods, bool *sol_found, SeparationStatus *status)
Base class method. Find cuts.
Branches getBranches(BrCandPtr, DoubleVector &, RelaxationPtr, SolutionPoolPtr)
Does nothing.
Definition: QGHandler.MotivationStats.h:151
SolveStatus presolve(PreModQ *, bool *)
Does nothing.
Definition: QGHandler.MotivationStats.h:177
QGHandler(EnvPtr env, ProblemPtr minlp, EnginePtr nlpe)
MS: delete after use.
void postsolveGetX(const double *, UInt, DoubleVector *)
Does nothing.
Definition: QGHandler.MotivationStats.h:185
void relaxInitFull(RelaxationPtr rel, SolutionPool *sp, bool *is_inf)
Base class method. calls relax_().
Definition: QGHandler.cpp:586
void relaxNodeFull(NodePtr node, RelaxationPtr rel, bool *is_inf)
Base class method. Does nothing.
Definition: Relaxation.h:53
Definition: SolutionPool.h:28
Definition: Solution.h:30
Definition: Variable.h:31
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
EngineStatus
Different status that an external engine may report.
Definition: Types.h:176
SolveStatus
Different states an algorithm like branch-and-bound can be in.
Definition: Types.h:158
Definition: QGAdvHandler.h:28
size_t nlpI
Number of nlps feasible.
Definition: QGAdvHandler.h:31
size_t cuts
Number of nlps hits engine iterations limit.
Definition: QGAdvHandler.h:33
size_t cutsAtRoot
Number of inactive cuts added to the LP, other than root.
Definition: QGHandler.MotivationStats.h:35
size_t nlpIL
Number of nlps infeasible.
Definition: QGAdvHandler.h:32
size_t inactiveCuts
Number of cuts added to the LP.
Definition: QGHandler.MotivationStats.h:34
size_t nlpF
Number of nlps solved.
Definition: QGAdvHandler.h:30
Definition: QGHandler.MotivationStats.h:38
double second
(0,20)
Definition: QGHandler.MotivationStats.h:41
double fifth
[60,80)
Definition: QGHandler.MotivationStats.h:44
double third
[20,40)
Definition: QGHandler.MotivationStats.h:42
double first
[0]
Definition: QGHandler.MotivationStats.h:40
double all
[80,100)
Definition: QGHandler.MotivationStats.h:45
double fourth
[40,60)
Definition: QGHandler.MotivationStats.h:43

Minotaur source code documented by Doxygen 1.9.4 on Thu Apr 24 2025