Minotaur 0.4.1
Docs for developers
UnoEngine.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
15#ifndef MINOTAURUnoENGINE_H
16#define MINOTAURUnoENGINE_H
17
18#include "NLPEngine.h"
19#include "Solution.h"
20#include "Uno.hpp"
21#include "WarmStart.h"
22#include "ingredients/constraint_relaxation_strategy/ConstraintRelaxationStrategyFactory.hpp"
23#include "ingredients/globalization_mechanism/GlobalizationMechanismFactory.hpp"
24#include "model/ModelFactory.hpp"
25#include "tools/Logger.hpp"
26#include "tools/Options.hpp"
27
28namespace uno
29{
30class UnoApplication;
31class UnoFunInterface;
32class Model;
33} // namespace uno
34
35namespace Minotaur
36{
37
38class Environment;
39class UnoEngine;
40class Problem;
41class Timer;
42typedef Environment* EnvPtr;
43typedef UnoEngine* UnoEnginePtr;
44typedef Problem* ProblemPtr;
45
46// thread based statistics
48{
53 double ptime;
56 double strTime;
57 double time;
58 double walltime;
59};
60
62class UnoSolution;
63typedef UnoSolution* UnoSolPtr;
64typedef const UnoSolution* ConstUnoSolPtr;
65
66class UnoSolution : public Solution
67{
68public:
71
73 UnoSolution(const double* x, ProblemPtr problem);
74
79 UnoSolution(const double* x, double objval, ProblemPtr problem);
80
83
86
91 const double* getLowerDualOfVars() const
92 {
93 return dualXLow_;
94 };
95
100 const double* getUpperDualOfVars() const
101 {
102 return dualXUp_;
103 };
104
105 // base class
106 void setDualOfVars(const double*)
107 {
108 assert(!"implement me!");
109 };
110
112 void setDualOfVars(const double* lower, const double* upper);
113
115 void write(std::ostream& out) const;
116
117private:
119 double* dualXLow_;
120
122 double* dualXUp_;
123};
124
125class UnoWarmStart;
126typedef UnoWarmStart* UnoWarmStartPtr;
127typedef const UnoWarmStart* ConstUnoWarmStartPtr;
128
131{
132public:
134 UnoWarmStart();
135
138
141
144
145 // Implement WarmStart::hasInfo().
146 bool hasInfo();
147
154 void setPoint(UnoSolPtr sol);
155
156 // Implement WarmStart::write().
157 void write(std::ostream& out) const;
158
159private:
161 UnoSolPtr sol_;
162};
163
164// ----------------------------------------------------------------------- //
165// ----------------------------------------------------------------------- //
166
167class UnoEngine : public NLPEngine
168{
169public:
170 friend class Problem;
171
173 UnoEngine(EnvPtr env);
174
176 ~UnoEngine();
177
178 // Base class method
180
181 void changeBound(ConstraintPtr cons, BoundType lu, double new_val);
182
183 // Implement Engine::changeBound(VariablePtr, BoundType, double).
184 void changeBound(VariablePtr var, BoundType lu, double new_val);
185
186 // Implement Engine::changeBound(VariablePtr, double, double).
187 void changeBound(VariablePtr var, double new_lb, double new_ub);
188
189 // Implement Engine::changeConstraint().
190 void changeConstraint(ConstraintPtr con, LinearFunctionPtr lf, double lb,
191 double ub);
192
193 // Implement Engine::changeConstraint().
195
196 // change objective.
197 void changeObj(FunctionPtr f, double cb);
198
200 void clear();
201
203 void disableStrBrSetup();
204
207
209 void enableStrBrSetup();
210
211 // Implement Engine::fillStats()
212 void fillStats(std::vector<double>&);
213
214 // get name.
215 std::string getName() const;
216
217 // Implement Engine::getSolution().
219
220 // Implement Engine::getSolutionValue().
221 double getSolutionValue();
222
223 // Implement Engine::getStatus().
225
226 // Implement Engine::getWarmStart().
228
229 // Implement Engine::getWarmStartCopy().
231
233 void load(ProblemPtr problem);
234
235 // Implement Engine::loadFromWarmStart().
236 void loadFromWarmStart(const WarmStartPtr ws);
237
238 // Convert 'min f' to 'min -f'.
239 void negateObj();
240
241 // base class method.
242 void removeCons(std::vector<ConstraintPtr>& delcons);
243
244 // Implement Engine::resetIterationLimit().
245 void resetIterationLimit();
246
247 // Implement Engine::setIterationLimit().
248 void setIterationLimit(int limit);
249
250 // Implement Engine::setDualObjLimit().
251 int setDualObjLimit(double)
252 {
253 return 1;
254 };
255
257
259
265
267 void writeStats(std::ostream& out) const;
268
269private:
271 bool bndChanged_;
272
274 bool consChanged_;
275
277 // double *dual_x_l_;
278
280 // double *dual_x_u_;
281
283 // double *dual_g_;
284
286 EnvPtr env_;
287
289 const double etol_;
290
293 // bool justLoaded_;
294
296 // LoggerPtr logger_;
297
299 static const int maxIterLimit_ = 3000;
300
302 static const std::string me_;
303
304 // uno::UnoApplication *myapp_;
305
306 // usually gets freed automatically when myapp_ is deleted.
307 // In case myapp_->Optimize or myapp_->Reoptimize are
308 // not called even once, then we have to free it (see
309 // UnoStats::opt, reopt).
310 // uno::UnoFunInterface *mynlp_;
311
318 // bool prepareWs_;
319
321 // bool presolve_();
322
324 ProblemPtr problem_;
325 std::unique_ptr<uno::Uno> uno_;
326 std::shared_ptr<uno::Iterate> initial_iterate;
327 std::shared_ptr<uno::Model> model_;
328 std::unique_ptr<uno::Model> uno_model_;
329 uno::Options options;
336 UnoSolPtr sol_;
337
339 // UnoStats *stats_;
340
342 // bool strBr_;
343
348 // Timer *timer_;
349
354 // bool useWs_;
355
357 // UnoWarmStartPtr ws_;
358
360 // UnoWarmStartPtr wsSb_;
361
363 void setOptionsForProb_();
364};
365} // namespace Minotaur
366
367#endif
Declare NLPEngine Class for solving nonlinear problems using a nonlinear solver.
Implement base class Solution.
The Constraint class is used to manage a constraint.
Definition: Constraint.h:61
Definition: Engine.h:34
Definition: Environment.h:28
Definition: Function.h:37
The base class linear function is of the form c'x.
Definition: LinearFunction.h:31
Definition: NLPEngine.h:37
Base class for nonlinear functions.
Definition: NonlinearFunction.h:31
Definition: Problem.h:74
Definition: Solution.h:30
Definition: UnoEngine.h:168
UnoEngine(EnvPtr env)
Default constructor.
Definition: UnoEngine.cpp:165
void changeBound(ConstraintPtr cons, BoundType lu, double new_val)
Change a bound of a constraint.
Definition: UnoEngine.cpp:182
void removeCons(std::vector< ConstraintPtr > &delcons)
Delete constraints from the engine.
Definition: UnoEngine.cpp:311
void setIterationLimit(int limit)
Definition: UnoEngine.cpp:319
double getSolutionValue()
Get the solution value.
Definition: UnoEngine.cpp:250
void loadFromWarmStart(const WarmStartPtr ws)
Definition: UnoEngine.cpp:302
EnginePtr emptyCopy()
Return an empty UnoEngine pointer.
Definition: UnoEngine.cpp:221
WarmStartPtr getWarmStartCopy()
Definition: UnoEngine.cpp:246
~UnoEngine()
Destroy.
Definition: UnoEngine.cpp:173
std::string getName() const
Get the name.
Definition: UnoEngine.cpp:229
void changeObj(FunctionPtr f, double cb)
Change objective function.
Definition: UnoEngine.cpp:208
EngineStatus solve()
Definition: UnoEngine.cpp:335
void setOptionsForSingleSolve()
Definition: UnoEngine.cpp:331
ConstWarmStartPtr getWarmStart()
Definition: UnoEngine.cpp:242
void resetIterationLimit()
Reset the iteration limit to maximum possible.
Definition: UnoEngine.cpp:315
void disableStrBrSetup()
Restore settings after strong branching.
Definition: UnoEngine.cpp:217
int setDualObjLimit(double)
Set the dual objective limit.
Definition: UnoEngine.h:251
void load(ProblemPtr problem)
Load the problem into Uno. We create the TNLP interface to Uno.
Definition: UnoEngine.cpp:260
void enableStrBrSetup()
Make settings for strong branching.
Definition: UnoEngine.cpp:225
void fillStats(std::vector< double > &)
Accumulate statistics from different threads in a common data.
Definition: UnoEngine.cpp:383
EngineStatus getStatus()
Get the status of the last solve command.
Definition: UnoEngine.cpp:255
void clear()
Clear the loaded problem, if any, from the engine.
Definition: UnoEngine.cpp:213
void addConstraint(ConstraintPtr c)
Add a new constraint to the engine.
Definition: UnoEngine.cpp:177
void changeConstraint(ConstraintPtr con, LinearFunctionPtr lf, double lb, double ub)
Change the linear function, and the bounds of a constraint.
Definition: UnoEngine.cpp:197
void writeStats(std::ostream &out) const
Write statistics.
Definition: UnoEngine.cpp:387
ConstSolutionPtr getSolution()
Get the solution obtained after solving the problem.
Definition: UnoEngine.cpp:234
void setOptionsForRepeatedSolve()
Set options to solve the NLP repeatedly, with few changes.
Definition: UnoEngine.cpp:327
void negateObj()
Negate the objective function. Min f is changed to Min -f.
Definition: UnoEngine.cpp:306
Definition: UnoEngine.h:67
void setDualOfVars(const double *)
Copy values of dual variables of variables.
Definition: UnoEngine.h:106
const double * getUpperDualOfVars() const
Definition: UnoEngine.h:100
UnoSolution()
Default constructor.
Definition: UnoEngine.cpp:52
~UnoSolution()
Destroy.
Definition: UnoEngine.cpp:109
const double * getLowerDualOfVars() const
Definition: UnoEngine.h:91
UnoSolution(const double *x, ProblemPtr problem)
Construct a solution for a problem from an array of doubles.
void write(std::ostream &out) const
Write to an output.
Definition: UnoEngine.cpp:124
Class for saving and using Warm-start information in Uno.
Definition: UnoEngine.h:131
void setPoint(UnoSolPtr sol)
Definition: UnoEngine.cpp:155
void write(std::ostream &out) const
Write to an output stream.
Definition: UnoEngine.cpp:159
bool hasInfo()
Definition: UnoEngine.cpp:150
~UnoWarmStart()
Destroy.
Definition: UnoEngine.cpp:141
UnoWarmStart()
Default constructor.
Definition: UnoEngine.cpp:131
UnoSolPtr getPoint()
Return the soluton that can be used as starting point.
Definition: UnoEngine.cpp:145
Definition: Variable.h:31
Definition: WarmStart.h:45
Definition: ActiveNodeStore.h:20
BoundType
Different types of variable-bounds.
Definition: Types.h:131
unsigned int UInt
Unsigned integer.
Definition: Types.h:30
EngineStatus
Different status that an external engine may report.
Definition: Types.h:176
Definition: UnoEngine.h:48
UInt reopt
No. of calls to Uno's ReOptimize.
Definition: UnoEngine.h:51
UInt calls
Total number of calls to solve.
Definition: UnoEngine.h:49
double strTime
time taken in strong branching alone.
Definition: UnoEngine.h:56
UInt opt
No. of calls to Uno's Optimize.
Definition: UnoEngine.h:50
UInt strIters
Number of iterations in strong branching alone.
Definition: UnoEngine.h:55
double time
Sum of time taken in all calls to solve.
Definition: UnoEngine.h:57
UInt iters
Sum of number of iterations in all calls.
Definition: UnoEngine.h:52
UInt strCalls
Calls to solve while strong branching.
Definition: UnoEngine.h:54
double ptime
Sum of time taken in all calls to presolve.
Definition: UnoEngine.h:53

Minotaur source code documented by Doxygen 1.9.4 on Sun Jun 8 2025