Minotaur 0.4.1
Docs for developers
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
Minotaur::PolynomialFunction Class Reference

PolynomialFunction represents functions of the form $\sum_jm_j$, where $m_j$ is a MonomialFunction. More...

#include <PolynomialFunction.h>

Inheritance diagram for Minotaur::PolynomialFunction:
Inheritance graph
[legend]
Collaboration diagram for Minotaur::PolynomialFunction:
Collaboration graph
[legend]

Public Member Functions

 PolynomialFunction ()
 Default constructor.
 
 PolynomialFunction (CGraphPtr cg)
 Expand polynomial from a computational graph.
 
 ~PolynomialFunction ()
 Destroy.
 
PolyFunPtr clone () const
 Make a clone.
 
void add (ConstMonomialFunPtr m)
 Add a monomial m to this polynomial. The monomial is first cloned.
 
NonlinearFunctionPtr cloneWithVars (VariableConstIterator vbeg, int *err) const
 Make a clone using new variables. More...
 
void createCG ()
 
double eval (const double *x, int *error)
 Evaluate the function at a given point x. More...
 
void evalGradient (const double *x, double *grad_f, int *error)
 Evaluate and add gradient at a given point. More...
 
void evalHessian (const double mult, const double *x, const LTHessStor *stor, double *values, int *error)
 Evaluate and add hessian at a given point. More...
 
void fillHessStor (LTHessStor *stor)
 Fill sparsity of hessian into hessian storage. More...
 
void fillJac (const double *x, double *values, int *error)
 Evaluate and add gradient at a given point to the jacobian. More...
 
void finalHessStor (const LTHessStor *stor)
 Finalize hessian preparation. More...
 
void getVars (VariableSet *)
 Get variables used in this function. More...
 
double getConstant ()
 Get the constant term.
 
FunctionType getType () const
 Return type of function. More...
 
bool isEmpty () const
 Return true if the constant is 0 and there are no terms.
 
void multiply (ConstLinearFunctionPtr lf, double c)
 Multiply with (lf + c), where lf is a linear function.
 
void multiply (double c)
 Multiply with c, a constant. More...
 
void prepJac (VarSetConstIter vb, VarSetConstIter ve)
 Prepare for evaluating sparse jacobian. More...
 
void recCG_ (const CNode *cnode, double *c, MonomialVector *terms)
 
void recCGMult_ (MonomialVector *t1, MonomialVector *t2, double c1, double c2, MonomialVector *terms, double *c)
 
double removeConstant ()
 If the polynomial has a constant term, return it, and remove it from the polynomial.
 
void removeLinear (LinearFunctionPtr lf)
 
void removeQuadratic (QuadraticFunctionPtr qf)
 
MonomialConstIter termsBegin ()
 Get an iterator to the first monomial.
 
MonomialConstIter termsEnd ()
 Get an iterator to the last monomial.
 
void write (std::ostream &out) const
 Display. More...
 
void add (const double c)
 Add a constant. More...
 
void add (ConstLinearFunctionPtr lf)
 Add a linear function.
 
void add (ConstQuadraticFunctionPtr qf)
 Add a quadratic.
 
void add (ConstPolyFunPtr p)
 Add a polynomial to the polynomial.
 
void multiply (ConstQuadraticFunctionPtr qf)
 Multiply with a quadratic.
 
void multiply (ConstPolyFunPtr p2)
 Multiply with a polynomial.
 
PolyFunPtr copyAdd (ConstPolyFunPtr p2) const
 Add two polynomials. Creates a new polynomial.
 
PolyFunPtr copyMinus (ConstPolyFunPtr p2)
 create a copy of this polynomial and subtract from it a given polynomial
 
PolyFunPtr copyMult (double c)
 Multiply a polynomial with constant.
 
PolyFunPtr copyMult (ConstLinearFunctionPtr l2) const
 Multiply a linear function and polynomial function.
 
PolyFunPtr copyMult (ConstQuadraticFunctionPtr q2) const
 Multiply a polynomial with quadratic.
 
PolyFunPtr copyMult (ConstPolyFunPtr p2) const
 Multiply a polynomial with constant.
 
- Public Member Functions inherited from Minotaur::NonlinearFunction
 NonlinearFunction ()
 Default constructor.
 
virtual ~NonlinearFunction ()
 Destroy.
 
virtual void addConst (const double d, int &err)
 Add a constant to the function. More...
 
virtual void sqrRoot (int &err)
 Change the nonlinear function to its square-root. More...
 
virtual NonlinearFunctionPtr cloneWithVars (VariableConstIterator vbeg, int *err) const =0
 Make a clone using new variables. More...
 
virtual void computeBounds (double *lb, double *ub, int *error)
 Calculate upper and lower bounds on the function using bounds of the variables. More...
 
virtual double eval (const double *x, int *error)=0
 Evaluate the function at a given point x. More...
 
virtual void evalGradient (const double *x, double *grad_f, int *error)=0
 Evaluate and add gradient at a given point. More...
 
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. More...
 
virtual void fillHessStor (LTHessStor *stor)=0
 Fill sparsity of hessian into hessian storage. More...
 
virtual void fillJac (const double *x, double *values, int *error)=0
 Evaluate and add gradient at a given point to the jacobian. More...
 
virtual void finalHessStor (const LTHessStor *stor)=0
 Finalize hessian preparation. More...
 
virtual std::string getNlString (int *err)
 Return a string in AMPL's .nl format (postfix notation) of this nonlinear function. More...
 
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. More...
 
virtual FunctionType getType () const
 Return the type of function: polynomial, ... More...
 
virtual void getVars (VariableSet *vars)=0
 Get variables used in this function. More...
 
virtual bool hasVar (ConstVariablePtr v) const
 Check if function contains a variable. More...
 
virtual bool isSumOfSquares () const
 Check if the function is a sum of square terms. More...
 
virtual void multiply (double c)=0
 Multiply by a constant. More...
 
virtual size_t numVars ()
 Return the number of variables in this function.
 
virtual void prepJac (VarSetConstIter vbeg, VarSetConstIter vend)=0
 Prepare for evaluating sparse jacobian. More...
 
virtual void removeVar (VariablePtr, double)
 Remove a variable v from the function after fixing it to value val. More...
 
virtual void subst (VariablePtr, VariablePtr, double)
 Substitute a variable with another. More...
 
virtual NonlinearFunctionPtr getPersp (VariablePtr z, double eps, int *err) const
 Take perspective of this function with respect to a given variable. More...
 
virtual void varBoundMods (double, double, VarBoundModVector &, SolveStatus *)
 Tighten variables based on function bounds. More...
 
virtual VariableSet::iterator varsBegin ()
 First iterator for variables. More...
 
virtual VariableSet::iterator varsEnd ()
 Last iterator for variables. More...
 
virtual void write (std::ostream &out) const
 Display the nonlinear function. More...
 

Protected Member Functions

void clear_ ()
 Clear/reset all terms. Polynomial becomes 0.
 

Protected Attributes

double cb_
 Additional constant.
 
CGraphPtr cg_
 If the polynomial is constructed from a CGraph, we keep a pointer.
 
const double eTol_
 Tolerance.
 
MonomialVector terms_
 Each monomial term.
 
- Protected Attributes inherited from Minotaur::NonlinearFunction
VariableSet vars_
 A set of variables used in this function.
 

Detailed Description

PolynomialFunction represents functions of the form $\sum_jm_j$, where $m_j$ is a MonomialFunction.

Member Function Documentation

◆ add()

void PolynomialFunction::add ( const double  c)

Add a constant.

Add a monomial to this polynomial. The monomial is copied. The user can change the monomial later wihout affecting the polynomial. This function is dangerous because it operates on the raw pointer of the polynomial and not the shared pointer. The user must ensure that it is not null.

◆ cloneWithVars()

NonlinearFunctionPtr PolynomialFunction::cloneWithVars ( VariableConstIterator  vbeg,
int *  err 
) const
virtual

Make a clone using new variables.

Parameters
[in]vbegit points to the variable id 0. vbeg+k points to variable id k, where k>=0.
[out]errmust be nonzero if function wasn't cloned.

Implements Minotaur::NonlinearFunction.

◆ createCG()

void PolynomialFunction::createCG ( )

Create a cgraph representing this polynomial and save it as a private member. Useful for solving using native derivatives.

◆ eval()

double PolynomialFunction::eval ( const double *  x,
int *  error 
)
virtual

Evaluate the function at a given point x.

Parameters
[in]xThe size of the array x must exceed the highest index of the variables used in the function.
[out]*errorIt should be set a positive value if there is error encountered while evaluating. Leave undisturbed otherwise.
Returns
The value of function of x.

Implements Minotaur::NonlinearFunction.

◆ evalGradient()

void PolynomialFunction::evalGradient ( const double *  x,
double *  grad_f,
int *  error 
)
virtual

Evaluate and add gradient at a given point.

Parameters
[in]xThe size of the array x must exceed the highest index of the variables used in the function.
[out]grad_fThe values of grad_f are incremented with the gradient of this function at x. The array grad_f is dense.
[out]errorIt should be set a positive value if there is error encountered while evaluating. Leave undisturbed otherwise.

Implements Minotaur::NonlinearFunction.

◆ evalHessian()

void PolynomialFunction::evalHessian ( const double  mult,
const double *  x,
const LTHessStor stor,
double *  values,
int *  error 
)
virtual

Evaluate and add hessian at a given point.

Parameters
[in]multMultiplier for this objective/constraint function
[in]xThe point where we need the hessian.
[in]storThe Hessian storage information.
[out]valuesThe Hessian values to which we add Hessian of this function.
[out]errorWe set it to nonzero if any errors are encountered. Do not change it otherwise.

Implements Minotaur::NonlinearFunction.

◆ fillHessStor()

void PolynomialFunction::fillHessStor ( LTHessStor stor)
virtual

Fill sparsity of hessian into hessian storage.

Parameters
[in,out]storWe add variables into stor->cols

Implements Minotaur::NonlinearFunction.

◆ fillJac()

void PolynomialFunction::fillJac ( const double *  x,
double *  values,
int *  error 
)
virtual

Evaluate and add gradient at a given point to the jacobian.

Parameters
[in]xThe size of the array x must exceed the highest index of the variables used in the function.
[out]valuesThe values of jacobian are incremented with the gradient of this function at x. 'values' only contains nonzeros of jacobian. The indices (or offsets) where this nonlinear function should put in the values should be calculated in the prepJac function.
[out]errorIt should be set a zero value if there is error encountered while evaluating. Leave undisturbed otherwise.

Implements Minotaur::NonlinearFunction.

◆ finalHessStor()

void PolynomialFunction::finalHessStor ( const LTHessStor stor)
virtual

Finalize hessian preparation.

Parameters
[in]storcontains the sparsity pattern of hessian of lagrangian. The nonlinear function should save offsets or make other preparation to evaluate hessian.

Implements Minotaur::NonlinearFunction.

◆ getType()

FunctionType PolynomialFunction::getType ( ) const
virtual

Return type of function.

Reimplemented from Minotaur::NonlinearFunction.

◆ getVars()

void PolynomialFunction::getVars ( VariableSet *  vars)
virtual

Get variables used in this function.

Parameters
[in]varsA set of variable-pointers into which variables are to be inserted.

Implements Minotaur::NonlinearFunction.

◆ multiply()

void PolynomialFunction::multiply ( double  c)
virtual

Multiply with c, a constant.

Implements Minotaur::NonlinearFunction.

◆ prepJac()

void PolynomialFunction::prepJac ( VarSetConstIter  vbeg,
VarSetConstIter  vend 
)
virtual

Prepare for evaluating sparse jacobian.

All the variables that are in this function can occur in one or more of linear, quadratic and nonlinear functions. All variables that occur in the whole function can be accessed by iterating between vbeg and vend. This function is used to find the offset for variables that occur in the nonlinear function.

Implements Minotaur::NonlinearFunction.

◆ removeLinear()

void PolynomialFunction::removeLinear ( LinearFunctionPtr  lf)

If the polynomial has a linear function, add it to 'lf', and remove it from the polynomial. If lf is empty and polynomial has linear terms, new space is allocated.

◆ removeQuadratic()

void PolynomialFunction::removeQuadratic ( QuadraticFunctionPtr  qf)

If the polynomial has a quadratic function, add it to 'qf', and remove it from the polynomial. If qf is NULL and polynomial has quadratic terms, new space is allocated.

◆ write()

void PolynomialFunction::write ( std::ostream &  out) const
virtual

Display.

Reimplemented from Minotaur::NonlinearFunction.


The documentation for this class was generated from the following files:

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