Minotaur 0.4.1
Docs for developers
NlPresHandler.h
Go to the documentation of this file.
1//
2// Minotaur -- It's only 1/2 bull
3//
4// (C)opyright 2008 - 2025 The Minotaur Team.
5//
6
13#ifndef MINOTAURNLPRESHANDLER_H
14#define MINOTAURNLPRESHANDLER_H
15
16#include "Handler.h"
17#include "VarBoundMod.h"
18#include "QuadraticFunction.h"
19
20namespace Minotaur {
21
22class CGraph;
23class CNode;
24class PreAuxVars;
25typedef CGraph* CGraphPtr;
26typedef PreAuxVars* PreAuxVarsPtr;
27
28
31{
32 int iters;
33 double time;
34 double timeN;
35 int varDel;
36 int conDel;
37 int conRel;
38 int infBnds;
39 int pRefs;
40 int vBnd;
41 int cBnd;
42 int cImp;
43 int nMods;
44 int qCone;
46};
47
48
50struct NlPresOpts {
51 bool doPresolve;
52 bool showStats;
54 bool coeffImp;
55};
56
57
61class NlPresHandler : public Handler {
62public:
63
66
69
72
73 // Does nothing.
75
76 // Does nothing.
78
79 // Does nothing.
80 void relaxNodeFull(NodePtr , RelaxationPtr , bool *) {};
81
82 // Does nothing.
83 void relaxNodeInc(NodePtr , RelaxationPtr , bool *) {};
84
89 bool isFeasible(ConstSolutionPtr, RelaxationPtr, bool &, double &)
90 {return true;}
91
96 SolutionPoolPtr , ModVector &, ModVector &, bool *,
97 SeparationStatus *) {};
98
100 void getBranchingCandidates(RelaxationPtr, const DoubleVector &,
101 ModVector &, BrVarCandSet &, BrCandVector &,
102 bool &) {};
103
107 {return ModificationPtr();}; // NULL
108
110 Branches getBranches(BrCandPtr, DoubleVector &, RelaxationPtr,
112 {return Branches();}; // NULL
113
114 // presolve.
115 SolveStatus presolve(PreModQ *pre_mods, bool *changed, Solution **sol);
116
117 // Implement Handler::presolveNode().
119 ModVector &p_mods, ModVector &rmods);
120
121 // Write name
122 std::string getName() const;
123
125 ModVector &t_mods, SolveStatus &status);
130 void writePreStats(std::ostream &out) const;
131
132 // base class method.
133 void writeStats(std::ostream &out) const;
134
135
136
137
138
139
140
144 void x_bound_with_c(double a,double b,double c, double *l,
145 double *u, double *l2);
146
147
152 //void x_bound_range_with_c(double a,double blb,double bub, double c, double *l,
153 //double *u, int infeasibility);
154
155
160 void linear_var_set(VariableSet lfvars, FunctionPtr f,VariableSet *linear_terms);
161
166 void lin_var_bound(VarBoundModVector lfmod, LinearFunctionPtr lf, QuadraticFunctionPtr qf,
167 VariableSet qfvars, VariableSet linear_terms, double cl, double cu, int &change);
168
169
170
177 void get_other_linear_var_bounds(VariablePtr v, double *lflb, double *lfub,
178 VariableSet linear_tSerms, LinearFunctionPtr lf);
179
180
181
186 void quad_var_bound(VarBoundModVector qfmod, LinearFunctionPtr lf, QuadraticFunctionPtr qf,
187 VariableSet qfvars, VariableSet linear_terms, double cl, double cu,
188 int &change);
189
190
191
192
197 void get_other_quad_var_bounds(VariablePtr v, double *qflb, double *qfub, VariableSet qfvars,
199
204 void bilinear_bounds(VariablePtr v, double *qflb1, double *qfub1, VariableSet qfvars,
206
207
208
212 void quad_bound(VariablePtr v, double a,double b, double *l,
213 double *u);
214
215
219 void quad_bound_range(VariablePtr v, double a,double blb, double bub, double *l,
220 double *u);
221
222
223
224
225
226private:
228 bool doPersp_;
229
231 bool doQuadCone_;
232
234 EnvPtr env_;
235
237 double eTol_;
238
240 LoggerPtr logger_;
241
243 ProblemPtr p_;
244
245 NlPresStats stats_;
246
248 double zTol_;
249
251 static const std::string me_;
252
253 void bin2Lin_(ProblemPtr p, PreModQ *mods, bool *changed);
254 void bin2LinF_(ProblemPtr p, LinearFunctionPtr lf,
255 UInt nz, const UInt *irow, const UInt *jcol,
256 const double *values, PreAuxVarsPtr mods);
257
258 bool canBin2Lin_(ProblemPtr p, UInt nz, const UInt *irow,
259 const UInt *jcol, const double *values);
260 void chkRed_(ProblemPtr p, bool apply_to_prob, bool *changed,
261 ModQ *mods, SolveStatus &status);
262 void coeffImpr_(bool *changed);
263 void computeImpBounds_(ConstraintPtr c, VariablePtr z,
264 double zval, double *lb, double *ub);
265
266 void copyBndsFromRel_(RelaxationPtr rel, ModVector &p_mods);
267
273 void fixedNl_(ProblemPtr p, bool purge_cons, bool *changed,
274 ModQ *, SolveStatus &status);
279 void fixObjBins_(ProblemPtr p, double ub, bool *changed, ModQ *mods,
280 SolveStatus &status);
281
282 void perspMod_(ConstraintPtr c, VariablePtr z);
283 void perspRef_(ProblemPtr p, PreModQ *mods, bool *changed);
284 void quadConeRef_(ProblemPtr p, PreModQ *mods, bool *changed);
285 void varBndsFromCons_(ProblemPtr p, bool apply_to_prob, bool *changed,
286 ModQ* mods, SolveStatus &status);
287};
288typedef NlPresHandler* NlPresHandlerPtr;
289}
290#endif
291
Define abstract base class for handlers of various kinds.
Construct and manage quadratic functions.
Declare the class VarBoundMod. It is used to save modifications in a bound of a variable....
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
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: NlPresHandler.h:61
void relaxNodeInc(NodePtr, RelaxationPtr, bool *)
Create an incremental relaxation for a node.
Definition: NlPresHandler.h:83
~NlPresHandler()
Destroy.
Definition: NlPresHandler.cpp:91
void get_other_quad_var_bounds(VariablePtr v, double *qflb, double *qfub, VariableSet qfvars, QuadraticFunctionPtr qf, LinearFunctionPtr lf)
Definition: NlPresHandler.cpp:1404
void getBranchingCandidates(RelaxationPtr, const DoubleVector &, ModVector &, BrVarCandSet &, BrCandVector &, bool &)
Does nothing.
Definition: NlPresHandler.h:100
void linear_var_set(VariableSet lfvars, FunctionPtr f, VariableSet *linear_terms)
Definition: NlPresHandler.cpp:1363
ModificationPtr getBrMod(BrCandPtr, DoubleVector &, RelaxationPtr, BranchDirection)
Does nothing.
Definition: NlPresHandler.h:105
SolveStatus presolve(PreModQ *pre_mods, bool *changed, Solution **sol)
Initial presolve.
Definition: NlPresHandler.cpp:982
void writeStats(std::ostream &out) const
Write statistics to ostream out.
Definition: NlPresHandler.cpp:1798
bool isFeasible(ConstSolutionPtr, RelaxationPtr, bool &, double &)
Definition: NlPresHandler.h:89
bool presolveNode(RelaxationPtr p, NodePtr node, SolutionPoolPtr s_pool, ModVector &p_mods, ModVector &rmods)
Presolve the problem and its relaxation at a node.
Definition: NlPresHandler.cpp:1029
void relaxInitInc(RelaxationPtr, SolutionPool *, bool *)
Create root relaxation if doing incremental node relaxations.
Definition: NlPresHandler.h:77
void get_other_linear_var_bounds(VariablePtr v, double *lflb, double *lfub, VariableSet linear_tSerms, LinearFunctionPtr lf)
Definition: NlPresHandler.cpp:1377
Branches getBranches(BrCandPtr, DoubleVector &, RelaxationPtr, SolutionPoolPtr)
Does nothing.
Definition: NlPresHandler.h:110
void bilinear_bounds(VariablePtr v, double *qflb1, double *qfub1, VariableSet qfvars, QuadraticFunctionPtr qf)
Definition: NlPresHandler.cpp:1432
void separate(ConstSolutionPtr, NodePtr, RelaxationPtr, CutManager *, SolutionPoolPtr, ModVector &, ModVector &, bool *, SeparationStatus *)
Definition: NlPresHandler.h:95
std::string getName() const
Return the name of the handler.
Definition: NlPresHandler.cpp:852
NlPresHandler()
Default constructor.
Definition: NlPresHandler.cpp:46
void quad_bound_range(VariablePtr v, double a, double blb, double bub, double *l, double *u)
Definition: NlPresHandler.cpp:1263
void x_bound_with_c(double a, double b, double c, double *l, double *u, double *l2)
Definition: NlPresHandler.cpp:1277
void simplePresolve(ProblemPtr p, SolutionPoolPtr s_pool, ModVector &t_mods, SolveStatus &status)
Definition: NlPresHandler.cpp:1041
void quad_bound(VariablePtr v, double a, double b, double *l, double *u)
Definition: NlPresHandler.cpp:1225
void lin_var_bound(VarBoundModVector lfmod, LinearFunctionPtr lf, QuadraticFunctionPtr qf, VariableSet qfvars, VariableSet linear_terms, double cl, double cu, int &change)
Definition: NlPresHandler.cpp:1459
void relaxNodeFull(NodePtr, RelaxationPtr, bool *)
Create a relaxation for a node, building from scratch.
Definition: NlPresHandler.h:80
void quad_var_bound(VarBoundModVector qfmod, LinearFunctionPtr lf, QuadraticFunctionPtr qf, VariableSet qfvars, VariableSet linear_terms, double cl, double cu, int &change)
Definition: NlPresHandler.cpp:1532
void relaxInitFull(RelaxationPtr, SolutionPool *, bool *)
Create root relaxation if doing full node relaxations.
Definition: NlPresHandler.h:74
void writePreStats(std::ostream &out) const
Write statistics about presolve.
Definition: NlPresHandler.cpp:1777
Definition: Node.h:54
Definition: PreAuxVars.h:22
Definition: Problem.h:74
Definition: QuadraticFunction.h:38
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
SolveStatus
Different states an algorithm like branch-and-bound can be in.
Definition: Types.h:158
Options for presolve.
Definition: NlPresHandler.h:50
bool showStats
True if presolve is enabled, false otherwise.
Definition: NlPresHandler.h:52
bool coeffImp
Maximum number of iterations.
Definition: NlPresHandler.h:54
int maxIters
True if stats are displayed, false otherwise.
Definition: NlPresHandler.h:53
Store statistics of presolving.
Definition: NlPresHandler.h:31
int varDel
Total time used in node presolves.
Definition: NlPresHandler.h:35
int cImp
Number of times constraint-bounds were tightened.
Definition: NlPresHandler.h:42
int vBnd
Number of perspective reformulations.
Definition: NlPresHandler.h:40
double timeN
Total time used in initial presolve.
Definition: NlPresHandler.h:34
int pRefs
No. of times infeasible implied bounds detected.
Definition: NlPresHandler.h:39
int conDel
Number of variables marked for deletion.
Definition: NlPresHandler.h:36
int cBnd
Number of times variable-bounds were tightened.
Definition: NlPresHandler.h:41
int conRel
Number of constraints marked for deletion.
Definition: NlPresHandler.h:37
int qCone
Number of changes in nodes.
Definition: NlPresHandler.h:44
double time
Number of iterations (main cycle).
Definition: NlPresHandler.h:33
int infBnds
Number of times constraint bounds relaxed.
Definition: NlPresHandler.h:38
int nMods
Number of times coefficient in a constraint was improved.
Definition: NlPresHandler.h:43

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