Minotaur 0.4.1
Docs for developers
Function.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 MINOTAURFUNCTION_H
14#define MINOTAURFUNCTION_H
15
16#include "Types.h"
17#include "LinearFunction.h"
18#include "NonlinearFunction.h"
19#include "QuadraticFunction.h"
20
21namespace Minotaur {
22
23 struct LTHessStor;
24
37 class Function {
38 public:
39
41 Function();
42
45
51
54
61
64
66 virtual ~Function();
67
70 virtual FunctionPtr cloneWithVars(VariableConstIterator vbeg, int *err)
71 const;
72
74 virtual FunctionPtr cloneWithVarsPermute(VariableConstIterator vbeg, UIntVector variableaddress, int *err)
75 const;
76
81 virtual double eval(const DoubleVector &x, int *error) const;
82
84 virtual double eval(const double *x, int *error) const;
85
86 virtual void prepJac();
87
91 virtual void evalGradient(const double *x, double *grad_f, int *error)
92 const;
93
94 virtual void fillJac(const double *x, double *values, int *error);
100 virtual UInt getNumNzInHess();
101
106 virtual bool hasVar(VariablePtr var) const;
107
112 virtual FunctionType getType();
113
121 virtual FunctionType getVarFunType(ConstVariablePtr v);
122
124 virtual LinearFunctionPtr getLinearFunction() const;
125
128
131
133 VarSetConstIterator varsBegin();
134
136 VarSetConstIterator varsEnd();
137
139 virtual UInt getNumVars() const;
140
146 virtual void evalHessian(const double mult, const double *x,
147 const size_t *offset, double *values , int *error);
148 virtual void evalHessian(double mult, const double *x,
149 const LTHessStor *stor, double *values , int *error);
150
151
153 virtual void fillHessOffset(size_t *offset, size_t &pos,
154 std::set<ConstVariablePair, CompareVariablePair> & v_pairs);
155
156 virtual void fillHessStor(LTHessStor *stor);
157 virtual void finalHessStor(const LTHessStor *stor);
158
160 virtual void changeLf(LinearFunctionPtr lf);
161
163 virtual void changeNlf(NonlinearFunctionPtr nlf);
164
166 virtual void subst(VariablePtr out, VariablePtr in, double rat);
167
172 virtual void operator*=(const double c);
173
179
186
192
198 void add(ConstLinearFunctionPtr lPtr);
199
200 void removeVar(VariablePtr v, double val);
201 double getFixVarOffset(VariablePtr v, double val);
202
204 friend std::ostream &operator<<(std::ostream &out, const Function &f);
205
207 virtual void write(std::ostream &out) const;
208
209 protected:
212
214 VariableSet vars_;
215
216 private:
217
220
223
226
231 void collectVars_();
232
233 //
234 //void createHessMap_();
235 };
236
237}
238#endif
239
Declare the class LinearFunction for storing and modifying a linear function.
Declare abstract base class NonlinearFunction.
Construct and manage quadratic functions.
Declare important 'types' used in Minotaur.
Definition: Function.h:37
virtual QuadraticFunctionPtr getQuadraticFunction() const
Return the quadratic part of the function.
Definition: Function.cpp:540
virtual void evalHessian(const double mult, const double *x, const size_t *offset, double *values, int *error)
Definition: Function.cpp:296
virtual FunctionPtr cloneWithVarsPermute(VariableConstIterator vbeg, UIntVector variableaddress, int *err) const
similar to above function, but for shuffling variables
Definition: Function.cpp:154
virtual void fillHessOffset(size_t *offset, size_t &pos, std::set< ConstVariablePair, CompareVariablePair > &v_pairs)
Fill in the values of offset, starting from position pos.
Definition: Function.cpp:277
VarSetConstIterator varsEnd()
Return an end-iterator for the variables that are in this function.
Definition: Function.cpp:583
virtual void changeNlf(NonlinearFunctionPtr nlf)
Change the nonlinear function part.
Definition: Function.cpp:509
virtual double eval(const DoubleVector &x, int *error) const
Definition: Function.cpp:403
virtual ~Function()
Destroy.
Definition: Function.cpp:109
bool isLinearIn(ConstVariablePtr v)
Check if function is linear in a variable.
Definition: Function.cpp:552
VarSetConstIterator varsBegin()
Return a begin-iterator for the variables that are in this function.
Definition: Function.cpp:577
virtual bool hasVar(VariablePtr var) const
Definition: Function.cpp:259
friend std::ostream & operator<<(std::ostream &out, const Function &f)
Express the function and send the output to the output stream "out".
virtual LinearFunctionPtr getLinearFunction() const
Return the linear part of the function.
Definition: Function.cpp:534
virtual void operator*=(const double c)
Definition: Function.cpp:233
QuadraticFunctionPtr removeQuadratic()
Definition: Function.cpp:366
virtual void changeLf(LinearFunctionPtr lf)
Change the linear function part.
Definition: Function.cpp:499
NonlinearFunctionPtr removeNonlinear()
Definition: Function.cpp:384
virtual void subst(VariablePtr out, VariablePtr in, double rat)
Substitute a variable with another.
Definition: Function.cpp:185
VariableSet vars_
The variables that occur in this function.
Definition: Function.h:214
virtual UInt getNumNzInHess()
Definition: Function.cpp:265
virtual FunctionPtr cloneWithVars(VariableConstIterator vbeg, int *err) const
Definition: Function.cpp:124
virtual void write(std::ostream &out) const
Express the function and send the output to the output stream "out".
Definition: Function.cpp:650
virtual NonlinearFunctionPtr getNonlinearFunction() const
Return the nonlinear part of the function.
Definition: Function.cpp:546
FunctionType type_
The type of the function.
Definition: Function.h:211
void add(ConstLinearFunctionPtr lPtr)
Definition: Function.cpp:332
virtual void evalGradient(const double *x, double *grad_f, int *error) const
Definition: Function.cpp:426
Function()
Default constructor.
Definition: Function.cpp:17
virtual UInt getNumVars() const
Return the number of variables that are in this function.
Definition: Function.cpp:253
LinearFunctionPtr removeLinear()
Definition: Function.cpp:346
virtual FunctionType getType()
Definition: Function.cpp:493
The base class linear function is of the form c'x.
Definition: LinearFunction.h:31
Base class for nonlinear functions.
Definition: NonlinearFunction.h:31
Definition: QuadraticFunction.h:38
Definition: Variable.h:31
Definition: ActiveNodeStore.h:20
unsigned int UInt
Unsigned integer.
Definition: Types.h:30
FunctionType
Different types of functions in Minotaur.
Definition: Types.h:65
Definition: HessianOfLag.h:21

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