Minotaur 0.4.1
Docs for developers
NonlinearFunction.h
Go to the documentation of this file.
1//
2// Minotaur -- It's only 1/2 bull
3//
4// (C)opyright 2009 - 2025 The Minotaur Team.
5//
6
13#ifndef MINOTAURNONLINEARFUNCTION_H
14#define MINOTAURNONLINEARFUNCTION_H
15
16#include "Types.h"
17
18namespace Minotaur {
19
20 struct LTHessStor;
21 class NonlinearFunction;
22 class VarBoundMod;
23 typedef NonlinearFunction *NonlinearFunctionPtr;
24 typedef VarBoundMod *VarBoundModPtr;
25 typedef std::vector<VarBoundModPtr> VarBoundModVector;
26 typedef VarBoundModVector::iterator VarBoundModIter;
27
32
33 public:
36
38 virtual ~NonlinearFunction();
39
50 virtual void addConst(const double d, int &err);
51
57 virtual void sqrRoot(int &err);
58
66 virtual NonlinearFunctionPtr cloneWithVars(VariableConstIterator vbeg,
67 int *err) const = 0;
68
76 virtual void computeBounds(double *lb, double *ub, int *error);
77
87 virtual double eval(const double *x, int *error) = 0;
88
99 virtual void evalGradient(const double *x, double *grad_f,
100 int *error) = 0;
101
113 virtual void evalHessian(const double mult, const double *x,
114 const LTHessStor *stor, double *values,
115 int *error) = 0;
116
122 virtual void fillHessStor(LTHessStor *stor) = 0;
123
137 virtual void fillJac(const double *x, double *values, int *error) = 0;
138
146 virtual void finalHessStor(const LTHessStor *stor) = 0;
147
155 virtual std::string getNlString(int *err);
156
165 virtual double getFixVarOffset(VariablePtr /* v */, double /* val */)
166 {
167 assert(!"implment me!");
168 return 0;
169 };
170
172 virtual FunctionType getType() const;
173
180 virtual void getVars(VariableSet *vars) = 0;
181
188 virtual bool hasVar(ConstVariablePtr v) const;
189
195 virtual bool isSumOfSquares() const { return true; }
196
202 virtual void multiply(double c) = 0;
203
205 virtual size_t numVars() { return vars_.size(); };
206
216 virtual void prepJac(VarSetConstIter vbeg, VarSetConstIter vend) = 0;
217
219 virtual void removeVar(VariablePtr /* v */, double /* val */)
220 {
221 assert(!"implement me!");
222 };
223
225 virtual void subst(VariablePtr /* out */, VariablePtr /* in */,
226 double /* rat */)
227 {
228 assert(!"implement me!");
229 };
230
246 virtual NonlinearFunctionPtr getPersp(VariablePtr z, double eps,
247 int *err) const;
248
263 virtual void varBoundMods(double /* lb */, double /* ub */,
264 VarBoundModVector & /* mods */,
265 SolveStatus * /* status */) {};
266
272 virtual VariableSet::iterator varsBegin() { return vars_.begin(); };
273
279 virtual VariableSet::iterator varsEnd() { return vars_.end(); };
280
282 virtual void write(std::ostream &out) const;
283
284 protected:
286 VariableSet vars_;
287 };
288
291
292} //namespace Minotaur
293#endif
Declare important 'types' used in Minotaur.
Base class for nonlinear functions.
Definition: NonlinearFunction.h:31
virtual void prepJac(VarSetConstIter vbeg, VarSetConstIter vend)=0
Prepare for evaluating sparse jacobian.
virtual void varBoundMods(double, double, VarBoundModVector &, SolveStatus *)
Tighten variables based on function bounds.
Definition: NonlinearFunction.h:263
virtual size_t numVars()
Return the number of variables in this function.
Definition: NonlinearFunction.h:205
virtual bool isSumOfSquares() const
Check if the function is a sum of square terms.
Definition: NonlinearFunction.h:195
virtual void computeBounds(double *lb, double *ub, int *error)
Calculate upper and lower bounds on the function using bounds of the variables.
Definition: NonlinearFunction.cpp:40
virtual void removeVar(VariablePtr, double)
Remove a variable v from the function after fixing it to value val.
Definition: NonlinearFunction.h:219
virtual VariableSet::iterator varsBegin()
First iterator for variables.
Definition: NonlinearFunction.h:272
virtual NonlinearFunctionPtr cloneWithVars(VariableConstIterator vbeg, int *err) const =0
Make a clone using new variables.
virtual double getFixVarOffset(VariablePtr, double)
If a variable is fixed at a given value and removed, what is the constant (offset) needed to be added...
Definition: NonlinearFunction.h:165
virtual void addConst(const double d, int &err)
Add a constant to the function.
Definition: NonlinearFunction.cpp:34
virtual void write(std::ostream &out) const
Display the nonlinear function.
Definition: NonlinearFunction.cpp:81
virtual bool hasVar(ConstVariablePtr v) const
Check if function contains a variable.
Definition: NonlinearFunction.cpp:60
virtual void multiply(double c)=0
Multiply by a constant.
virtual double eval(const double *x, int *error)=0
Evaluate the function at a given point x.
virtual VariableSet::iterator varsEnd()
Last iterator for variables.
Definition: NonlinearFunction.h:279
virtual NonlinearFunctionPtr getPersp(VariablePtr z, double eps, int *err) const
Take perspective of this function with respect to a given variable.
Definition: NonlinearFunction.cpp:66
virtual void subst(VariablePtr, VariablePtr, double)
Substitute a variable with another.
Definition: NonlinearFunction.h:225
virtual void evalHessian(const double mult, const double *x, const LTHessStor *stor, double *values, int *error)=0
Evaluate and add hessian at a given point.
virtual void fillHessStor(LTHessStor *stor)=0
Fill sparsity of hessian into hessian storage.
virtual void getVars(VariableSet *vars)=0
Get variables used in this function.
virtual ~NonlinearFunction()
Destroy.
Definition: NonlinearFunction.cpp:28
virtual void finalHessStor(const LTHessStor *stor)=0
Finalize hessian preparation.
VariableSet vars_
A set of variables used in this function.
Definition: NonlinearFunction.h:286
virtual void fillJac(const double *x, double *values, int *error)=0
Evaluate and add gradient at a given point to the jacobian.
virtual std::string getNlString(int *err)
Return a string in AMPL's .nl format (postfix notation) of this nonlinear function.
Definition: NonlinearFunction.cpp:48
NonlinearFunction()
Default constructor.
Definition: NonlinearFunction.cpp:21
virtual void sqrRoot(int &err)
Change the nonlinear function to its square-root.
Definition: NonlinearFunction.cpp:75
virtual void evalGradient(const double *x, double *grad_f, int *error)=0
Evaluate and add gradient at a given point.
virtual FunctionType getType() const
Return the type of function: polynomial, ...
Definition: NonlinearFunction.cpp:54
Definition: Variable.h:31
Definition: ActiveNodeStore.h:20
FunctionType
Different types of functions in Minotaur.
Definition: Types.h:65
SolveStatus
Different states an algorithm like branch-and-bound can be in.
Definition: Types.h:158
Definition: HessianOfLag.h:21

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