#include <alpaqa/problem/type-erased-problem.hpp>
The main polymorphic minimization problem interface.
This class wraps the actual problem implementation class, filling in the missing member functions with sensible defaults, and providing a uniform interface that is used by the solvers.
The problem implementations do not inherit from an abstract base class. Instead, structural typing is used. The ProblemVTable constructor uses reflection to discover which member functions are provided by the problem implementation. See Problem formulations for more information, and C++/CustomCppProblem/main.cpp for an example.
Definition at line 220 of file type-erased-problem.hpp.
Problem dimensions | |
length_t | get_n () const |
[Required] Number of decision variables. | |
length_t | get_m () const |
[Required] Number of constraints. | |
Required cost and constraint functions | |
real_t | eval_f (crvec x) const |
[Required] Function that evaluates the cost, \( f(x) \) | |
void | eval_grad_f (crvec x, rvec grad_fx) const |
[Required] Function that evaluates the gradient of the cost, \( \nabla f(x) \) | |
void | eval_g (crvec x, rvec gx) const |
[Required] Function that evaluates the constraints, \( g(x) \) | |
void | eval_grad_g_prod (crvec x, crvec y, rvec grad_gxy) const |
[Required] Function that evaluates the gradient of the constraints times a vector, \( \nabla g(x)\,y = \tp{\jac_g(x)}y \) | |
Projections onto constraint sets and proximal mappings | |
void | eval_proj_diff_g (crvec z, rvec e) const |
[Required] Function that evaluates the difference between the given point \( z \) and its projection onto the constraint set \( D \). | |
void | eval_proj_multipliers (rvec y, real_t M) const |
[Required] Function that projects the Lagrange multipliers for ALM. | |
real_t | eval_prox_grad_step (real_t γ, crvec x, crvec grad_ψ, rvec x̂, rvec p) const |
[Required] Function that computes a proximal gradient step. | |
index_t | eval_inactive_indices_res_lna (real_t γ, crvec x, crvec grad_ψ, rindexvec J) const |
[Optional] Function that computes the inactive indices \( \mathcal J(x) \) for the evaluation of the linear Newton approximation of the residual, as in [4]. | |
Constraint sets | |
const Box & | get_box_C () const |
[Optional] Get the rectangular constraint set of the decision variables, \( x \in C \). | |
const Box & | get_box_D () const |
[Optional] Get the rectangular constraint set of the general constraint function, \( g(x) \in D \). | |
Functions for second-order solvers | |
void | eval_jac_g (crvec x, rvec J_values) const |
[Optional] Function that evaluates the nonzero values of the Jacobian matrix of the constraints, \( \jac_g(x) \) | |
Sparsity | get_jac_g_sparsity () const |
[Optional] Function that returns (a view of) the sparsity pattern of the Jacobian of the constraints. | |
void | eval_grad_gi (crvec x, index_t i, rvec grad_gi) const |
[Optional] Function that evaluates the gradient of one specific constraint, \( \nabla g_i(x) \) | |
void | eval_hess_L_prod (crvec x, crvec y, real_t scale, crvec v, rvec Hv) const |
[Optional] Function that evaluates the Hessian of the Lagrangian multiplied by a vector, \( \nabla_{xx}^2L(x, y)\,v \) | |
void | eval_hess_L (crvec x, crvec y, real_t scale, rvec H_values) const |
[Optional] Function that evaluates the nonzero values of the Hessian of the Lagrangian, \( \nabla_{xx}^2L(x, y) \) | |
Sparsity | get_hess_L_sparsity () const |
[Optional] Function that returns (a view of) the sparsity pattern of the Hessian of the Lagrangian. | |
void | eval_hess_ψ_prod (crvec x, crvec y, crvec Σ, real_t scale, crvec v, rvec Hv) const |
[Optional] Function that evaluates the Hessian of the augmented Lagrangian multiplied by a vector, \( \nabla_{xx}^2L_\Sigma(x, y)\,v \) | |
void | eval_hess_ψ (crvec x, crvec y, crvec Σ, real_t scale, rvec H_values) const |
[Optional] Function that evaluates the nonzero values of the Hessian of the augmented Lagrangian, \( \nabla_{xx}^2L_\Sigma(x, y) \) | |
Sparsity | get_hess_ψ_sparsity () const |
[Optional] Function that returns (a view of) the sparsity pattern of the Hessian of the augmented Lagrangian. | |
Combined evaluations | |
real_t | eval_f_grad_f (crvec x, rvec grad_fx) const |
[Optional] Evaluate both \( f(x) \) and its gradient, \( \nabla f(x) \). | |
real_t | eval_f_g (crvec x, rvec g) const |
[Optional] Evaluate both \( f(x) \) and \( g(x) \). | |
void | eval_grad_f_grad_g_prod (crvec x, crvec y, rvec grad_f, rvec grad_gxy) const |
[Optional] Evaluate both \( \nabla f(x) \) and \( \nabla g(x)\,y \). | |
void | eval_grad_L (crvec x, crvec y, rvec grad_L, rvec work_n) const |
[Optional] Evaluate the gradient of the Lagrangian \( \nabla_x L(x, y) = \nabla f(x) + \nabla g(x)\,y \) | |
Augmented Lagrangian | |
real_t | eval_ψ (crvec x, crvec y, crvec Σ, rvec ŷ) const |
[Optional] Calculate both ψ(x) and the vector ŷ that can later be used to compute ∇ψ. | |
void | eval_grad_ψ (crvec x, crvec y, crvec Σ, rvec grad_ψ, rvec work_n, rvec work_m) const |
[Optional] Calculate the gradient ∇ψ(x). | |
real_t | eval_ψ_grad_ψ (crvec x, crvec y, crvec Σ, rvec grad_ψ, rvec work_n, rvec work_m) const |
[Optional] Calculate both ψ(x) and its gradient ∇ψ(x). | |
Checks | |
void | check () const |
[Optional] Check that the problem formulation is well-defined, the dimensions match, etc. | |
Metadata | |
std::string | get_name () const |
[Optional] Get a descriptive name for the problem. | |
Querying specialized implementations | |
bool | provides_eval_inactive_indices_res_lna () const |
Returns true if the problem provides an implementation of eval_inactive_indices_res_lna. | |
bool | provides_eval_jac_g () const |
Returns true if the problem provides an implementation of eval_jac_g. | |
bool | provides_get_jac_g_sparsity () const |
Returns true if the problem provides an implementation of get_jac_g_sparsity. | |
bool | provides_eval_grad_gi () const |
Returns true if the problem provides an implementation of eval_grad_gi. | |
bool | provides_eval_hess_L_prod () const |
Returns true if the problem provides an implementation of eval_hess_L_prod. | |
bool | provides_eval_hess_L () const |
Returns true if the problem provides an implementation of eval_hess_L. | |
bool | provides_get_hess_L_sparsity () const |
Returns true if the problem provides an implementation of get_hess_L_sparsity. | |
bool | provides_eval_hess_ψ_prod () const |
Returns true if the problem provides an implementation of eval_hess_ψ_prod. | |
bool | provides_eval_hess_ψ () const |
Returns true if the problem provides an implementation of eval_hess_ψ. | |
bool | provides_get_hess_ψ_sparsity () const |
Returns true if the problem provides an implementation of get_hess_ψ_sparsity. | |
bool | provides_eval_f_grad_f () const |
Returns true if the problem provides a specialized implementation of eval_f_grad_f, false if it uses the default implementation. | |
bool | provides_eval_f_g () const |
Returns true if the problem provides a specialized implementation of eval_f_g, false if it uses the default implementation. | |
bool | provides_eval_grad_f_grad_g_prod () const |
Returns true if the problem provides a specialized implementation of eval_grad_f_grad_g_prod, false if it uses the default implementation. | |
bool | provides_eval_grad_L () const |
Returns true if the problem provides a specialized implementation of eval_grad_L, false if it uses the default implementation. | |
bool | provides_eval_ψ () const |
Returns true if the problem provides a specialized implementation of eval_ψ, false if it uses the default implementation. | |
bool | provides_eval_grad_ψ () const |
Returns true if the problem provides a specialized implementation of eval_grad_ψ, false if it uses the default implementation. | |
bool | provides_eval_ψ_grad_ψ () const |
Returns true if the problem provides a specialized implementation of eval_ψ_grad_ψ, false if it uses the default implementation. | |
bool | provides_get_box_C () const |
Returns true if the problem provides an implementation of get_box_C. | |
bool | provides_get_box_D () const |
Returns true if the problem provides an implementation of get_box_D. | |
bool | provides_check () const |
Returns true if the problem provides an implementation of check. | |
bool | provides_get_name () const |
Returns true if the problem provides an implementation of get_name. | |
Querying available functions | |
bool | supports_eval_hess_ψ_prod () const |
Returns true if eval_hess_ψ_prod can be called. | |
bool | supports_eval_hess_ψ () const |
Returns true if eval_hess_ψ can be called. | |
Helpers | |
real_t | calc_ŷ_dᵀŷ (rvec g_ŷ, crvec y, crvec Σ) const |
Given g(x), compute the intermediate results ŷ and dᵀŷ that can later be used to compute ψ(x) and ∇ψ(x). | |
Public Types | |
using | Sparsity = alpaqa::Sparsity< config_t > |
using | Box = alpaqa::Box< config_t > |
using | VTable = ProblemVTable< config_t > |
using | allocator_type = Allocator |
using | TypeErased = util::TypeErased< VTable, allocator_type > |
Public Member Functions | |
TypeErased () noexcept(noexcept(allocator_type()) &&noexcept(VTable()))=default | |
Default constructor. | |
template<class Alloc > | |
TypeErased (std::allocator_arg_t, const Alloc &alloc) | |
Default constructor (allocator aware). | |
TypeErased (const TypeErased &other) | |
Copy constructor. | |
TypeErased (const TypeErased &other, const allocator_type &alloc) | |
Copy constructor (allocator aware). | |
TypeErased (std::allocator_arg_t, const allocator_type &alloc, const TypeErased &other) | |
Copy constructor (allocator aware). | |
TypeErased (TypeErased &&other) noexcept | |
Move constructor. | |
TypeErased (TypeErased &&other, const allocator_type &alloc) noexcept | |
Move constructor (allocator aware). | |
TypeErased (std::allocator_arg_t, const allocator_type &alloc, TypeErased &&other) noexcept | |
Move constructor (allocator aware). | |
template<class T , class Alloc > requires no_child_of_ours<T> | |
TypeErased (std::allocator_arg_t, const Alloc &alloc, T &&d) | |
Main constructor that type-erases the given argument. | |
template<class T , class Alloc , class... Args> | |
TypeErased (std::allocator_arg_t, const Alloc &alloc, std::in_place_type_t< T >, Args &&...args) | |
Main constructor that type-erases the object constructed from the given argument. | |
template<class T > requires no_child_of_ours<T> | |
TypeErased (T &&d) | |
template<class T , class... Args> | |
TypeErased (std::in_place_type_t< T >, Args &&...args) | |
Main constructor that type-erases the object constructed from the given argument. | |
operator bool () const noexcept | |
Check if this wrapper wraps an object. | |
bool | owns_referenced_object () const noexcept |
Check if this wrapper owns the storage of the wrapped object, or whether it simply stores a reference to an object that was allocated elsewhere. | |
bool | referenced_object_is_const () const noexcept |
Check if the wrapped object is const. | |
allocator_type | get_allocator () const noexcept |
Get a copy of the allocator. | |
const std::type_info & | type () const noexcept |
Query the contained type. | |
template<class T > requires (!std::is_const_v<T>) | |
T & | as () & |
Convert the type-erased object to the given type. | |
template<class T > requires (std::is_const_v<T>) | |
T & | as () const & |
Convert the type-erased object to the given type. | |
template<class T > | |
T && | as () && |
Convert the type-erased object to the given type. | |
void * | get_pointer () const |
Get a type-erased pointer to the wrapped object. | |
const void * | get_const_pointer () const |
Get a type-erased pointer to the wrapped object. | |
Static Public Member Functions | |
template<class T , class... Args> | |
static TypeErasedProblem | make (Args &&...args) |
template<class Ret , class T , class Alloc , class... Args> requires std::is_base_of_v<TypeErased, Ret> | |
static Ret | make (std::allocator_arg_t tag, const Alloc &alloc, Args &&...args) |
Construct a type-erased wrapper of type Ret for an object of type T, initialized in-place with the given arguments. | |
Static Public Attributes | |
static constexpr size_t | small_buffer_size = SmallBufferSize |
Protected Member Functions | |
template<class Ret , class... FArgs, class... Args> | |
decltype(auto) | call (Ret(*f)(const void *, FArgs...), Args &&...args) const |
Call the vtable function f with the given arguments args , implicitly passing the self pointer and vtable reference if necessary. | |
template<class Ret , class... FArgs, class... Args> | |
decltype(auto) | call (Ret(*f)(void *, FArgs...), Args &&...args) |
Call the vtable function f with the given arguments args , implicitly passing the self pointer and vtable reference if necessary. | |
template<class Ret > | |
decltype(auto) | call (Ret(*f)(const void *)) const |
Call the vtable function f with the given arguments args , implicitly passing the self pointer and vtable reference if necessary. | |
template<class Ret > | |
decltype(auto) | call (Ret(*f)(void *)) |
Call the vtable function f with the given arguments args , implicitly passing the self pointer and vtable reference if necessary. | |
template<class Ret > | |
decltype(auto) | call (Ret(*f)(const void *, const VTable &)) const |
Call the vtable function f with the given arguments args , implicitly passing the self pointer and vtable reference if necessary. | |
template<class Ret > | |
decltype(auto) | call (Ret(*f)(void *, const VTable &)) |
Call the vtable function f with the given arguments args , implicitly passing the self pointer and vtable reference if necessary. | |
template<class T , class... Args> | |
void | construct_inplace (Args &&...args) |
Ensure storage and construct the type-erased object of type T in-place. | |
template<class Ret > | |
decltype(auto) | call (Ret(*f)(const void *, const VTable &)) const |
Call the vtable function f with the given arguments args , implicitly passing the self pointer and vtable reference if necessary. | |
template<class Ret > | |
decltype(auto) | call (Ret(*f)(void *, const VTable &)) |
Call the vtable function f with the given arguments args , implicitly passing the self pointer and vtable reference if necessary. | |
Static Protected Member Functions | |
static bool | size_indicates_ownership (size_t size) |
static bool | size_indicates_const (size_t size) |
Protected Attributes | |
void * | self |
Pointer to the stored object. | |
VTable | vtable |
size_t | size = invalid_size |
Size required to store the object. | |
Static Protected Attributes | |
static constexpr size_t | invalid_size |
static constexpr size_t | mut_ref_size |
static constexpr size_t | const_ref_size |
Private Types | |
using | allocator_traits = std::allocator_traits< allocator_type > |
using | buffer_type = std::array< std::byte, small_buffer_size > |
Private Member Functions | |
Deallocator | allocate (size_t size) |
Ensure that storage is available, either by using the small buffer if it is large enough, or by calling the allocator. | |
void | deallocate () |
Deallocate the memory without invoking the destructor. | |
void | cleanup () |
Destroy the type-erased object (if not empty), and deallocate the memory if necessary. | |
template<bool CopyAllocator> | |
void | do_copy_assign (const TypeErased &other) |
Private Attributes | |
buffer_type | small_buffer |
allocator_type | allocator |
Static Private Attributes | |
template<class T > | |
static constexpr auto | no_child_of_ours |
True if T is not a child class of TypeErased. | |
using Sparsity = alpaqa::Sparsity<config_t> |
Definition at line 223 of file type-erased-problem.hpp.
using Box = alpaqa::Box<config_t> |
Definition at line 224 of file type-erased-problem.hpp.
using VTable = ProblemVTable<config_t> |
Definition at line 225 of file type-erased-problem.hpp.
Definition at line 226 of file type-erased-problem.hpp.
Definition at line 227 of file type-erased-problem.hpp.
|
privateinherited |
Definition at line 199 of file type-erasure.hpp.
|
privateinherited |
Definition at line 200 of file type-erasure.hpp.
|
inlinestatic |
Definition at line 237 of file type-erased-problem.hpp.
[Required] Number of decision variables.
Definition at line 728 of file type-erased-problem.hpp.
[Required] Number of constraints.
Definition at line 732 of file type-erased-problem.hpp.
[Required] Function that evaluates the cost, \( f(x) \)
[in] | x | Decision variable \( x \in \R^n \) |
Definition at line 757 of file type-erased-problem.hpp.
[Required] Function that evaluates the gradient of the cost, \( \nabla f(x) \)
[in] | x | Decision variable \( x \in \R^n \) |
[out] | grad_fx | Gradient of cost function \( \nabla f(x) \in \R^n \) |
Definition at line 761 of file type-erased-problem.hpp.
[Required] Function that evaluates the constraints, \( g(x) \)
[in] | x | Decision variable \( x \in \R^n \) |
[out] | gx | Value of the constraints \( g(x) \in \R^m \) |
Definition at line 765 of file type-erased-problem.hpp.
[Required] Function that evaluates the gradient of the constraints times a vector, \( \nabla g(x)\,y = \tp{\jac_g(x)}y \)
[in] | x | Decision variable \( x \in \R^n \) |
[in] | y | Vector \( y \in \R^m \) to multiply the gradient by |
[out] | grad_gxy | Gradient of the constraints \( \nabla g(x)\,y \in \R^n \) |
Definition at line 769 of file type-erased-problem.hpp.
[Required] Function that evaluates the difference between the given point \( z \) and its projection onto the constraint set \( D \).
[in] | z | Slack variable, \( z \in \R^m \) |
[out] | e | The difference relative to its projection, \( e = z - \Pi_D(z) \in \R^m \) |
z
and e
can refer to the same vector. Definition at line 737 of file type-erased-problem.hpp.
[Required] Function that projects the Lagrange multipliers for ALM.
[in,out] | y | Multipliers, \( y \leftarrow \Pi_Y(y) \in \R^m \) |
[in] | M | The radius/size of the set \( Y \). See ALMParams::max_multiplier. |
Definition at line 741 of file type-erased-problem.hpp.
[Required] Function that computes a proximal gradient step.
[in] | γ | Step size, \( \gamma \in \R_{>0} \) |
[in] | x | Decision variable \( x \in \R^n \) |
[in] | grad_ψ | Gradient of the subproblem cost, \( \nabla\psi(x) \in \R^n \) |
[out] | x̂ | Next proximal gradient iterate, \( \hat x = T_\gamma(x) = \prox_{\gamma h}(x - \gamma\nabla\psi(x)) \in \R^n \) |
[out] | p | The proximal gradient step, \( p = \hat x - x \in \R^n \) |
Definition at line 745 of file type-erased-problem.hpp.
[Optional] Function that computes the inactive indices \( \mathcal J(x) \) for the evaluation of the linear Newton approximation of the residual, as in [4].
[in] | γ | Step size, \( \gamma \in \R_{>0} \) |
[in] | x | Decision variable \( x \in \R^n \) |
[in] | grad_ψ | Gradient of the subproblem cost, \( \nabla\psi(x) \in \R^n \) |
[out] | J | The indices of the components of \( x \) that are in the index set \( \mathcal J(x) \). In ascending order, at most n. |
For example, in the case of box constraints, we have
\[ \mathcal J(x) \defeq \defset{i \in \N_{[0, n-1]}}{\underline x_i \lt x_i - \gamma\nabla_{\!x_i}\psi(x) \lt \overline x_i}. \]
Definition at line 750 of file type-erased-problem.hpp.
[Optional] Get the rectangular constraint set of the decision variables, \( x \in C \).
Definition at line 849 of file type-erased-problem.hpp.
[Optional] Get the rectangular constraint set of the general constraint function, \( g(x) \in D \).
Definition at line 853 of file type-erased-problem.hpp.
[Optional] Function that evaluates the nonzero values of the Jacobian matrix of the constraints, \( \jac_g(x) \)
[in] | x | Decision variable \( x \in \R^n \) |
[out] | J_values | Nonzero values of the Jacobian \( \jac_g(x) \in \R^{m\times n} \) |
Required for second-order solvers only.
Definition at line 777 of file type-erased-problem.hpp.
[Optional] Function that returns (a view of) the sparsity pattern of the Jacobian of the constraints.
Required for second-order solvers only.
Definition at line 781 of file type-erased-problem.hpp.
[Optional] Function that evaluates the gradient of one specific constraint, \( \nabla g_i(x) \)
[in] | x | Decision variable \( x \in \R^n \) |
[in] | i | Which constraint \( 0 \le i \lt m \) |
[out] | grad_gi | Gradient of the constraint \( \nabla g_i(x) \in \R^n \) |
Required for second-order solvers only.
Definition at line 773 of file type-erased-problem.hpp.
[Optional] Function that evaluates the Hessian of the Lagrangian multiplied by a vector, \( \nabla_{xx}^2L(x, y)\,v \)
[in] | x | Decision variable \( x \in \R^n \) |
[in] | y | Lagrange multipliers \( y \in \R^m \) |
[in] | scale | Scale factor for the cost function. |
[in] | v | Vector to multiply by \( v \in \R^n \) |
[out] | Hv | Hessian-vector product \( \nabla_{xx}^2 L(x, y)\,v \in \R^{n} \) |
Required for second-order solvers only.
Definition at line 785 of file type-erased-problem.hpp.
[Optional] Function that evaluates the nonzero values of the Hessian of the Lagrangian, \( \nabla_{xx}^2L(x, y) \)
[in] | x | Decision variable \( x \in \R^n \) |
[in] | y | Lagrange multipliers \( y \in \R^m \) |
[in] | scale | Scale factor for the cost function. |
[out] | H_values | Nonzero values of the Hessian \( \nabla_{xx}^2 L(x, y) \in \R^{n\times n} \). |
Required for second-order solvers only.
Definition at line 790 of file type-erased-problem.hpp.
[Optional] Function that returns (a view of) the sparsity pattern of the Hessian of the Lagrangian.
Required for second-order solvers only.
Definition at line 795 of file type-erased-problem.hpp.
[Optional] Function that evaluates the Hessian of the augmented Lagrangian multiplied by a vector, \( \nabla_{xx}^2L_\Sigma(x, y)\,v \)
[in] | x | Decision variable \( x \in \R^n \) |
[in] | y | Lagrange multipliers \( y \in \R^m \) |
[in] | Σ | Penalty weights \( \Sigma \) |
[in] | scale | Scale factor for the cost function. |
[in] | v | Vector to multiply by \( v \in \R^n \) |
[out] | Hv | Hessian-vector product \( \nabla_{xx}^2 L_\Sigma(x, y)\,v \in \R^{n} \) |
Required for second-order solvers only.
Definition at line 799 of file type-erased-problem.hpp.
[Optional] Function that evaluates the nonzero values of the Hessian of the augmented Lagrangian, \( \nabla_{xx}^2L_\Sigma(x, y) \)
[in] | x | Decision variable \( x \in \R^n \) |
[in] | y | Lagrange multipliers \( y \in \R^m \) |
[in] | Σ | Penalty weights \( \Sigma \) |
[in] | scale | Scale factor for the cost function. |
[out] | H_values | Nonzero values of the Hessian \( \nabla_{xx}^2 L_\Sigma(x, y) \in \R^{n\times n} \) |
Required for second-order solvers only.
Definition at line 804 of file type-erased-problem.hpp.
[Optional] Function that returns (a view of) the sparsity pattern of the Hessian of the augmented Lagrangian.
Required for second-order solvers only.
Definition at line 809 of file type-erased-problem.hpp.
[Optional] Evaluate both \( f(x) \) and its gradient, \( \nabla f(x) \).
Definition at line 813 of file type-erased-problem.hpp.
[Optional] Evaluate both \( f(x) \) and \( g(x) \).
Definition at line 817 of file type-erased-problem.hpp.
[Optional] Evaluate both \( \nabla f(x) \) and \( \nabla g(x)\,y \).
Definition at line 821 of file type-erased-problem.hpp.
[Optional] Evaluate the gradient of the Lagrangian \( \nabla_x L(x, y) = \nabla f(x) + \nabla g(x)\,y \)
Definition at line 826 of file type-erased-problem.hpp.
[Optional] Calculate both ψ(x) and the vector ŷ that can later be used to compute ∇ψ.
\[ \psi(x) = f(x) + \tfrac{1}{2} \text{dist}_\Sigma^2\left(g(x) + \Sigma^{-1}y,\;D\right) \]
\[ \hat y = \Sigma\, \left(g(x) + \Sigma^{-1}y - \Pi_D\left(g(x) + \Sigma^{-1}y\right)\right) \]
[in] | x | Decision variable \( x \) |
[in] | y | Lagrange multipliers \( y \) |
[in] | Σ | Penalty weights \( \Sigma \) |
[out] | ŷ | \( \hat y \) |
Definition at line 831 of file type-erased-problem.hpp.
[Optional] Calculate the gradient ∇ψ(x).
\[ \nabla \psi(x) = \nabla f(x) + \nabla g(x)\,\hat y(x) \]
[in] | x | Decision variable \( x \) |
[in] | y | Lagrange multipliers \( y \) |
[in] | Σ | Penalty weights \( \Sigma \) |
[out] | grad_ψ | \( \nabla \psi(x) \) |
work_n | Dimension \( n \) | |
work_m | Dimension \( m \) |
Definition at line 835 of file type-erased-problem.hpp.
[Optional] Calculate both ψ(x) and its gradient ∇ψ(x).
\[ \psi(x) = f(x) + \tfrac{1}{2} \text{dist}_\Sigma^2\left(g(x) + \Sigma^{-1}y,\;D\right) \]
\[ \nabla \psi(x) = \nabla f(x) + \nabla g(x)\,\hat y(x) \]
[in] | x | Decision variable \( x \) |
[in] | y | Lagrange multipliers \( y \) |
[in] | Σ | Penalty weights \( \Sigma \) |
[out] | grad_ψ | \( \nabla \psi(x) \) |
work_n | Dimension \( n \) | |
work_m | Dimension \( m \) |
Definition at line 840 of file type-erased-problem.hpp.
[Optional] Check that the problem formulation is well-defined, the dimensions match, etc.
Throws an exception if this is not the case.
Definition at line 857 of file type-erased-problem.hpp.
[Optional] Get a descriptive name for the problem.
Definition at line 861 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of eval_inactive_indices_res_lna.
Definition at line 574 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of eval_jac_g.
Definition at line 579 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of get_jac_g_sparsity.
Definition at line 584 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of eval_grad_gi.
Definition at line 589 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of eval_hess_L_prod.
Definition at line 594 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of eval_hess_L.
Definition at line 599 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of get_hess_L_sparsity.
Definition at line 604 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of eval_hess_ψ_prod.
Definition at line 609 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of eval_hess_ψ.
Definition at line 614 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of get_hess_ψ_sparsity.
Definition at line 619 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides a specialized implementation of eval_f_grad_f, false if it uses the default implementation.
Definition at line 624 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides a specialized implementation of eval_f_g, false if it uses the default implementation.
Definition at line 629 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides a specialized implementation of eval_grad_f_grad_g_prod, false if it uses the default implementation.
Definition at line 634 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides a specialized implementation of eval_grad_L, false if it uses the default implementation.
Definition at line 639 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides a specialized implementation of eval_ψ, false if it uses the default implementation.
Definition at line 644 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides a specialized implementation of eval_grad_ψ, false if it uses the default implementation.
Definition at line 647 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides a specialized implementation of eval_ψ_grad_ψ, false if it uses the default implementation.
Definition at line 652 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of get_box_C.
Definition at line 657 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of get_box_D.
Definition at line 662 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of check.
Definition at line 666 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of get_name.
Definition at line 668 of file type-erased-problem.hpp.
|
inline |
Returns true if eval_hess_ψ_prod can be called.
Definition at line 678 of file type-erased-problem.hpp.
|
inline |
Returns true if eval_hess_ψ can be called.
Definition at line 682 of file type-erased-problem.hpp.
Given g(x), compute the intermediate results ŷ and dᵀŷ that can later be used to compute ψ(x) and ∇ψ(x).
Computes the result using the following algorithm:
\[ \begin{aligned} \zeta &= g(x) + \Sigma^{-1} y \\[] d &= \zeta - \Pi_D(\zeta) = \operatorname{eval\_proj\_diff\_g}(\zeta, \zeta) \\[] \hat y &= \Sigma d \\[] \end{aligned} \]
[in,out] | g_ŷ | Input \( g(x) \), outputs \( \hat y \) |
[in] | y | Lagrange multipliers \( y \) |
[in] | Σ | Penalty weights \( \Sigma \) |
Definition at line 845 of file type-erased-problem.hpp.
|
defaultnoexcept |
Default constructor.
|
inline |
Default constructor (allocator aware).
Definition at line 236 of file type-erasure.hpp.
|
inline |
Copy constructor.
Definition at line 239 of file type-erasure.hpp.
|
inline |
Copy constructor (allocator aware).
Definition at line 246 of file type-erasure.hpp.
|
inline |
Copy constructor (allocator aware).
Definition at line 251 of file type-erasure.hpp.
|
inlinenoexcept |
Move constructor.
Definition at line 268 of file type-erasure.hpp.
|
inlinenoexcept |
Move constructor (allocator aware).
Definition at line 291 of file type-erasure.hpp.
|
inlinenoexcept |
Move constructor (allocator aware).
Definition at line 328 of file type-erasure.hpp.
|
inlineexplicit |
Main constructor that type-erases the given argument.
Definition at line 394 of file type-erasure.hpp.
|
inlineexplicit |
Main constructor that type-erases the object constructed from the given argument.
Definition at line 401 of file type-erasure.hpp.
|
inlineexplicit |
Requirement prevents this constructor from taking precedence over the copy and move constructors.
Definition at line 411 of file type-erasure.hpp.
|
inlineexplicit |
Main constructor that type-erases the object constructed from the given argument.
Definition at line 417 of file type-erasure.hpp.
Call the vtable function f
with the given arguments args
, implicitly passing the self pointer and vtable reference if necessary.
Definition at line 620 of file type-erasure.hpp.
Call the vtable function f
with the given arguments args
, implicitly passing the self pointer and vtable reference if necessary.
Definition at line 632 of file type-erasure.hpp.
Call the vtable function f
with the given arguments args
, implicitly passing the self pointer and vtable reference if necessary.
Definition at line 646 of file type-erasure.hpp.
Call the vtable function f
with the given arguments args
, implicitly passing the self pointer and vtable reference if necessary.
Definition at line 653 of file type-erasure.hpp.
Call the vtable function f
with the given arguments args
, implicitly passing the self pointer and vtable reference if necessary.
Definition at line 662 of file type-erasure.hpp.
Call the vtable function f
with the given arguments args
, implicitly passing the self pointer and vtable reference if necessary.
Definition at line 670 of file type-erasure.hpp.
|
inlinestaticinherited |
Construct a type-erased wrapper of type Ret for an object of type T, initialized in-place with the given arguments.
Definition at line 425 of file type-erasure.hpp.
|
inlineexplicitnoexceptinherited |
Check if this wrapper wraps an object.
False for default-constructed objects.
Definition at line 442 of file type-erasure.hpp.
|
inlinenoexceptinherited |
Check if this wrapper owns the storage of the wrapped object, or whether it simply stores a reference to an object that was allocated elsewhere.
Definition at line 447 of file type-erasure.hpp.
|
inlinenoexceptinherited |
Check if the wrapped object is const.
Definition at line 452 of file type-erasure.hpp.
|
inlinenoexceptinherited |
Get a copy of the allocator.
Definition at line 457 of file type-erasure.hpp.
|
inlinenoexceptinherited |
Query the contained type.
Definition at line 460 of file type-erasure.hpp.
|
inlineinherited |
Convert the type-erased object to the given type.
alpaqa::util::bad_type_erased_type | If T does not match the stored type. |
Definition at line 469 of file type-erasure.hpp.
|
inlineinherited |
Convert the type-erased object to the given type.
alpaqa::util::bad_type_erased_type | If T does not match the stored type. |
Definition at line 479 of file type-erasure.hpp.
|
inlineinherited |
Convert the type-erased object to the given type.
alpaqa::util::bad_type_erased_type | If T does not match the stored type. |
Definition at line 486 of file type-erasure.hpp.
|
inlineinherited |
Get a type-erased pointer to the wrapped object.
alpaqa::util::bad_type_erased_constness | If the wrapped object is const. |
Definition at line 498 of file type-erasure.hpp.
|
inlineinherited |
Get a type-erased pointer to the wrapped object.
Definition at line 504 of file type-erasure.hpp.
|
inlineprivateinherited |
Ensure that storage is available, either by using the small buffer if it is large enough, or by calling the allocator.
Returns a RAII wrapper that deallocates the storage unless released.
Definition at line 530 of file type-erasure.hpp.
|
inlineprivateinherited |
Deallocate the memory without invoking the destructor.
Definition at line 542 of file type-erasure.hpp.
|
inlineprivateinherited |
Destroy the type-erased object (if not empty), and deallocate the memory if necessary.
Definition at line 554 of file type-erasure.hpp.
|
inlineprotectedinherited |
Ensure storage and construct the type-erased object of type T in-place.
Definition at line 589 of file type-erasure.hpp.
|
inlineprotectedinherited |
Call the vtable function f
with the given arguments args
, implicitly passing the self pointer and vtable reference if necessary.
Definition at line 662 of file type-erasure.hpp.
|
inlineprotectedinherited |
Call the vtable function f
with the given arguments args
, implicitly passing the self pointer and vtable reference if necessary.
Definition at line 670 of file type-erasure.hpp.
|
protected |
Pointer to the stored object.
Definition at line 225 of file type-erasure.hpp.
|
protected |
Definition at line 228 of file type-erasure.hpp.
|
staticconstexprinherited |
Definition at line 195 of file type-erasure.hpp.
|
privateinherited |
Definition at line 201 of file type-erasure.hpp.
|
privateinherited |
Definition at line 202 of file type-erasure.hpp.
|
staticconstexprprivateinherited |
True if T
is not a child class of TypeErased.
Definition at line 207 of file type-erasure.hpp.
|
staticconstexprprotectedinherited |
Definition at line 211 of file type-erasure.hpp.
|
staticconstexprprotectedinherited |
Definition at line 213 of file type-erasure.hpp.
|
staticconstexprprotectedinherited |
Definition at line 215 of file type-erasure.hpp.
|
protectedinherited |
Size required to store the object.
Definition at line 227 of file type-erasure.hpp.