The elements to formulate the solver independent optimization problem. More...
Classes | |
class | ifopt::ConstraintSet |
A container holding a set of related constraints. More... | |
class | ifopt::CostTerm |
A container holding a single cost term. More... | |
class | ifopt::Problem |
A generic optimization problem with variables, costs and constraints. More... | |
class | ifopt::VariableSet |
A container holding a set of related optimization variables. More... | |
The elements to formulate the solver independent optimization problem.
An optimization problem usually consists of multiple sets of independent variable- or constraint-sets. Each set represents a common concept, e.g. one set of variables represents spline coefficients, another footstep positions. Similarly, each constraint-set groups a set of similar constraints.
The Nonlinear Optimization Problem to solve is defined as:
find x0, x1 (variable-sets 0 & 1) s.t x0_lower <= x0 <= x0_upper (bounds on variable-set x0 \in R^2) {x0,x1} = arg min c0(x0,x1)+c1(x0,x1) (cost-terms 0 and 1) g0_lower < g0(x0,x1) < g0_upper (constraint-set 0 \in R^2) g1_lower < g1(x0,x1) < g0_upper (constraint-set 1 \in R^1)
This structure allows a user to define each of these sets independently in separate classes and ifopt takes care of building the overall problem from these sets. This is implemented by
Supplying derivative information greatly increases solution speed. ifopt allows to define the derivative of each cost-term/constraint-set with respect to each variable-set independently. This ensures that when the order of variable-sets changes in the overall vector, this derivative information is still valid. These "Jacobian blocks" must be supplied through ConstraintSet::FillJacobianBlock() and are then used to build the complete Jacobian for the cost and constraints.