14#ifndef MINOTAURPOLYNOMIALFUNCTION_H
15#define MINOTAURPOLYNOMIALFUNCTION_H
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;
38 class PolynomialFunction;
39 typedef PolynomialFunction* PolyFunPtr;
40 typedef const PolynomialFunction* ConstPolyFunPtr;
70 double eval(
const double *x,
int *error);
73 double eval(
const DoubleVector &x,
int *error);
76 void evalGradient(
const double *x,
double *grad_f,
int *error);
81 {assert(!
"can't fill hessian in a monomial function.");};
87 void fillJac(
const double *,
double *,
int *)
88 {assert(!
"can't fill jacobian in a monomial function.");};
91 {assert(!
"can't fill hessian in a monomial function.");};
94 {assert(!
"can't fill hessian in a monomial function.");};
96 double getCoeff()
const;
115 void prepJac(VarSetConstIter, VarSetConstIter)
116 {assert(!
"can't fill jacobian in a monomial function.");};
128 void write(std::ostream &out)
const;
186 double eval(
const double *x,
int *error);
189 void evalGradient(
const double *x,
double *grad_f,
int *error);
192 void evalHessian(
const double mult,
const double *x,
200 void fillJac(
const double *x,
double *values,
int *error);
224 void prepJac(VarSetConstIter vb, VarSetConstIter ve);
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);
257 void write(std::ostream &out)
const;
271 void add(
const double c);
Declare abstract base class NonlinearFunction.
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