Minotaur 0.4.1
Docs for developers
Presolver.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//
12#ifndef MINOTAURPRESOLVER_H
13#define MINOTAURPRESOLVER_H
14
15#include "Types.h"
16
17namespace Minotaur {
18
19 class Solution;
20 class PreMod;
21 typedef PreMod* PreModPtr;
22 typedef Solution* SolutionPtr;
23 typedef std::deque<PreModPtr> PreModQ;
24 typedef PreModQ::iterator PreModQIter;
25 typedef PreModQ::reverse_iterator PreModQRIter;
26 typedef PreModQ::const_iterator PreModQConstIter;
27
39 class Presolver {
40 public:
42 Presolver ();
43
45 Presolver (ProblemPtr problem, EnvPtr env, HandlerVector handlers);
46
48 virtual ~Presolver();
49
51 virtual void presolve() {};
52
54 virtual SolutionPtr getSolution() {return sol_;};
55
56 virtual SolveStatus getStatus();
65 virtual void standardize();
66
67 virtual SolveStatus solve();
68
70 virtual void removeDuplicates() {};
71
76 virtual void getX(const double *x, DoubleVector *newx);
77
83
84 protected:
85
88
90 double eTol_;
91
93 HandlerVector handlers_;
94
96 double intTol_;
97
100
102 static const std::string me_;
103
105 PreModQ mods_;
106
107 /*
108 * The problem being presolved. Only one problem may be presolved by one
109 * Presolver.
110 */
111 ProblemPtr problem_;
112
115
118
120 void removeEmptyObj_();
121
123 void minimizify_();
124
129 void linearizeObjective_();
130
136 void ifIntsAreBins_();
137
138 /*
139 * Convert constraints of the form g(x) >= c to -g(x) <= -c. Do not
140 * change equality or range constraints.
141 */
142 void standardizeConstraints_();
143
144 };
145
146 typedef Presolver* PresolverPtr;
147}
148#endif
149
Declare important 'types' used in Minotaur.
Definition: Environment.h:28
Definition: Logger.h:37
Definition: Presolver.h:39
virtual void removeDuplicates()
Search and remove any duplicate rows and columns from the problem.
Definition: Presolver.h:70
SolveStatus status_
Status.
Definition: Presolver.h:117
HandlerVector handlers_
Handlers used to presolve the problem.
Definition: Presolver.h:93
virtual void standardize()
Definition: Presolver.cpp:79
double intTol_
A value in [z-intTol_, z+intTol_], z integer, will be treated as z.
Definition: Presolver.h:96
void minimizify_()
convert to minimization problem.
Definition: Presolver.cpp:198
virtual SolutionPtr getSolution()
get solution if any
Definition: Presolver.h:54
void linearizeObjective_()
Definition: Presolver.cpp:210
static const std::string me_
For logging.
Definition: Presolver.h:102
double eTol_
Tolerance for checking feasibility.
Definition: Presolver.h:90
LoggerPtr logger_
Log manager.
Definition: Presolver.h:99
void removeEmptyObj_()
Remove objective function, if it is zero or constant.
Definition: Presolver.cpp:188
SolutionPtr sol_
Pointer to optimal solution, if one found.
Definition: Presolver.h:114
EnvPtr env_
Environment.
Definition: Presolver.h:87
SolutionPtr getPostSol(SolutionPtr s)
Definition: Presolver.cpp:291
virtual void getX(const double *x, DoubleVector *newx)
Definition: Presolver.cpp:272
void ifIntsAreBins_()
Definition: Presolver.cpp:241
virtual void presolve()
Default presolve.
Definition: Presolver.h:51
PreModQ mods_
A queue of presolve-modifications required for post-solve.
Definition: Presolver.h:105
virtual ~Presolver()
Destroy.
Definition: Presolver.cpp:60
Presolver()
Default constructor.
Definition: Presolver.cpp:34
Definition: Problem.h:74
Definition: Solution.h:30
Definition: ActiveNodeStore.h:20
SolveStatus
Different states an algorithm like branch-and-bound can be in.
Definition: Types.h:158

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