High-level problem formulation¶
This is the main API for defining optimization problems using CasADi expressions.
For examples, see the lasso and nonlinear regression examples.
- alpaqa.minimize(f: SX | MX, x: SX | MX) MinimizationProblemDescription[source]
Formulate a minimization problem with objective function \(f(x)\) and unknown variables \(x\).
- class alpaqa.MinimizationProblemDescription(objective_expr: SX | MX, variable: SX | MX, constraints_expr: SX | MX | None = None, penalty_constraints_expr: SX | MX | None = None, parameter: SX | MX | None = None, parameter_value: ndarray | None = None, regularizer: float | ndarray | None = None, bounds: Tuple[ndarray, ndarray] | None = None, constraints_bounds: Tuple[ndarray, ndarray] | None = None, penalty_constraints_bounds: Tuple[ndarray, ndarray] | None = None, name: str = 'alpaqa_casadi_problem')[source]
High-level description of a minimization problem.
- subject_to_box(C: Tuple[ndarray, ndarray]) MinimizationProblemDescription[source]
Add box constraints \(x \in C\) on the problem variables.
- subject_to(g: SX | MX, D: ndarray | Tuple[ndarray, ndarray] | None = None) MinimizationProblemDescription[source]
Add general constraints \(g(x) \in D\), handled using an augmented Lagrangian method.
- subject_to_penalty(g: SX | MX, D: ndarray | Tuple[ndarray, ndarray] | None = None) MinimizationProblemDescription[source]
Add general constraints \(g(x) \in D\), handled using a quadratic penalty method.
- with_l1_regularizer(λ: float | ndarray) MinimizationProblemDescription[source]
Add an \(\ell_1\)-regularization term \(\|\lambda x\|_1\) to the objective.
- with_param(p: SX | MX, value: ndarray = None) MinimizationProblemDescription[source]
Make the problem depend on a symbolic parameter, with an optional default value. The value can be changed after the problem has been loaded, as wel as in between solves.
- with_param_value(value: ndarray) MinimizationProblemDescription[source]
Explicitly change the parameter value for the parameter added by
with_param().
- compile(**kwargs) CasADiProblem[source]
Generate, compile and load the problem.
A C compiler is required (e.g. GCC or Clang on Linux, Xcode on macOS, or Visual Studio on Windows). If no compiler is available, you could use the
alpaqa.MinimizationProblemDescription.build()method instead.- Parameters:
**kwargs – Arguments passed to
alpaqa.casadi_loader.generate_and_compile_casadi_problem().- Keyword Arguments:
second_order:
str– Whether to generate functions for evaluating second-order derivatives:'no': only first-order derivatives (default).'full': Hessians and Hessian-vector products of the Lagrangian and the augmented Lagrangian.'prod': Hessian-vector products of the Lagrangian and the augmented Lagrangian.'L': Hessian of the Lagrangian.'L_prod': Hessian-vector product of the Lagrangian.'psi': Hessian of the augmented Lagrangian.'psi_prod': Hessian-vector product of the augmented Lagrangian.
name:
str– Optional string description of the problem (used for filenames).sym:
Callable– Symbolic variable constructor, usually eithercs.SX.sym(default) orcs.MX.sym.SXexpands the expressions and generally results in better run-time performance, whileMXusually has faster compile times.
- build(**kwargs) CasADiProblem[source]
Finalize the problem formulation and return a problem type that can be used by the solvers.
This method is usually not recommended: the
alpaqa.MinimizationProblemDescription.compile()method is preferred because it pre-compiles the problem for better performance.- Keyword Arguments:
second_order:
str– Whether to generate functions for evaluating second-order derivatives:'no': only first-order derivatives (default).'full': Hessians and Hessian-vector products of the Lagrangian and the augmented Lagrangian.'prod': Hessian-vector products of the Lagrangian and the augmented Lagrangian.'L': Hessian of the Lagrangian.'L_prod': Hessian-vector product of the Lagrangian.'psi': Hessian of the augmented Lagrangian.'psi_prod': Hessian-vector product of the augmented Lagrangian.
sym:
Callable– Symbolic variable constructor, usually eithercs.SX.sym(default) orcs.MX.sym.SXexpands the expressions and generally results in better run-time performance.