Minotaur 0.4.1
Docs for developers
PolynomialFunction.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
14#ifndef MINOTAURPOLYNOMIALFUNCTION_H
15#define MINOTAURPOLYNOMIALFUNCTION_H
16
17#include "NonlinearFunction.h"
18
19namespace Minotaur {
20
21 class CGraph;
22 class CNode;
23 class LinearFunction;
24 class MonomialFunction;
25 class QuadraticFunction;
26 typedef CGraph* CGraphPtr;
27 typedef LinearFunction* LinearFunctionPtr;
28 typedef MonomialFunction* MonomialFunPtr;
29 typedef QuadraticFunction* QuadraticFunctionPtr;
30 typedef const LinearFunction* ConstLinearFunctionPtr;
31 typedef const MonomialFunction* ConstMonomialFunPtr;
32 typedef const QuadraticFunction* ConstQuadraticFunctionPtr;
33 typedef std::vector<MonomialFunPtr> MonomialVector;
34 typedef MonomialVector::iterator MonomialIter;
35 typedef MonomialVector::const_iterator MonomialConstIter;
36
37
38 class PolynomialFunction;
39 typedef PolynomialFunction* PolyFunPtr;
40 typedef const PolynomialFunction* ConstPolyFunPtr;
41
48 public:
51
53 MonomialFunction(double c);
54
57
60
62 MonomialFunPtr clone() const;
63
66 NonlinearFunctionPtr cloneWithVars(VariableConstIterator vbeg,
67 int *err) const;
68
69 // Evaluate.
70 double eval(const double *x, int *error);
71
72 // Evaluate.
73 double eval(const DoubleVector &x, int *error);
74
75 // Gradient.
76 void evalGradient(const double *x, double *grad_f, int *error);
77
78 void evalHessian(const double , const double *,
79 const LTHessStor *, double *,
80 int *)
81 {assert(!"can't fill hessian in a monomial function.");};
82
86
87 void fillJac(const double *, double *, int *)
88 {assert(!"can't fill jacobian in a monomial function.");};
89
91 {assert(!"can't fill hessian in a monomial function.");};
92
94 {assert(!"can't fill hessian in a monomial function.");};
95
96 double getCoeff() const;
97
99 int getDegree() const;
100
102 const VarIntMap* getTerms() const;
103
104 void getVars(VariableSet *) {};
105
107 void multiply(double coeff, ConstVariablePtr v, int p);
108
111
113 void multiply(double c);
114
115 void prepJac(VarSetConstIter, VarSetConstIter)
116 {assert(!"can't fill jacobian in a monomial function.");};
117
119 VarIntMapConstIterator termsBegin();
120
122 VarIntMapConstIterator termsEnd();
123
125 void toPower(int k);
126
128 void write(std::ostream &out) const;
129
131 void operator*=(double c);
132
135
136 private:
138 double coeff_;
139
141 int deg_;
142
147 const double eTol_;
148
150 VarIntMap terms_;
151 };
152
153 // --------------------------------------------------------------------------
154 // --------------------------------------------------------------------------
155
161 public:
164
167
170
172 PolyFunPtr clone() const;
173
175 void add(ConstMonomialFunPtr m);
176
177 // base class function.
178 NonlinearFunctionPtr cloneWithVars(VariableConstIterator vbeg,
179 int *err) const;
180
183 void createCG();
184
185 // base class function.
186 double eval(const double *x, int *error);
187
188 // base class function.
189 void evalGradient(const double *x, double *grad_f, int *error);
190
191 // base class function.
192 void evalHessian(const double mult, const double *x,
193 const LTHessStor *stor, double *values,
194 int *error);
195
196 // base class function.
197 void fillHessStor(LTHessStor *stor);
198
199 // base class function.
200 void fillJac(const double *x, double *values, int *error);
201
202 // base class function.
203 void finalHessStor(const LTHessStor *stor);
204
205 // base class function.
206 void getVars(VariableSet *);
207
209 double getConstant();
210
212 FunctionType getType() const;
213
215 bool isEmpty() const;
216
218 void multiply(ConstLinearFunctionPtr lf, double c);
219
221 void multiply(double c);
222
223 // base class function.
224 void prepJac(VarSetConstIter vb, VarSetConstIter ve);
225
226 void recCG_(const CNode* cnode, double *c, MonomialVector *terms);
227 void recCGMult_(MonomialVector *t1, MonomialVector *t2,
228 double c1, double c2,
229 MonomialVector *terms, double *c);
234 double removeConstant();
235
242
249
251 MonomialConstIter termsBegin();
252
254 MonomialConstIter termsEnd();
255
257 void write(std::ostream &out) const;
258
266 //void operator+=(ConstMonomialFunPtr m);
267 //void add(ConstMonomialFunPtr m);
268
270 //void operator+=(double c);
271 void add(const double c);
272
274 //void operator+=(ConstLinearFunctionPtr lf);
276
278 //void operator+=(ConstQuadraticFunctionPtr qf);
280
282 //void operator+=(ConstPolyFunPtr p);
283 void add(ConstPolyFunPtr p);
284
286 //void operator*=(ConstQuadraticFunctionPtr qf);
288
290 //void operator*=(ConstPolyFunPtr p2);
291 void multiply(ConstPolyFunPtr p2);
292
294 //friend PolyFunPtr operator + (ConstPolyFunPtr p1, ConstPolyFunPtr p2);
296
299
301 PolyFunPtr copyMult(double c);
302
305
308
311
312 protected:
314 double cb_;
315
318
320 const double eTol_;
321
323 MonomialVector terms_;
324
326 void clear_();
327 };
328
329}
330#endif
331
Declare abstract base class NonlinearFunction.
Definition: CGraph.h:33
CNode denotes a node in the computational graph. It stores the op-code, children, parents and other a...
Definition: CNode.h:48
The base class linear function is of the form c'x.
Definition: LinearFunction.h:31
MonomialFunction represents functions of the form of the form where .
Definition: PolynomialFunction.h:47
void evalHessian(const double, const double *, const LTHessStor *, double *, int *)
Evaluate and add hessian at a given point.
Definition: PolynomialFunction.h:78
void multiply(double coeff, ConstVariablePtr v, int p)
Multiply with a variable raised to power.
Definition: PolynomialFunction.cpp:149
NonlinearFunctionPtr cloneWithVars(VariableConstIterator vbeg, int *err) const
Definition: PolynomialFunction.cpp:65
double eval(const double *x, int *error)
Evaluate the function at a given point x.
Definition: PolynomialFunction.cpp:207
void prepJac(VarSetConstIter, VarSetConstIter)
Prepare for evaluating sparse jacobian.
Definition: PolynomialFunction.h:115
void finalHessStor(const LTHessStor *)
Finalize hessian preparation.
Definition: PolynomialFunction.h:93
const VarIntMap * getTerms() const
Monomial terms.
Definition: PolynomialFunction.cpp:143
MonomialFunction()
Default constructor.
Definition: PolynomialFunction.cpp:27
VarIntMapConstIterator termsEnd()
Iterator at the end of the terms.
Definition: PolynomialFunction.cpp:137
void evalGradient(const double *x, double *grad_f, int *error)
Evaluate and add gradient at a given point.
Definition: PolynomialFunction.cpp:224
MonomialFunPtr clone() const
Create a full copy.
Definition: PolynomialFunction.cpp:56
int getDegree() const
Get the degree, sum of all powers.
Definition: PolynomialFunction.cpp:125
~MonomialFunction()
Destroy.
Definition: PolynomialFunction.cpp:77
void toPower(int k)
Raise the monomial to power k.
Definition: PolynomialFunction.cpp:244
void operator*=(double c)
Multiply a constant.
Definition: PolynomialFunction.cpp:195
void getVars(VariableSet *)
Get variables used in this function.
Definition: PolynomialFunction.h:104
void fillHessStor(LTHessStor *)
Fill sparsity of hessian into hessian storage.
Definition: PolynomialFunction.h:90
CNode * fillCG(CGraphPtr cg)
Definition: PolynomialFunction.cpp:84
VarIntMapConstIterator termsBegin()
Iterator for the first term.
Definition: PolynomialFunction.cpp:131
void fillJac(const double *, double *, int *)
Evaluate and add gradient at a given point to the jacobian.
Definition: PolynomialFunction.h:87
void write(std::ostream &out) const
Display.
Definition: PolynomialFunction.cpp:261
Base class for nonlinear functions.
Definition: NonlinearFunction.h:31
PolynomialFunction represents functions of the form , where is a MonomialFunction.
Definition: PolynomialFunction.h:160
void multiply(ConstLinearFunctionPtr lf, double c)
Multiply with (lf + c), where lf is a linear function.
Definition: PolynomialFunction.cpp:486
void write(std::ostream &out) const
Display.
Definition: PolynomialFunction.cpp:720
void removeLinear(LinearFunctionPtr lf)
Definition: PolynomialFunction.cpp:672
PolyFunPtr copyAdd(ConstPolyFunPtr p2) const
Add two polynomials. Creates a new polynomial.
Definition: PolynomialFunction.cpp:852
void add(ConstMonomialFunPtr m)
Add a monomial m to this polynomial. The monomial is first cloned.
Definition: PolynomialFunction.cpp:300
void createCG()
Definition: PolynomialFunction.cpp:355
void prepJac(VarSetConstIter vb, VarSetConstIter ve)
Prepare for evaluating sparse jacobian.
Definition: PolynomialFunction.cpp:537
MonomialConstIter termsEnd()
Get an iterator to the last monomial.
Definition: PolynomialFunction.cpp:714
double eval(const double *x, int *error)
Evaluate the function at a given point x.
Definition: PolynomialFunction.cpp:395
MonomialVector terms_
Each monomial term.
Definition: PolynomialFunction.h:323
CGraphPtr cg_
If the polynomial is constructed from a CGraph, we keep a pointer.
Definition: PolynomialFunction.h:317
MonomialConstIter termsBegin()
Get an iterator to the first monomial.
Definition: PolynomialFunction.cpp:708
double getConstant()
Get the constant term.
~PolynomialFunction()
Destroy.
Definition: PolynomialFunction.cpp:294
void clear_()
Clear/reset all terms. Polynomial becomes 0.
Definition: PolynomialFunction.cpp:309
bool isEmpty() const
Return true if the constant is 0 and there are no terms.
Definition: PolynomialFunction.cpp:480
PolynomialFunction()
Default constructor.
Definition: PolynomialFunction.cpp:273
void getVars(VariableSet *)
Get variables used in this function.
Definition: PolynomialFunction.cpp:472
PolyFunPtr copyMinus(ConstPolyFunPtr p2)
create a copy of this polynomial and subtract from it a given polynomial
Definition: PolynomialFunction.cpp:867
void removeQuadratic(QuadraticFunctionPtr qf)
Definition: PolynomialFunction.cpp:686
void fillJac(const double *x, double *values, int *error)
Evaluate and add gradient at a given point to the jacobian.
Definition: PolynomialFunction.cpp:446
PolyFunPtr clone() const
Make a clone.
Definition: PolynomialFunction.cpp:323
void evalGradient(const double *x, double *grad_f, int *error)
Evaluate and add gradient at a given point.
Definition: PolynomialFunction.cpp:412
double cb_
Additional constant.
Definition: PolynomialFunction.h:314
NonlinearFunctionPtr cloneWithVars(VariableConstIterator vbeg, int *err) const
Make a clone using new variables.
Definition: PolynomialFunction.cpp:336
void fillHessStor(LTHessStor *stor)
Fill sparsity of hessian into hessian storage.
Definition: PolynomialFunction.cpp:436
const double eTol_
Tolerance.
Definition: PolynomialFunction.h:320
FunctionType getType() const
Return type of function.
Definition: PolynomialFunction.cpp:466
PolyFunPtr copyMult(double c)
Multiply a polynomial with constant.
Definition: PolynomialFunction.cpp:881
void finalHessStor(const LTHessStor *stor)
Finalize hessian preparation.
Definition: PolynomialFunction.cpp:456
void evalHessian(const double mult, const double *x, const LTHessStor *stor, double *values, int *error)
Evaluate and add hessian at a given point.
Definition: PolynomialFunction.cpp:424
double removeConstant()
If the polynomial has a constant term, return it, and remove it from the polynomial.
Definition: PolynomialFunction.cpp:664
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