Public Types | Public Member Functions | List of all members
corbo::OptimizationProblemInterface Class Referenceabstract

Generic interface for optimization problem definitions. More...

#include <optimization_problem_interface.h>

Inheritance diagram for corbo::OptimizationProblemInterface:
Inheritance graph
[legend]

Public Types

using Ptr = std::shared_ptr< OptimizationProblemInterface >
 
using UPtr = std::unique_ptr< OptimizationProblemInterface >
 

Public Member Functions

virtual void clear ()
 
virtual ~OptimizationProblemInterface ()
 
Specify the dimension of the optimization problem


virtual int getNonLsqObjectiveDimension ()=0
 Get dimension of the objective (should be zero or one) More...
 
virtual int getLsqObjectiveDimension ()=0
 Total dimension of least-squares objective function terms. More...
 
virtual int getObjectiveDimension ()=0
 Get dimension of the objective (should be zero or one, includes Lsq objectives if present) More...
 
virtual int getEqualityDimension ()=0
 Total dimension of equality constraints. More...
 
virtual int getInequalityDimension ()=0
 Total dimension of general inequality constraints. More...
 
virtual int getParameterDimension ()=0
 Effictive dimension of the optimization parameter set (changeable, non-fixed part) More...
 
Generic interface to interact with the underlying parameter/variables representation


virtual void applyIncrement (const Eigen::Ref< const Eigen::VectorXd > &increment)
 Apply increment to the current parameter set. More...
 
virtual void applyIncrement (int idx, double increment)
 Apply increment to the current parameter set (single element overload) More...
 
virtual double getParameterValue (int idx)=0
 Return specific value of the parameter vector. More...
 
virtual void setParameterValue (int idx, double x)=0
 Set specific value of the parameter vector. More...
 
virtual void getParameterVector (Eigen::Ref< Eigen::VectorXd > x)
 Return deep copy of the complete parameter vector. More...
 
virtual void setParameterVector (const Eigen::Ref< const Eigen::VectorXd > &x)
 Set complete parameter vector. More...
 
virtual void backupParameters ()=0
 Restore parameter set from the last backup and keep backup if desired. More...
 
virtual void restoreBackupParameters (bool keep_backup)=0
 Discard last backup (or all) More...
 
virtual void discardBackupParameters (bool all=false)=0
 
Specify properties of the optimization problem


virtual bool isLeastSquaresProblem () const =0
 Check if the underlying problem is defined in the least squares form. More...
 
Access bounds


virtual double getLowerBound (int idx)=0
 Return specific lower bound value of a parameter. More...
 
virtual double getUpperBound (int idx)=0
 Return specific upper bound of a parameter. More...
 
virtual void setLowerBound (int idx, double lb)=0
 Set specific lower bound of a parameter. More...
 
virtual void setUpperBound (int idx, double ub)=0
 Set specific upper bound of a parameter. More...
 
virtual void setBounds (const Eigen::Ref< const Eigen::VectorXd > &lb, const Eigen::Ref< const Eigen::VectorXd > &ub)
 Set lower and upper bound vector. More...
 
virtual void getBounds (Eigen::Ref< Eigen::VectorXd > lb, Eigen::Ref< Eigen::VectorXd > ub)
 Get lower and upper bound vector. More...
 
Specify main equations of the optimization problem


virtual void computeValuesLsqObjective (Eigen::Ref< Eigen::VectorXd > values)=0
 Compute the objective function values f(x) for the current parameter set. More...
 
virtual double computeValueNonLsqObjective ()=0
 
virtual double computeValueObjective ()
 
virtual void computeValuesEquality (Eigen::Ref< Eigen::VectorXd > values)=0
 Compute the equality constraint values ceq(x) for the current parameter set. More...
 
virtual void computeValuesInequality (Eigen::Ref< Eigen::VectorXd > values)=0
 Compute the inequality constraint values c(x) for the current parameter set. More...
 
virtual void computeValues (double &non_lsq_obj_value, Eigen::Ref< Eigen::VectorXd > lsq_obj_values, Eigen::Ref< Eigen::VectorXd > eq_values, Eigen::Ref< Eigen::VectorXd > ineq_values)
 
Methods for dealing with bounds


virtual int finiteCombinedBoundsDimension ()
 Dimension of the set of finite bounds (combined such that each ub and lb component define a single dimension) More...
 
virtual int finiteBoundsDimension ()
 Dimension of the set of finite bounds (individual bounds ub and lb) More...
 
virtual void computeValuesActiveInequality (Eigen::Ref< Eigen::VectorXd > values, double weight=1.0)
 Compute the values of the active inequality constraints (elementwise max(0, c(x))) More...
 
virtual void computeDistanceFiniteCombinedBounds (Eigen::Ref< Eigen::VectorXd > values)
 Compute the distance to finite bound values (combined lower and upper) More...
 
virtual void computeLowerAndUpperBoundDiff (Eigen::Ref< Eigen::VectorXd > lb_minus_x, Eigen::Ref< Eigen::VectorXd > ub_minus_x)
 Compute the distance between parameters and bounds. More...
 
virtual void getParametersAndBoundsFinite (Eigen::Ref< Eigen::VectorXd > lb_finite_bounds, Eigen::Ref< Eigen::VectorXd > ub_finite_bounds, Eigen::Ref< Eigen::VectorXd > x_finite_bounds)
 Return bound and parameter vectors only for finite boudns. More...
 
virtual void computeGradientObjective (Eigen::Ref< Eigen::VectorXd > gradient)
 
virtual void computeGradientNonLsqObjective (Eigen::Ref< Eigen::VectorXd > gradient)
 
virtual void computeDenseJacobianLsqObjective (Eigen::Ref< Eigen::MatrixXd > jacobian, const double *multipliers=nullptr)
 Compute the objective Jacobian Jf(x) for the current parameter set. More...
 
virtual int computeSparseJacobianLsqObjectiveNNZ ()
 
virtual void computeSparseJacobianLsqObjectiveStructure (Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col)
 
virtual void computeSparseJacobianLsqObjectiveValues (Eigen::Ref< Eigen::VectorXd > values, const double *multipliers=nullptr)
 
virtual void computeSparseJacobianLsqObjective (Eigen::SparseMatrix< double > &jacobian, const double *multipliers=nullptr)
 
virtual void computeDenseJacobianEqualities (Eigen::Ref< Eigen::MatrixXd > jacobian, const double *multipliers=nullptr)
 Compute the equality constraint Jacobian Jceq(x) for the current parameter set. More...
 
virtual int computeSparseJacobianEqualitiesNNZ ()
 
virtual void computeSparseJacobianEqualitiesStructure (Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col)
 
virtual void computeSparseJacobianEqualitiesValues (Eigen::Ref< Eigen::VectorXd > values, const double *multipliers=nullptr)
 
virtual void computeSparseJacobianEqualities (Eigen::SparseMatrix< double > &jacobian, const double *multipliers=nullptr)
 
virtual void computeDenseJacobianInequalities (Eigen::Ref< Eigen::MatrixXd > jacobian, const double *multipliers=nullptr)
 Compute the inequality constraint Jacobian Jc(x) for the current parameter set. More...
 
virtual int computeSparseJacobianInequalitiesNNZ ()
 
virtual void computeSparseJacobianInequalitiesStructure (Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col)
 
virtual void computeSparseJacobianInequalitiesValues (Eigen::Ref< Eigen::VectorXd > values, const double *multipliers=nullptr)
 
virtual void computeSparseJacobianInequalities (Eigen::SparseMatrix< double > &jacobian, const double *multipliers=nullptr)
 
virtual void computeDenseJacobianActiveInequalities (Eigen::Ref< Eigen::MatrixXd > jacobian, double weight=1.0)
 Compute the Jacobian Jc(x) with non-zeros for active constraints c(x)>= 0 and zeros for inactive ones. More...
 
virtual void computeSparseJacobianActiveInequalitiesValues (Eigen::Ref< Eigen::VectorXd > values, double weight=1.0)
 
virtual void computeSparseJacobianActiveInequalities (Eigen::SparseMatrix< double > &jacobian, double weight=1.0)
 
virtual void computeDenseJacobianFiniteCombinedBounds (Eigen::Ref< Eigen::MatrixXd > jacobian, double weight=1.0)
 Compute the Jacobian for finite combined bounds. More...
 
virtual int computeSparseJacobianFiniteCombinedBoundsNNZ ()
 
virtual void computeSparseJacobianFiniteCombinedBoundsStructure (Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col)
 
virtual void computeSparseJacobianFiniteCombinedBoundsValues (Eigen::Ref< Eigen::VectorXd > values, double weight=1.0)
 
virtual void computeSparseJacobianFiniteCombinedBounds (Eigen::SparseMatrix< double > &jacobian, double weight=1.0)
 
virtual void computeDenseJacobianFiniteCombinedBoundsIdentity (Eigen::Ref< Eigen::MatrixXd > jacobian)
 Compute the Jacobian for finite combined bounds. More...
 
virtual void computeDenseJacobians (Eigen::Ref< Eigen::VectorXd > gradient_non_lsq_obj, Eigen::Ref< Eigen::MatrixXd > jacobian_lsq_obj, Eigen::Ref< Eigen::MatrixXd > jacobian_eq, Eigen::Ref< Eigen::MatrixXd > jacobian_ineq, const double *multipliers_lsq_obj=nullptr, const double *multipliers_eq=nullptr, const double *multipliers_ineq=nullptr, bool active_ineq=false, double active_ineq_weight=1.0)
 Compute the objective and constraint Jacobians at once. More...
 
virtual void computeSparseJacobiansNNZ (int &nnz_lsq_obj, int &nnz_eq, int &nnz_ineq)
 
virtual void computeSparseJacobiansStructure (Eigen::Ref< Eigen::VectorXi > i_row_obj, Eigen::Ref< Eigen::VectorXi > j_col_obj, Eigen::Ref< Eigen::VectorXi > i_row_eq, Eigen::Ref< Eigen::VectorXi > j_col_eq, Eigen::Ref< Eigen::VectorXi > i_row_ineq, Eigen::Ref< Eigen::VectorXi > j_col_ineq)
 
virtual void computeSparseJacobiansValues (Eigen::Ref< Eigen::VectorXd > values_obj, Eigen::Ref< Eigen::VectorXd > values_eq, Eigen::Ref< Eigen::VectorXd > values_ineq, const double *multipliers_obj=nullptr, const double *multipliers_eq=nullptr, const double *multipliers_ineq=nullptr, bool active_ineq=false, double active_ineq_weight=1.0)
 
virtual void computeSparseJacobians (Eigen::SparseMatrix< double > &jacobian_lsq_obj, Eigen::SparseMatrix< double > &jacobian_eq, Eigen::SparseMatrix< double > &jacobian_ineq, const double *multipliers_lsq_obj=nullptr, const double *multipliers_eq=nullptr, const double *multipliers_ineq=nullptr, bool active_ineq=false, double active_ineq_weight=1.0)
 
virtual void computeCombinedSparseJacobian (Eigen::SparseMatrix< double > &jacobian, bool objective_lsq, bool equality, bool inequality, bool finite_combined_bounds, bool active_ineq=false, double weight_eq=1.0, double weight_ineq=1.0, double weight_bounds=1.0, const Eigen::VectorXd *values=nullptr, const Eigen::VectorXi *col_nnz=nullptr)
 
virtual int computeCombinedSparseJacobiansNNZ (bool objective_lsq=true, bool equality=true, bool inequality=true)
 
virtual void computeCombinedSparseJacobiansStructure (Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col, bool objective_lsq=true, bool equality=true, bool inequality=true)
 
virtual void computeCombinedSparseJacobiansValues (Eigen::Ref< Eigen::VectorXd > values, bool objective_lsq=true, bool equality=true, bool inequality=true, const double *multipliers_obj=nullptr, const double *multipliers_eq=nullptr, const double *multipliers_ineq=nullptr)
 
virtual void computeGradientObjectiveAndCombinedSparseJacobiansValues (Eigen::Ref< Eigen::VectorXd > gradient, Eigen::Ref< Eigen::VectorXd > jac_values, bool equality=true, bool inequality=true, const double *multipliers_eq=nullptr, const double *multipliers_ineq=nullptr)
 
virtual void computeDenseHessianObjective (const Eigen::Ref< const Eigen::MatrixXd > &jacobian, Eigen::Ref< Eigen::MatrixXd > hessian, const double *multipliers=nullptr, bool jacob_scaled=true)
 Compute the objective Hessian Hf(x) for the current parameter set. More...
 
virtual void computeDenseHessianObjective (Eigen::Ref< Eigen::MatrixXd > hessian, double multiplier=1.0)
 
virtual int computeSparseHessianObjectiveNNZ (bool lower_part_only=false)
 
virtual void computeSparseHessianObjectiveStructure (Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col, bool lower_part_only=false)
 
virtual void computeSparseHessianObjectiveValues (Eigen::Ref< Eigen::VectorXd > values, double multiplier=1.0, bool lower_part_only=false)
 
virtual void computeSparseHessianObjective (Eigen::SparseMatrix< double > &hessian, double multiplier=1.0)
 
virtual void computeSparseHessianObjectiveLL (Eigen::SparseMatrix< double, Eigen::ColMajor, long long > &H, const Eigen::VectorXi *col_nnz=nullptr, bool upper_part_only=false)
 
virtual void computeSparseHessianObjectiveNNZperCol (Eigen::Ref< Eigen::VectorXi > col_nnz, bool upper_part_only=false)
 
virtual void computeDenseHessianEqualities (Eigen::Ref< Eigen::MatrixXd > hessian, const double *multipliers=nullptr)
 
virtual int computeSparseHessianEqualitiesNNZ (bool lower_part_only=false)
 
virtual void computeSparseHessianEqualitiesStructure (Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col, bool lower_part_only=false)
 
virtual void computeSparseHessianEqualitiesValues (Eigen::Ref< Eigen::VectorXd > values, const double *multipliers=nullptr, bool lower_part_only=false)
 
virtual void computeSparseHessianEqualities (Eigen::SparseMatrix< double > &hessian, const double *multipliers=nullptr)
 
virtual void computeDenseHessianInequalities (Eigen::Ref< Eigen::MatrixXd > hessian, const double *multipliers=nullptr)
 
virtual int computeSparseHessianInequalitiesNNZ (bool lower_part_only=false)
 
virtual void computeSparseHessianInequalitiesStructure (Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col, bool lower_part_only=false)
 
virtual void computeSparseHessianInequalitiesValues (Eigen::Ref< Eigen::VectorXd > values, const double *multipliers=nullptr, bool lower_part_only=false)
 
virtual void computeSparseHessianInequalities (Eigen::SparseMatrix< double > &hessian, const double *multipliers=nullptr)
 
virtual void computeDenseHessians (Eigen::Ref< Eigen::MatrixXd > hessian_obj, Eigen::Ref< Eigen::MatrixXd > hessian_eq, Eigen::Ref< Eigen::MatrixXd > hessian_ineq, double multiplier_obj=1.0, const double *multipliers_eq=nullptr, const double *multipliers_ineq=nullptr)
 
virtual void computeSparseHessians (Eigen::SparseMatrix< double > &hessian_obj, Eigen::SparseMatrix< double > &hessian_eq, Eigen::SparseMatrix< double > &hessian_ineq, double multiplier_obj=1.0, const double *multipliers_eq=nullptr, const double *multipliers_ineq=nullptr)
 
virtual void computeSparseHessiansNNZ (int &nnz_obj, int &nnz_eq, int &nnz_ineq, bool lower_part_only=false)
 
virtual void computeSparseHessiansStructure (Eigen::Ref< Eigen::VectorXi > i_row_obj, Eigen::Ref< Eigen::VectorXi > j_col_obj, Eigen::Ref< Eigen::VectorXi > i_row_eq, Eigen::Ref< Eigen::VectorXi > j_col_eq, Eigen::Ref< Eigen::VectorXi > i_row_ineq, Eigen::Ref< Eigen::VectorXi > j_col_ineq, bool lower_part_only=false)
 
virtual void computeSparseHessiansValues (Eigen::Ref< Eigen::VectorXd > values_obj, Eigen::Ref< Eigen::VectorXd > values_eq, Eigen::Ref< Eigen::VectorXd > values_ineq, double multiplier_obj=1.0, const double *multipliers_eq=nullptr, const double *multipliers_ineq=nullptr, bool lower_part_only=false)
 
virtual void computeSparseHessianLagrangian (Eigen::SparseMatrix< double, Eigen::ColMajor, long long > &H, const double *multipliers_eq, const double *multipliers_ineq, const Eigen::VectorXi *col_nnz=nullptr, bool upper_part_only=false)
 Compute the hessian of the lagrangian L(x) = f(x) + lambda1 * c(x) + lambda2 * ceq(x) More...
 
virtual void computeSparseHessianLagrangianNNZperCol (Eigen::Ref< Eigen::VectorXi > col_nnz, bool upper_part_only)
 

Methods specialized for QP forms


bool _warn_if_not_specialized = true
 
virtual void computeSparseJacobianTwoSideBoundedLinearForm (Eigen::SparseMatrix< double, Eigen::ColMajor, long long > &A, bool include_finite_bounds, const Eigen::VectorXi *col_nnz=nullptr)
 Compute the jacobian A for the linear form lbA <= A x <= lbB. More...
 
virtual void computeSparseJacobianTwoSideBoundedLinearFormNNZPerColumn (Eigen::Ref< Eigen::VectorXi > col_nnz, bool include_finite_bounds)
 
virtual int computeSparseJacobianTwoSideBoundedLinearFormNNZ (bool include_finite_bounds)
 
virtual void computeSparseJacobianTwoSideBoundedLinearFormStructure (Eigen::Ref< Eigen::VectorXi > i_row, Eigen::Ref< Eigen::VectorXi > j_col, bool include_finite_bounds)
 
virtual void computeSparseJacobianTwoSideBoundedLinearFormValues (Eigen::Ref< Eigen::VectorXd > values, bool include_finite_bounds)
 
virtual void computeSparseJacobianTwoSideBoundedLinearFormAndHessianLagrangian (Eigen::SparseMatrix< double, Eigen::ColMajor, long long > &H, const double *multipliers_eq, const double *multipliers_ineq, Eigen::SparseMatrix< double, Eigen::ColMajor, long long > &A, bool include_finite_bounds, const Eigen::VectorXi *col_nnz_H=nullptr, const Eigen::VectorXi *col_nnz_A=nullptr, bool upper_part_only_H=false)
 Compute the Jacobian and Hessian of the lagrangian. More...
 
virtual void computeBoundsForTwoSideBoundedLinearForm (Eigen::Ref< Eigen::VectorXd > lbA, Eigen::Ref< Eigen::VectorXd > ubA, bool include_finite_bounds)
 Compute lower and upper bounds lbA and ubA for the linear form lbA <= A x <= ubA. More...
 
virtual void computeSparseJacobianTwoSideBoundedLinearFormAndHessianObjective (Eigen::SparseMatrix< double, Eigen::ColMajor, long long > &H, Eigen::SparseMatrix< double, Eigen::ColMajor, long long > &A, bool include_finite_bounds, const Eigen::VectorXi *col_nnz_H, const Eigen::VectorXi *col_nnz_A, bool upper_part_only_H)
 
virtual bool checkIfAllUnfixedParam (std::function< bool(double, int)> fun)
 Check if a function taking the parameter value and unfixed-idx is true for all unfixed parameter values. More...
 

Detailed Description

Generic interface for optimization problem definitions.

This class can be used to generically define optimization problems with objectives, equality constraints, inequality constraints, box constraints and their current parameter state.

\[ \min f(x), \ f : \mathbb{R}^n \to \mathbb{R}^m \\ \text{subject to:} \\ ceq(x) = 0 \\ c(x) < 0 \\ lb < x < ub \]

First order and second order derivatives can be provided but their actual usage depends on the SolverInterface back-end which solves the optimization problem. Some solvers may require the implementation of those methods.

Solvers determine a parameter increment in each of their iterations so this class provides a method applyIncrement() to modify the underlying optimization parameter set. In order to convinentially store and restore the current parameter set from the solver backend side, appropriate backup methods must be provided by subclasses.

See also
SolverInterface
Author
Christoph Rösmann (chris.nosp@m.toph.nosp@m..roes.nosp@m.mann.nosp@m.@tu-d.nosp@m.ortm.nosp@m.und.d.nosp@m.e)

Definition at line 92 of file optimization_problem_interface.h.

Member Typedef Documentation

◆ Ptr

Definition at line 117 of file optimization_problem_interface.h.

◆ UPtr

Definition at line 118 of file optimization_problem_interface.h.

Constructor & Destructor Documentation

◆ ~OptimizationProblemInterface()

virtual corbo::OptimizationProblemInterface::~OptimizationProblemInterface ( )
inlinevirtual

Definition at line 120 of file optimization_problem_interface.h.

Member Function Documentation

◆ applyIncrement() [1/2]

void corbo::OptimizationProblemInterface::applyIncrement ( const Eigen::Ref< const Eigen::VectorXd > &  increment)
virtual

Apply increment to the current parameter set.

Usually solvers determine a new step/increment $ x += \Delta x $ in each iteration. This method applies the parameter update.

Remarks
Make sure to update only non-fixed parameters according to parameterDimension().
It is highly recommended to override this method for particular problems in order to speed up parameter updates
Parameters
[in]incrementParameter update [parameterDimension() x 1]

Reimplemented in corbo::BaseHyperGraphOptimizationProblem, and corbo::SimpleOptimizationProblem.

Definition at line 78 of file optimization_problem_interface.cpp.

◆ applyIncrement() [2/2]

void corbo::OptimizationProblemInterface::applyIncrement ( int  idx,
double  increment 
)
virtual

Apply increment to the current parameter set (single element overload)

Parameters
[in]idxValue index according vector size [parameterDimension() x 1]
[in]incrementParameter update [parameterDimension() x 1]

Reimplemented in corbo::BaseHyperGraphOptimizationProblem, and corbo::SimpleOptimizationProblem.

Definition at line 85 of file optimization_problem_interface.cpp.

◆ backupParameters()

virtual void corbo::OptimizationProblemInterface::backupParameters ( )
pure virtual

Restore parameter set from the last backup and keep backup if desired.

Implemented in corbo::BaseHyperGraphOptimizationProblem, and corbo::SimpleOptimizationProblem.

◆ checkIfAllUnfixedParam()

bool corbo::OptimizationProblemInterface::checkIfAllUnfixedParam ( std::function< bool(double, int)>  fun)
virtual

Check if a function taking the parameter value and unfixed-idx is true for all unfixed parameter values.

Reimplemented in corbo::BaseHyperGraphOptimizationProblem.

Definition at line 1689 of file optimization_problem_interface.cpp.

◆ clear()

virtual void corbo::OptimizationProblemInterface::clear ( )
inlinevirtual

Reimplemented in corbo::BaseHyperGraphOptimizationProblem.

Definition at line 122 of file optimization_problem_interface.h.

◆ computeBoundsForTwoSideBoundedLinearForm()

void corbo::OptimizationProblemInterface::computeBoundsForTwoSideBoundedLinearForm ( Eigen::Ref< Eigen::VectorXd >  lbA,
Eigen::Ref< Eigen::VectorXd >  ubA,
bool  include_finite_bounds 
)
virtual

Compute lower and upper bounds lbA and ubA for the linear form lbA <= A x <= ubA.

Especially some QP solvers require either

 lbA <= A x<= ubA

or

lbA <= A x <= ubA lb <= x <= ub

The first formulatin includes bounds and hence the bottom rows of A are the identity. However, in case lb and ub are infinity, A might have obsolete rows.

If parameter include_bounds is true: only finite bounds are considered and vectors lbA and ubA are of size [getEqualityDimension() + getInequalityDimension() + finiteCombinedBounds() x 1].

If parameter include_bounds is false: the vectors are of size [getEqualityDimension() + getInequalityDimension() x 1].

Parameters
[out]ACombined jacobian (see description above)
[in]include_finite_boundsSpecify whether bounds should be included in A (check dimension of A as descirbed above)

Definition at line 1163 of file optimization_problem_interface.cpp.

◆ computeCombinedSparseJacobian()

void corbo::OptimizationProblemInterface::computeCombinedSparseJacobian ( Eigen::SparseMatrix< double > &  jacobian,
bool  objective_lsq,
bool  equality,
bool  inequality,
bool  finite_combined_bounds,
bool  active_ineq = false,
double  weight_eq = 1.0,
double  weight_ineq = 1.0,
double  weight_bounds = 1.0,
const Eigen::VectorXd *  values = nullptr,
const Eigen::VectorXi *  col_nnz = nullptr 
)
virtual

◆ computeCombinedSparseJacobiansNNZ()

int corbo::OptimizationProblemInterface::computeCombinedSparseJacobiansNNZ ( bool  objective_lsq = true,
bool  equality = true,
bool  inequality = true 
)
virtual

◆ computeCombinedSparseJacobiansStructure()

void corbo::OptimizationProblemInterface::computeCombinedSparseJacobiansStructure ( Eigen::Ref< Eigen::VectorXi >  i_row,
Eigen::Ref< Eigen::VectorXi >  j_col,
bool  objective_lsq = true,
bool  equality = true,
bool  inequality = true 
)
virtual

◆ computeCombinedSparseJacobiansValues()

void corbo::OptimizationProblemInterface::computeCombinedSparseJacobiansValues ( Eigen::Ref< Eigen::VectorXd >  values,
bool  objective_lsq = true,
bool  equality = true,
bool  inequality = true,
const double *  multipliers_obj = nullptr,
const double *  multipliers_eq = nullptr,
const double *  multipliers_ineq = nullptr 
)
virtual

◆ computeDenseHessianEqualities()

void corbo::OptimizationProblemInterface::computeDenseHessianEqualities ( Eigen::Ref< Eigen::MatrixXd >  hessian,
const double *  multipliers = nullptr 
)
virtual

Definition at line 1346 of file optimization_problem_interface.cpp.

◆ computeDenseHessianInequalities()

void corbo::OptimizationProblemInterface::computeDenseHessianInequalities ( Eigen::Ref< Eigen::MatrixXd >  hessian,
const double *  multipliers = nullptr 
)
virtual

Definition at line 1423 of file optimization_problem_interface.cpp.

◆ computeDenseHessianObjective() [1/2]

void corbo::OptimizationProblemInterface::computeDenseHessianObjective ( const Eigen::Ref< const Eigen::MatrixXd > &  jacobian,
Eigen::Ref< Eigen::MatrixXd >  hessian,
const double *  multipliers = nullptr,
bool  jacob_scaled = true 
)
virtual

Compute the objective Hessian Hf(x) for the current parameter set.

Remarks
In case objectiveDimension() > 1: all individual hessians are summed up.
Parameters
[in]jacobianJacobian matrix which is used for the Hessian computation [objectiveDimension() x parameterDimension()]
[out]hessianThe resulting Hessian matrix [parameterDimension() x parameterDimension()]. Warning: The matrix must be pre-allocated, the resulting hessian is ADDED to the previous values in hessian, e.g. hessian += dense_hessian_objective.
[in]multipliersOptionally provide a vector of multipliers to scale each cost function term [objectiveDimension() x 1]
[in]jacob_scaledIf multiplier is valid and selected, specify whether the jacobian is already scaled with multiplier.

Definition at line 1207 of file optimization_problem_interface.cpp.

◆ computeDenseHessianObjective() [2/2]

void corbo::OptimizationProblemInterface::computeDenseHessianObjective ( Eigen::Ref< Eigen::MatrixXd >  hessian,
double  multiplier = 1.0 
)
virtual

◆ computeDenseHessians()

void corbo::OptimizationProblemInterface::computeDenseHessians ( Eigen::Ref< Eigen::MatrixXd >  hessian_obj,
Eigen::Ref< Eigen::MatrixXd >  hessian_eq,
Eigen::Ref< Eigen::MatrixXd >  hessian_ineq,
double  multiplier_obj = 1.0,
const double *  multipliers_eq = nullptr,
const double *  multipliers_ineq = nullptr 
)
virtual

Definition at line 1520 of file optimization_problem_interface.cpp.

◆ computeDenseJacobianActiveInequalities()

void corbo::OptimizationProblemInterface::computeDenseJacobianActiveInequalities ( Eigen::Ref< Eigen::MatrixXd >  jacobian,
double  weight = 1.0 
)
virtual

Compute the Jacobian Jc(x) with non-zeros for active constraints c(x)>= 0 and zeros for inactive ones.

Parameters
[out]jacobianThe resulting Jacobian matrix [inequalityDimension() x parameterDimension()]. Warning: the matrix must be pre-allocated with ZEROS!
[in]weightOptionally provide a weight factor

Reimplemented in corbo::HyperGraphOptimizationProblemVertexBased, and corbo::HyperGraphOptimizationProblemEdgeBased.

Definition at line 461 of file optimization_problem_interface.cpp.

◆ computeDenseJacobianEqualities()

void corbo::OptimizationProblemInterface::computeDenseJacobianEqualities ( Eigen::Ref< Eigen::MatrixXd >  jacobian,
const double *  multipliers = nullptr 
)
virtual

Compute the equality constraint Jacobian Jceq(x) for the current parameter set.

Parameters
[out]jacobianThe resulting Jacobian matrix [equalityDimension() x parameterDimension()]. Warning: the matrix must be pre-allocated with ZEROS!
[in]multipliersOptionally provide a vector of multipliers to scale each cost function term [equalityDimension() x 1]

Reimplemented in corbo::HyperGraphOptimizationProblemVertexBased, and corbo::HyperGraphOptimizationProblemEdgeBased.

Definition at line 315 of file optimization_problem_interface.cpp.

◆ computeDenseJacobianFiniteCombinedBounds()

void corbo::OptimizationProblemInterface::computeDenseJacobianFiniteCombinedBounds ( Eigen::Ref< Eigen::MatrixXd >  jacobian,
double  weight = 1.0 
)
virtual

Compute the Jacobian for finite combined bounds.

refer to computeDistanceFiniteCombinedBounds()

Parameters
[out]jacobianThe resulting Jacobian matrix [finiteCombinedBoundsDimension() x parameterDimension()]. Warning: the matrix must be pre-allocated with ZEROS!
[in]weightOptionally provide a weight factor

Reimplemented in corbo::BaseHyperGraphOptimizationProblem.

Definition at line 588 of file optimization_problem_interface.cpp.

◆ computeDenseJacobianFiniteCombinedBoundsIdentity()

void corbo::OptimizationProblemInterface::computeDenseJacobianFiniteCombinedBoundsIdentity ( Eigen::Ref< Eigen::MatrixXd >  jacobian)
virtual

Compute the Jacobian for finite combined bounds.

refer to getParametersAndBoundsFinite() The resulting matrix is just the identity matrix with omitted rows for non-finite bounds.

Parameters
[out]jacobianThe resulting Jacobian matrix [finiteCombinedBoundsDimension() x parameterDimension()].

Reimplemented in corbo::BaseHyperGraphOptimizationProblem.

Definition at line 704 of file optimization_problem_interface.cpp.

◆ computeDenseJacobianInequalities()

void corbo::OptimizationProblemInterface::computeDenseJacobianInequalities ( Eigen::Ref< Eigen::MatrixXd >  jacobian,
const double *  multipliers = nullptr 
)
virtual

Compute the inequality constraint Jacobian Jc(x) for the current parameter set.

Parameters
[out]jacobianThe resulting Jacobian matrix [inequalityDimension() x parameterDimension()]. Warning: the matrix must be pre-allocated with ZEROS!
[in]multipliersOptionally provide a vector of multipliers to scale each cost function term [inequalityDimension() x 1]

Reimplemented in corbo::HyperGraphOptimizationProblemVertexBased, and corbo::HyperGraphOptimizationProblemEdgeBased.

Definition at line 388 of file optimization_problem_interface.cpp.

◆ computeDenseJacobianLsqObjective()

void corbo::OptimizationProblemInterface::computeDenseJacobianLsqObjective ( Eigen::Ref< Eigen::MatrixXd >  jacobian,
const double *  multipliers = nullptr 
)
virtual

Compute the objective Jacobian Jf(x) for the current parameter set.

Parameters
[out]jacobianThe resulting Jacobian matrix [objectiveDimension() x parameterDimension()]. Warning: the matrix must be pre-allocated with ZEROS!
[in]multipliersOptionally provide a vector of multipliers to scale each cost function term [objectiveDimension() x 1]

Reimplemented in corbo::HyperGraphOptimizationProblemVertexBased, and corbo::HyperGraphOptimizationProblemEdgeBased.

Definition at line 239 of file optimization_problem_interface.cpp.

◆ computeDenseJacobians()

void corbo::OptimizationProblemInterface::computeDenseJacobians ( Eigen::Ref< Eigen::VectorXd >  gradient_non_lsq_obj,
Eigen::Ref< Eigen::MatrixXd >  jacobian_lsq_obj,
Eigen::Ref< Eigen::MatrixXd >  jacobian_eq,
Eigen::Ref< Eigen::MatrixXd >  jacobian_ineq,
const double *  multipliers_lsq_obj = nullptr,
const double *  multipliers_eq = nullptr,
const double *  multipliers_ineq = nullptr,
bool  active_ineq = false,
double  active_ineq_weight = 1.0 
)
virtual

Compute the objective and constraint Jacobians at once.

Use this method to speed up Jacobian computation if possible. The default implementation just calls the individual Jacobian computations.

Remarks
This method does not compute Jacobians for bounds due to their simplicity, compute them manually.
Parameters
[out]jacobian_objThe resulting objective Jacobian matrix [objectiveDimension() x parameterDimension()]. Warning: the matrix must be pre-allocated with ZEROS!
[out]jacobian_eqThe resulting equality constraint Jacobian matrix [equalityDimension() x parameterDimension()]. Warning: the matrix must be pre-allocated with ZEROS!
[out]jacobian_ineqThe resulting inequality constraint Jacobian matrix [inequalityDimension() x parameterDimension()]. Warning: the matrix must be pre-allocated with ZEROS!
[in]multipliersOptionally provide a vector of multipliers to scale each cost function term [objectiveDimension() + equalityDimension() + inequalityDimension() x 1]

Reimplemented in corbo::HyperGraphOptimizationProblemEdgeBased.

Definition at line 511 of file optimization_problem_interface.cpp.

◆ computeDistanceFiniteCombinedBounds()

void corbo::OptimizationProblemInterface::computeDistanceFiniteCombinedBounds ( Eigen::Ref< Eigen::VectorXd >  values)
virtual

Compute the distance to finite bound values (combined lower and upper)

The distance is given as (lb-x) if (x<lb) and (x-ub) if (x>ub), otherwise 0.

Warning
This dimension of the resulting vector corresponds to finite bounds only, hence the bound bust be finite and the value is non-zero if x < lb || x > ub, this method should be used according with computeFiniteCombinedBoundsJacobian().
Parameters
[out]valuesThe resulting value vector [finiteCombinedBoundsDimension() x 1]. Warning: the size must be pre-allocated!

Reimplemented in corbo::BaseHyperGraphOptimizationProblem.

Definition at line 154 of file optimization_problem_interface.cpp.

◆ computeGradientNonLsqObjective()

void corbo::OptimizationProblemInterface::computeGradientNonLsqObjective ( Eigen::Ref< Eigen::VectorXd >  gradient)
virtual

◆ computeGradientObjective()

void corbo::OptimizationProblemInterface::computeGradientObjective ( Eigen::Ref< Eigen::VectorXd >  gradient)
virtual

◆ computeGradientObjectiveAndCombinedSparseJacobiansValues()

void corbo::OptimizationProblemInterface::computeGradientObjectiveAndCombinedSparseJacobiansValues ( Eigen::Ref< Eigen::VectorXd >  gradient,
Eigen::Ref< Eigen::VectorXd >  jac_values,
bool  equality = true,
bool  inequality = true,
const double *  multipliers_eq = nullptr,
const double *  multipliers_ineq = nullptr 
)
virtual

◆ computeLowerAndUpperBoundDiff()

void corbo::OptimizationProblemInterface::computeLowerAndUpperBoundDiff ( Eigen::Ref< Eigen::VectorXd >  lb_minus_x,
Eigen::Ref< Eigen::VectorXd >  ub_minus_x 
)
virtual

Compute the distance between parameters and bounds.

This method might be used for sqp bound computation in the form

 lb-x < dx < ub-x
Warning
This dimension of the resulting vector corresponds to finite bounds only, hence the bound bust be finite and the value is non-zero if x < lb || x > ub.
Parameters
[out]lb_minus_xThe resulting value vector [finiteCombinedBoundsDimension() x 1]; Warning: the size must be pre-allocated!
[out]ub_minus_xThe resulting value vector [finiteCombinedBoundsDimension() x 1]; Warning: the size must be pre-allocated!

Reimplemented in corbo::BaseHyperGraphOptimizationProblem.

Definition at line 179 of file optimization_problem_interface.cpp.

◆ computeSparseHessianEqualities()

void corbo::OptimizationProblemInterface::computeSparseHessianEqualities ( Eigen::SparseMatrix< double > &  hessian,
const double *  multipliers = nullptr 
)
virtual

Definition at line 1413 of file optimization_problem_interface.cpp.

◆ computeSparseHessianEqualitiesNNZ()

int corbo::OptimizationProblemInterface::computeSparseHessianEqualitiesNNZ ( bool  lower_part_only = false)
virtual

◆ computeSparseHessianEqualitiesStructure()

void corbo::OptimizationProblemInterface::computeSparseHessianEqualitiesStructure ( Eigen::Ref< Eigen::VectorXi >  i_row,
Eigen::Ref< Eigen::VectorXi >  j_col,
bool  lower_part_only = false 
)
virtual

◆ computeSparseHessianEqualitiesValues()

void corbo::OptimizationProblemInterface::computeSparseHessianEqualitiesValues ( Eigen::Ref< Eigen::VectorXd >  values,
const double *  multipliers = nullptr,
bool  lower_part_only = false 
)
virtual

◆ computeSparseHessianInequalities()

void corbo::OptimizationProblemInterface::computeSparseHessianInequalities ( Eigen::SparseMatrix< double > &  hessian,
const double *  multipliers = nullptr 
)
virtual

Definition at line 1490 of file optimization_problem_interface.cpp.

◆ computeSparseHessianInequalitiesNNZ()

int corbo::OptimizationProblemInterface::computeSparseHessianInequalitiesNNZ ( bool  lower_part_only = false)
virtual

◆ computeSparseHessianInequalitiesStructure()

void corbo::OptimizationProblemInterface::computeSparseHessianInequalitiesStructure ( Eigen::Ref< Eigen::VectorXi >  i_row,
Eigen::Ref< Eigen::VectorXi >  j_col,
bool  lower_part_only = false 
)
virtual

◆ computeSparseHessianInequalitiesValues()

void corbo::OptimizationProblemInterface::computeSparseHessianInequalitiesValues ( Eigen::Ref< Eigen::VectorXd >  values,
const double *  multipliers = nullptr,
bool  lower_part_only = false 
)
virtual

◆ computeSparseHessianLagrangian()

void corbo::OptimizationProblemInterface::computeSparseHessianLagrangian ( Eigen::SparseMatrix< double, Eigen::ColMajor, long long > &  H,
const double *  multipliers_eq,
const double *  multipliers_ineq,
const Eigen::VectorXi *  col_nnz = nullptr,
bool  upper_part_only = false 
)
virtual

Compute the hessian of the lagrangian L(x) = f(x) + lambda1 * c(x) + lambda2 * ceq(x)

Reimplemented in corbo::HyperGraphOptimizationProblemEdgeBased.

Definition at line 1587 of file optimization_problem_interface.cpp.

◆ computeSparseHessianLagrangianNNZperCol()

void corbo::OptimizationProblemInterface::computeSparseHessianLagrangianNNZperCol ( Eigen::Ref< Eigen::VectorXi >  col_nnz,
bool  upper_part_only 
)
virtual

◆ computeSparseHessianObjective()

void corbo::OptimizationProblemInterface::computeSparseHessianObjective ( Eigen::SparseMatrix< double > &  hessian,
double  multiplier = 1.0 
)
virtual

Definition at line 1284 of file optimization_problem_interface.cpp.

◆ computeSparseHessianObjectiveLL()

void corbo::OptimizationProblemInterface::computeSparseHessianObjectiveLL ( Eigen::SparseMatrix< double, Eigen::ColMajor, long long > &  H,
const Eigen::VectorXi *  col_nnz = nullptr,
bool  upper_part_only = false 
)
virtual

◆ computeSparseHessianObjectiveNNZ()

int corbo::OptimizationProblemInterface::computeSparseHessianObjectiveNNZ ( bool  lower_part_only = false)
virtual

◆ computeSparseHessianObjectiveNNZperCol()

void corbo::OptimizationProblemInterface::computeSparseHessianObjectiveNNZperCol ( Eigen::Ref< Eigen::VectorXi >  col_nnz,
bool  upper_part_only = false 
)
virtual

◆ computeSparseHessianObjectiveStructure()

void corbo::OptimizationProblemInterface::computeSparseHessianObjectiveStructure ( Eigen::Ref< Eigen::VectorXi >  i_row,
Eigen::Ref< Eigen::VectorXi >  j_col,
bool  lower_part_only = false 
)
virtual

◆ computeSparseHessianObjectiveValues()

void corbo::OptimizationProblemInterface::computeSparseHessianObjectiveValues ( Eigen::Ref< Eigen::VectorXd >  values,
double  multiplier = 1.0,
bool  lower_part_only = false 
)
virtual

◆ computeSparseHessians()

void corbo::OptimizationProblemInterface::computeSparseHessians ( Eigen::SparseMatrix< double > &  hessian_obj,
Eigen::SparseMatrix< double > &  hessian_eq,
Eigen::SparseMatrix< double > &  hessian_ineq,
double  multiplier_obj = 1.0,
const double *  multipliers_eq = nullptr,
const double *  multipliers_ineq = nullptr 
)
virtual

Definition at line 1545 of file optimization_problem_interface.cpp.

◆ computeSparseHessiansNNZ()

void corbo::OptimizationProblemInterface::computeSparseHessiansNNZ ( int nnz_obj,
int nnz_eq,
int nnz_ineq,
bool  lower_part_only = false 
)
virtual

◆ computeSparseHessiansStructure()

void corbo::OptimizationProblemInterface::computeSparseHessiansStructure ( Eigen::Ref< Eigen::VectorXi >  i_row_obj,
Eigen::Ref< Eigen::VectorXi >  j_col_obj,
Eigen::Ref< Eigen::VectorXi >  i_row_eq,
Eigen::Ref< Eigen::VectorXi >  j_col_eq,
Eigen::Ref< Eigen::VectorXi >  i_row_ineq,
Eigen::Ref< Eigen::VectorXi >  j_col_ineq,
bool  lower_part_only = false 
)
virtual

◆ computeSparseHessiansValues()

void corbo::OptimizationProblemInterface::computeSparseHessiansValues ( Eigen::Ref< Eigen::VectorXd >  values_obj,
Eigen::Ref< Eigen::VectorXd >  values_eq,
Eigen::Ref< Eigen::VectorXd >  values_ineq,
double  multiplier_obj = 1.0,
const double *  multipliers_eq = nullptr,
const double *  multipliers_ineq = nullptr,
bool  lower_part_only = false 
)
virtual

◆ computeSparseJacobianActiveInequalities()

void corbo::OptimizationProblemInterface::computeSparseJacobianActiveInequalities ( Eigen::SparseMatrix< double > &  jacobian,
double  weight = 1.0 
)
virtual

Definition at line 500 of file optimization_problem_interface.cpp.

◆ computeSparseJacobianActiveInequalitiesValues()

void corbo::OptimizationProblemInterface::computeSparseJacobianActiveInequalitiesValues ( Eigen::Ref< Eigen::VectorXd >  values,
double  weight = 1.0 
)
virtual

◆ computeSparseJacobianEqualities()

void corbo::OptimizationProblemInterface::computeSparseJacobianEqualities ( Eigen::SparseMatrix< double > &  jacobian,
const double *  multipliers = nullptr 
)
virtual

Definition at line 377 of file optimization_problem_interface.cpp.

◆ computeSparseJacobianEqualitiesNNZ()

int corbo::OptimizationProblemInterface::computeSparseJacobianEqualitiesNNZ ( )
virtual

◆ computeSparseJacobianEqualitiesStructure()

void corbo::OptimizationProblemInterface::computeSparseJacobianEqualitiesStructure ( Eigen::Ref< Eigen::VectorXi >  i_row,
Eigen::Ref< Eigen::VectorXi >  j_col 
)
virtual

◆ computeSparseJacobianEqualitiesValues()

void corbo::OptimizationProblemInterface::computeSparseJacobianEqualitiesValues ( Eigen::Ref< Eigen::VectorXd >  values,
const double *  multipliers = nullptr 
)
virtual

◆ computeSparseJacobianFiniteCombinedBounds()

void corbo::OptimizationProblemInterface::computeSparseJacobianFiniteCombinedBounds ( Eigen::SparseMatrix< double > &  jacobian,
double  weight = 1.0 
)
virtual

Definition at line 669 of file optimization_problem_interface.cpp.

◆ computeSparseJacobianFiniteCombinedBoundsNNZ()

int corbo::OptimizationProblemInterface::computeSparseJacobianFiniteCombinedBoundsNNZ ( )
virtual

◆ computeSparseJacobianFiniteCombinedBoundsStructure()

void corbo::OptimizationProblemInterface::computeSparseJacobianFiniteCombinedBoundsStructure ( Eigen::Ref< Eigen::VectorXi >  i_row,
Eigen::Ref< Eigen::VectorXi >  j_col 
)
virtual

◆ computeSparseJacobianFiniteCombinedBoundsValues()

void corbo::OptimizationProblemInterface::computeSparseJacobianFiniteCombinedBoundsValues ( Eigen::Ref< Eigen::VectorXd >  values,
double  weight = 1.0 
)
virtual

◆ computeSparseJacobianInequalities()

void corbo::OptimizationProblemInterface::computeSparseJacobianInequalities ( Eigen::SparseMatrix< double > &  jacobian,
const double *  multipliers = nullptr 
)
virtual

Definition at line 450 of file optimization_problem_interface.cpp.

◆ computeSparseJacobianInequalitiesNNZ()

int corbo::OptimizationProblemInterface::computeSparseJacobianInequalitiesNNZ ( )
virtual

◆ computeSparseJacobianInequalitiesStructure()

void corbo::OptimizationProblemInterface::computeSparseJacobianInequalitiesStructure ( Eigen::Ref< Eigen::VectorXi >  i_row,
Eigen::Ref< Eigen::VectorXi >  j_col 
)
virtual

◆ computeSparseJacobianInequalitiesValues()

void corbo::OptimizationProblemInterface::computeSparseJacobianInequalitiesValues ( Eigen::Ref< Eigen::VectorXd >  values,
const double *  multipliers = nullptr 
)
virtual

◆ computeSparseJacobianLsqObjective()

void corbo::OptimizationProblemInterface::computeSparseJacobianLsqObjective ( Eigen::SparseMatrix< double > &  jacobian,
const double *  multipliers = nullptr 
)
virtual

Definition at line 303 of file optimization_problem_interface.cpp.

◆ computeSparseJacobianLsqObjectiveNNZ()

int corbo::OptimizationProblemInterface::computeSparseJacobianLsqObjectiveNNZ ( )
virtual

◆ computeSparseJacobianLsqObjectiveStructure()

void corbo::OptimizationProblemInterface::computeSparseJacobianLsqObjectiveStructure ( Eigen::Ref< Eigen::VectorXi >  i_row,
Eigen::Ref< Eigen::VectorXi >  j_col 
)
virtual

◆ computeSparseJacobianLsqObjectiveValues()

void corbo::OptimizationProblemInterface::computeSparseJacobianLsqObjectiveValues ( Eigen::Ref< Eigen::VectorXd >  values,
const double *  multipliers = nullptr 
)
virtual

◆ computeSparseJacobians()

void corbo::OptimizationProblemInterface::computeSparseJacobians ( Eigen::SparseMatrix< double > &  jacobian_lsq_obj,
Eigen::SparseMatrix< double > &  jacobian_eq,
Eigen::SparseMatrix< double > &  jacobian_ineq,
const double *  multipliers_lsq_obj = nullptr,
const double *  multipliers_eq = nullptr,
const double *  multipliers_ineq = nullptr,
bool  active_ineq = false,
double  active_ineq_weight = 1.0 
)
virtual

Definition at line 543 of file optimization_problem_interface.cpp.

◆ computeSparseJacobiansNNZ()

void corbo::OptimizationProblemInterface::computeSparseJacobiansNNZ ( int nnz_lsq_obj,
int nnz_eq,
int nnz_ineq 
)
virtual

Definition at line 557 of file optimization_problem_interface.cpp.

◆ computeSparseJacobiansStructure()

void corbo::OptimizationProblemInterface::computeSparseJacobiansStructure ( Eigen::Ref< Eigen::VectorXi >  i_row_obj,
Eigen::Ref< Eigen::VectorXi >  j_col_obj,
Eigen::Ref< Eigen::VectorXi >  i_row_eq,
Eigen::Ref< Eigen::VectorXi >  j_col_eq,
Eigen::Ref< Eigen::VectorXi >  i_row_ineq,
Eigen::Ref< Eigen::VectorXi >  j_col_ineq 
)
virtual

Definition at line 564 of file optimization_problem_interface.cpp.

◆ computeSparseJacobiansValues()

void corbo::OptimizationProblemInterface::computeSparseJacobiansValues ( Eigen::Ref< Eigen::VectorXd >  values_obj,
Eigen::Ref< Eigen::VectorXd >  values_eq,
Eigen::Ref< Eigen::VectorXd >  values_ineq,
const double *  multipliers_obj = nullptr,
const double *  multipliers_eq = nullptr,
const double *  multipliers_ineq = nullptr,
bool  active_ineq = false,
double  active_ineq_weight = 1.0 
)
virtual

◆ computeSparseJacobianTwoSideBoundedLinearForm()

void corbo::OptimizationProblemInterface::computeSparseJacobianTwoSideBoundedLinearForm ( Eigen::SparseMatrix< double, Eigen::ColMajor, long long > &  A,
bool  include_finite_bounds,
const Eigen::VectorXi *  col_nnz = nullptr 
)
virtual

Compute the jacobian A for the linear form lbA <= A x <= lbB.

Especially some QP solvers require either

 lbA <= A x<= ubA

or

lbA <= A x <= ubA lb <= x <= ub

The first formulatin includes bounds and hence the bottom rows of A are the identity. However, in case lb and ub are infinity, A might have obsolete rows.

If parameter include_bounds is true: only finite bounds are considered and matrix A is of size [getEqualityDimension() + getInequalityDimension() + finiteCombinedBounds() x parameterDimension()].

If parameter include_bounds is false: the size of matrix A is [getEqualityDimension() + getInequalityDimension() x parameterDimension()].

Remarks
this version defines the sparse matrix with long long indices (since it is required by osqp for example)
Parameters
[out]ACombined jacobian (see description above)
[in]include_finite_boundsSpecify whether bounds should be included in A (check dimension of A as descirbed above)
[in]col_nnzEstimate for number of nnz per column to speed up insertion

Reimplemented in corbo::HyperGraphOptimizationProblemEdgeBased.

Definition at line 965 of file optimization_problem_interface.cpp.

◆ computeSparseJacobianTwoSideBoundedLinearFormAndHessianLagrangian()

void corbo::OptimizationProblemInterface::computeSparseJacobianTwoSideBoundedLinearFormAndHessianLagrangian ( Eigen::SparseMatrix< double, Eigen::ColMajor, long long > &  H,
const double *  multipliers_eq,
const double *  multipliers_ineq,
Eigen::SparseMatrix< double, Eigen::ColMajor, long long > &  A,
bool  include_finite_bounds,
const Eigen::VectorXi *  col_nnz_H = nullptr,
const Eigen::VectorXi *  col_nnz_A = nullptr,
bool  upper_part_only_H = false 
)
virtual

Compute the Jacobian and Hessian of the lagrangian.

This method combines computeSparseJacobianTwoSideBoundedLinearForm() and computeSparseHessianLagrangian() in order to speed up computation. Often, Hessian computations rely on first order derivatives and so we do not need to compute the Jacobian twice.

Reimplemented in corbo::HyperGraphOptimizationProblemEdgeBased.

Definition at line 1672 of file optimization_problem_interface.cpp.

◆ computeSparseJacobianTwoSideBoundedLinearFormAndHessianObjective()

void corbo::OptimizationProblemInterface::computeSparseJacobianTwoSideBoundedLinearFormAndHessianObjective ( Eigen::SparseMatrix< double, Eigen::ColMajor, long long > &  H,
Eigen::SparseMatrix< double, Eigen::ColMajor, long long > &  A,
bool  include_finite_bounds,
const Eigen::VectorXi *  col_nnz_H,
const Eigen::VectorXi *  col_nnz_A,
bool  upper_part_only_H 
)
virtual

◆ computeSparseJacobianTwoSideBoundedLinearFormNNZ()

int corbo::OptimizationProblemInterface::computeSparseJacobianTwoSideBoundedLinearFormNNZ ( bool  include_finite_bounds)
virtual

◆ computeSparseJacobianTwoSideBoundedLinearFormNNZPerColumn()

void corbo::OptimizationProblemInterface::computeSparseJacobianTwoSideBoundedLinearFormNNZPerColumn ( Eigen::Ref< Eigen::VectorXi >  col_nnz,
bool  include_finite_bounds 
)
virtual

◆ computeSparseJacobianTwoSideBoundedLinearFormStructure()

void corbo::OptimizationProblemInterface::computeSparseJacobianTwoSideBoundedLinearFormStructure ( Eigen::Ref< Eigen::VectorXi >  i_row,
Eigen::Ref< Eigen::VectorXi >  j_col,
bool  include_finite_bounds 
)
virtual

◆ computeSparseJacobianTwoSideBoundedLinearFormValues()

void corbo::OptimizationProblemInterface::computeSparseJacobianTwoSideBoundedLinearFormValues ( Eigen::Ref< Eigen::VectorXd >  values,
bool  include_finite_bounds 
)
virtual

◆ computeValueNonLsqObjective()

virtual double corbo::OptimizationProblemInterface::computeValueNonLsqObjective ( )
pure virtual

◆ computeValueObjective()

double corbo::OptimizationProblemInterface::computeValueObjective ( )
virtual

◆ computeValues()

virtual void corbo::OptimizationProblemInterface::computeValues ( double &  non_lsq_obj_value,
Eigen::Ref< Eigen::VectorXd >  lsq_obj_values,
Eigen::Ref< Eigen::VectorXd >  eq_values,
Eigen::Ref< Eigen::VectorXd >  ineq_values 
)
inlinevirtual

Reimplemented in corbo::BaseHyperGraphOptimizationProblem.

Definition at line 296 of file optimization_problem_interface.h.

◆ computeValuesActiveInequality()

void corbo::OptimizationProblemInterface::computeValuesActiveInequality ( Eigen::Ref< Eigen::VectorXd >  values,
double  weight = 1.0 
)
virtual

Compute the values of the active inequality constraints (elementwise max(0, c(x)))

Return a vector [inequalityDimension() x 1] in which elements are set to max(0, c(x))

Weight scales the values to "weight*max(0, c(x))".

Parameters
[out]valuesThe resulting value vector [inequalityDimension() x 1]. Warning: the size must be pre-allocated!
[in]weightOptionally provide a weight factor

Reimplemented in corbo::BaseHyperGraphOptimizationProblem.

Definition at line 140 of file optimization_problem_interface.cpp.

◆ computeValuesEquality()

virtual void corbo::OptimizationProblemInterface::computeValuesEquality ( Eigen::Ref< Eigen::VectorXd >  values)
pure virtual

Compute the equality constraint values ceq(x) for the current parameter set.

Parameters
[out]valuesThe resulting value vector [equalityDimension() x 1]. Warning: the size must be pre-allocated!

Implemented in corbo::SimpleOptimizationProblem, corbo::SimpleOptimizationProblemWithCallbacks, and corbo::BaseHyperGraphOptimizationProblem.

◆ computeValuesInequality()

virtual void corbo::OptimizationProblemInterface::computeValuesInequality ( Eigen::Ref< Eigen::VectorXd >  values)
pure virtual

Compute the inequality constraint values c(x) for the current parameter set.

Parameters
[out]valuesThe resulting value vector [inequalityDimension() x 1]. Warning: the size must be pre-allocated!

Implemented in corbo::SimpleOptimizationProblem, corbo::SimpleOptimizationProblemWithCallbacks, and corbo::BaseHyperGraphOptimizationProblem.

◆ computeValuesLsqObjective()

virtual void corbo::OptimizationProblemInterface::computeValuesLsqObjective ( Eigen::Ref< Eigen::VectorXd >  values)
pure virtual

Compute the objective function values f(x) for the current parameter set.

Parameters
[out]valuesThe resulting value vector [objectiveDimension() x 1]. Warning: the size must be pre-allocated!

Implemented in corbo::SimpleOptimizationProblem, corbo::SimpleOptimizationProblemWithCallbacks, and corbo::BaseHyperGraphOptimizationProblem.

◆ discardBackupParameters()

virtual void corbo::OptimizationProblemInterface::discardBackupParameters ( bool  all = false)
pure virtual

◆ finiteBoundsDimension()

int corbo::OptimizationProblemInterface::finiteBoundsDimension ( )
virtual

Dimension of the set of finite bounds (individual bounds ub and lb)

This method retuns the total number of finite bounds, in particular: numFinite(lb) + numFinite(ub) with numFinite counting values within interval [-CORBO_INF_DBL, CORBO_INF_DBL]. If all bounds are finite, the (maximum) value is 2*parameterDimension().

Returns
number of finite lower bounds + number of finite upper bounds

Reimplemented in corbo::BaseHyperGraphOptimizationProblem.

Definition at line 128 of file optimization_problem_interface.cpp.

◆ finiteCombinedBoundsDimension()

int corbo::OptimizationProblemInterface::finiteCombinedBoundsDimension ( )
virtual

Dimension of the set of finite bounds (combined such that each ub and lb component define a single dimension)

This method returns the number of parameters that exhibit either finite lower or finite upper bounds. In particular, it counts how often (is_finite(lb[i]) || is_finite(ub[i])) evaluates to true. The maximum value is parameterDimension().

Reimplemented in corbo::BaseHyperGraphOptimizationProblem.

Definition at line 116 of file optimization_problem_interface.cpp.

◆ getBounds()

void corbo::OptimizationProblemInterface::getBounds ( Eigen::Ref< Eigen::VectorXd >  lb,
Eigen::Ref< Eigen::VectorXd >  ub 
)
virtual

Get lower and upper bound vector.

Parameters
[out]lbLower bounds [parameterDimension() x 1] (must be pre-allocated!)
[out]ubUpper bounds [parameterDimension() x 1] (must be pre-allocated!)

Reimplemented in corbo::BaseHyperGraphOptimizationProblem, and corbo::SimpleOptimizationProblem.

Definition at line 103 of file optimization_problem_interface.cpp.

◆ getEqualityDimension()

virtual int corbo::OptimizationProblemInterface::getEqualityDimension ( )
pure virtual

◆ getInequalityDimension()

virtual int corbo::OptimizationProblemInterface::getInequalityDimension ( )
pure virtual

◆ getLowerBound()

virtual double corbo::OptimizationProblemInterface::getLowerBound ( int  idx)
pure virtual

Return specific lower bound value of a parameter.

Parameters
[in]idxValue index according vector size [parameterDimension() x 1]
Returns
lower bound value

Implemented in corbo::BaseHyperGraphOptimizationProblem, and corbo::SimpleOptimizationProblem.

◆ getLsqObjectiveDimension()

virtual int corbo::OptimizationProblemInterface::getLsqObjectiveDimension ( )
pure virtual

Total dimension of least-squares objective function terms.

Implemented in corbo::SimpleOptimizationProblem, corbo::SimpleOptimizationProblemWithCallbacks, and corbo::BaseHyperGraphOptimizationProblem.

◆ getNonLsqObjectiveDimension()

virtual int corbo::OptimizationProblemInterface::getNonLsqObjectiveDimension ( )
pure virtual

Get dimension of the objective (should be zero or one)

Implemented in corbo::SimpleOptimizationProblem, corbo::SimpleOptimizationProblemWithCallbacks, and corbo::BaseHyperGraphOptimizationProblem.

◆ getObjectiveDimension()

virtual int corbo::OptimizationProblemInterface::getObjectiveDimension ( )
pure virtual

Get dimension of the objective (should be zero or one, includes Lsq objectives if present)

Implemented in corbo::SimpleOptimizationProblem, corbo::SimpleOptimizationProblemWithCallbacks, and corbo::BaseHyperGraphOptimizationProblem.

◆ getParameterDimension()

virtual int corbo::OptimizationProblemInterface::getParameterDimension ( )
pure virtual

Effictive dimension of the optimization parameter set (changeable, non-fixed part)

Implemented in corbo::BaseHyperGraphOptimizationProblem, and corbo::SimpleOptimizationProblem.

◆ getParametersAndBoundsFinite()

void corbo::OptimizationProblemInterface::getParametersAndBoundsFinite ( Eigen::Ref< Eigen::VectorXd >  lb_finite_bounds,
Eigen::Ref< Eigen::VectorXd >  ub_finite_bounds,
Eigen::Ref< Eigen::VectorXd >  x_finite_bounds 
)
virtual

Return bound and parameter vectors only for finite boudns.

The values are returned if lb < inf or ub < inf. The Dimension of each vector is finiteCombinedBoundsDimension().

Warning
This dimension of the resulting vector corresponds to finite bounds only, this method should be used according with computeFiniteCombinedBoundsJacobian().
Parameters
[out]lb_finite_boundsLower bounds [finiteCombinedBoundsDimension() x 1], Warning: the size must be pre-allocated!
[out]ub_finite_boundsUpper bounds [finiteCombinedBoundsDimension() x 1], Warning: the size must be pre-allocated!
[out]x_finite_boundsrelated parameters [finiteCombinedBoundsDimension() x 1], Warning: the size must be pre-allocated!

Reimplemented in corbo::BaseHyperGraphOptimizationProblem.

Definition at line 188 of file optimization_problem_interface.cpp.

◆ getParameterValue()

virtual double corbo::OptimizationProblemInterface::getParameterValue ( int  idx)
pure virtual

Return specific value of the parameter vector.

Parameters
[in]idxValue index according vector size [parameterDimension() x 1]
Returns
value

Implemented in corbo::BaseHyperGraphOptimizationProblem, and corbo::SimpleOptimizationProblem.

◆ getParameterVector()

void corbo::OptimizationProblemInterface::getParameterVector ( Eigen::Ref< Eigen::VectorXd >  x)
virtual

Return deep copy of the complete parameter vector.

Parameters
[out]xCurrent parameter vector of size [parameterDimension() x 1] (must be pre-allocated!)

Reimplemented in corbo::BaseHyperGraphOptimizationProblem, and corbo::SimpleOptimizationProblem.

Definition at line 65 of file optimization_problem_interface.cpp.

◆ getUpperBound()

virtual double corbo::OptimizationProblemInterface::getUpperBound ( int  idx)
pure virtual

Return specific upper bound of a parameter.

Parameters
[in]idxValue index according vector size [parameterDimension() x 1]
Returns
upper bound value

Implemented in corbo::BaseHyperGraphOptimizationProblem, and corbo::SimpleOptimizationProblem.

◆ isLeastSquaresProblem()

virtual bool corbo::OptimizationProblemInterface::isLeastSquaresProblem ( ) const
pure virtual

Check if the underlying problem is defined in the least squares form.

Least-squares problems are defined as $ \min f(x)^T f(x) $ and the function values and Jacobian are computed for $ f(x) $ rather than for $ f(x)^T f(x) $. Specialiezed least-squares solvers require the optimization problem to be defined in this particular form.

In summary, the solver computes the squared l2-norm of the objective function value (scalar) if set to true.

Returns
true if all objectives are in least-squares form, false otherwise.

Implemented in corbo::SimpleOptimizationProblem, corbo::SimpleOptimizationProblemWithCallbacks, and corbo::BaseHyperGraphOptimizationProblem.

◆ restoreBackupParameters()

virtual void corbo::OptimizationProblemInterface::restoreBackupParameters ( bool  keep_backup)
pure virtual

Discard last backup (or all)

Implemented in corbo::BaseHyperGraphOptimizationProblem, and corbo::SimpleOptimizationProblem.

◆ setBounds()

void corbo::OptimizationProblemInterface::setBounds ( const Eigen::Ref< const Eigen::VectorXd > &  lb,
const Eigen::Ref< const Eigen::VectorXd > &  ub 
)
virtual

Set lower and upper bound vector.

Parameters
[in]lbLower bounds [parameterDimension() x 1]
[in]ubUpper bounds [parameterDimension() x 1]

Reimplemented in corbo::BaseHyperGraphOptimizationProblem, and corbo::SimpleOptimizationProblem.

Definition at line 91 of file optimization_problem_interface.cpp.

◆ setLowerBound()

virtual void corbo::OptimizationProblemInterface::setLowerBound ( int  idx,
double  lb 
)
pure virtual

Set specific lower bound of a parameter.

Parameters
[in]idxValue index according vector size [parameterDimension() x 1]
[in]lbNew lower bound to be set

Implemented in corbo::BaseHyperGraphOptimizationProblem, and corbo::SimpleOptimizationProblem.

◆ setParameterValue()

virtual void corbo::OptimizationProblemInterface::setParameterValue ( int  idx,
double  x 
)
pure virtual

Set specific value of the parameter vector.

Parameters
[in]idxValue index according vector size [parameterDimension() x 1]
[in]xNew value to be set

Implemented in corbo::BaseHyperGraphOptimizationProblem, and corbo::SimpleOptimizationProblem.

◆ setParameterVector()

void corbo::OptimizationProblemInterface::setParameterVector ( const Eigen::Ref< const Eigen::VectorXd > &  x)
virtual

Set complete parameter vector.

Remarks
The default implementation requires parameterDimension() to be valid, hence no automatic resizing
Parameters
[in]xNew parameter vector of size [parameterDimension() x 1] Push the current parameter set to some backup stack

Reimplemented in corbo::BaseHyperGraphOptimizationProblem, and corbo::SimpleOptimizationProblem.

Definition at line 72 of file optimization_problem_interface.cpp.

◆ setUpperBound()

virtual void corbo::OptimizationProblemInterface::setUpperBound ( int  idx,
double  ub 
)
pure virtual

Set specific upper bound of a parameter.

Parameters
[in]idxValue index according vector size [parameterDimension() x 1]
[in]ubNew upper bound to be set

Implemented in corbo::BaseHyperGraphOptimizationProblem, and corbo::SimpleOptimizationProblem.

Member Data Documentation

◆ _warn_if_not_specialized

bool corbo::OptimizationProblemInterface::_warn_if_not_specialized = true
protected

Definition at line 672 of file optimization_problem_interface.h.


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


control_box_rst
Author(s): Christoph Rösmann
autogenerated on Wed Mar 2 2022 00:07:21