#include <alpaqa/include/alpaqa/problem/type-erased-problem.hpp>
Definition at line 208 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 [2]. | |
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, rindexvec inner_idx, rindexvec outer_ptr, rvec J_values) const |
[Optional] Function that evaluates the Jacobian of the constraints as a sparse matrix, \( \jac_g(x) \) | |
length_t | get_jac_g_num_nonzeros () const |
[Optional] Function that gets the number of nonzeros 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, rindexvec inner_idx, rindexvec outer_ptr, rvec H_values) const |
[Optional] Function that evaluates the Hessian of the Lagrangian as a sparse matrix, \( \nabla_{xx}^2L(x, y) \) | |
length_t | get_hess_L_num_nonzeros () const |
[Optional] Function that gets the number of nonzeros 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, rindexvec inner_idx, rindexvec outer_ptr, rvec H_values) const |
[Optional] Function that evaluates the Hessian of the augmented Lagrangian, \( \nabla_{xx}^2L_\Sigma(x, y) \) | |
length_t | get_hess_ψ_num_nonzeros () const |
[Optional] Function that gets the number of nonzeros 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. | |
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_num_nonzeros () const |
Returns true if the problem provides an implementation of get_jac_g_num_nonzeros. | |
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_num_nonzeros () const |
Returns true if the problem provides an implementation of get_hess_L_num_nonzeros. | |
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_ψ_num_nonzeros () const |
Returns true if the problem provides an implementation of get_hess_ψ_num_nonzeros. | |
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. | |
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 | 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()))=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, allocator_type alloc) | |
Copy constructor (allocator aware). | |
TypeErased (TypeErased &&other) noexcept | |
Move constructor. | |
TypeErased (TypeErased &&other, const allocator_type &alloc) noexcept | |
Move constructor (allocator aware). | |
template<class T , class Alloc > | |
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, te_in_place_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 (te_in_place_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. | |
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 > | |
T & | as () & |
Convert the type-erased object to the given type. | |
template<class T > | |
const T & | as () const & |
Convert the type-erased object to the given type. | |
template<class T > | |
const T && | as () && |
Convert the type-erased object to the given type. | |
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. | |
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 |
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 Box = alpaqa::Box<config_t> |
Definition at line 211 of file type-erased-problem.hpp.
using VTable = ProblemVTable<config_t> |
Definition at line 212 of file type-erased-problem.hpp.
using allocator_type = Allocator |
Definition at line 213 of file type-erased-problem.hpp.
using TypeErased = util::TypeErased<VTable, allocator_type> |
Definition at line 214 of file type-erased-problem.hpp.
|
privateinherited |
Definition at line 203 of file type-erasure.hpp.
|
privateinherited |
Definition at line 204 of file type-erasure.hpp.
|
inlinestatic |
Definition at line 224 of file type-erased-problem.hpp.
auto get_n |
[Required] Number of decision variables.
Definition at line 697 of file type-erased-problem.hpp.
auto get_m |
[Required] Number of constraints.
Definition at line 701 of file type-erased-problem.hpp.
auto eval_f | ( | crvec | x | ) | const |
[Required] Function that evaluates the cost, \( f(x) \)
[in] | x | Decision variable \( x \in \R^n \) |
Definition at line 726 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 730 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 734 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 738 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 706 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 710 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 714 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 [2].
[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 719 of file type-erased-problem.hpp.
auto get_box_C |
[Optional] Get the rectangular constraint set of the decision variables, \( x \in C \).
Definition at line 821 of file type-erased-problem.hpp.
auto get_box_D |
[Optional] Get the rectangular constraint set of the general constraint function, \( g(x) \in D \).
Definition at line 825 of file type-erased-problem.hpp.
[Optional] Function that evaluates the Jacobian of the constraints as a sparse matrix, \( \jac_g(x) \)
[in] | x | Decision variable \( x \in \R^n \) |
[in,out] | inner_idx | Inner indices (row indices of nonzeros). |
[in,out] | outer_ptr | Outer pointers (points to the first nonzero in each column). |
[out] | J_values | Nonzero values of the Jacobian \( \jac_g(x) \in \R^{m\times n} \) If J_values has size zero, this function should initialize inner_idx and outer_ptr . If J_values is nonempty, inner_idx and outer_ptr can be assumed to be initialized, and this function should evaluate J_values . |
Required for second-order solvers only.
Definition at line 746 of file type-erased-problem.hpp.
auto get_jac_g_num_nonzeros |
[Optional] Function that gets the number of nonzeros of the Jacobian of the constraints.
Required for second-order solvers only.
Definition at line 751 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 742 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 755 of file type-erased-problem.hpp.
void eval_hess_L | ( | crvec | x, |
crvec | y, | ||
real_t | scale, | ||
rindexvec | inner_idx, | ||
rindexvec | outer_ptr, | ||
rvec | H_values | ||
) | const |
[Optional] Function that evaluates the Hessian of the Lagrangian as a sparse matrix, \( \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. |
[in,out] | inner_idx | Inner indices (row indices of nonzeros). |
[in,out] | outer_ptr | Outer pointers (points to the first nonzero in each column). |
[out] | H_values | Nonzero values of the Hessian \( \nabla_{xx}^2 L(x, y) \in \R^{n\times n} \). If H_values has size zero, this function should initialize inner_idx and outer_ptr . If H_values is nonempty, inner_idx and outer_ptr can be assumed to be initialized, and this function should evaluate H_values . |
Required for second-order solvers only.
Definition at line 760 of file type-erased-problem.hpp.
auto get_hess_L_num_nonzeros |
[Optional] Function that gets the number of nonzeros of the Hessian of the Lagrangian.
Required for second-order solvers only.
Definition at line 766 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 770 of file type-erased-problem.hpp.
void eval_hess_ψ | ( | crvec | x, |
crvec | y, | ||
crvec | Σ, | ||
real_t | scale, | ||
rindexvec | inner_idx, | ||
rindexvec | outer_ptr, | ||
rvec | H_values | ||
) | const |
[Optional] Function that evaluates 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. |
[in,out] | inner_idx | Inner indices (row indices of nonzeros). |
[in,out] | outer_ptr | Outer pointers (points to the first nonzero in each column). |
[out] | H_values | Nonzero values of the Hessian \( \nabla_{xx}^2 L_\Sigma(x, y) \in \R^{n\times n} \) If H_values has size zero, this function should initialize inner_idx and outer_ptr . If H_values is nonempty, inner_idx and outer_ptr can be assumed to be initialized, and this function should evaluate H_values . |
Required for second-order solvers only.
Definition at line 775 of file type-erased-problem.hpp.
auto get_hess_ψ_num_nonzeros |
[Optional] Function that gets the number of nonzeros of the Hessian of the augmented Lagrangian.
Required for second-order solvers only.
Definition at line 781 of file type-erased-problem.hpp.
[Optional] Evaluate both \( f(x) \) and its gradient, \( \nabla f(x) \).
Definition at line 785 of file type-erased-problem.hpp.
[Optional] Evaluate both \( f(x) \) and \( g(x) \).
Definition at line 789 of file type-erased-problem.hpp.
[Optional] Evaluate both \( \nabla f(x) \) and \( \nabla g(x)\,y \).
Definition at line 793 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 798 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 803 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 807 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 812 of file type-erased-problem.hpp.
void check |
[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 829 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of eval_inactive_indices_res_lna.
Definition at line 577 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of eval_jac_g.
Definition at line 582 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of get_jac_g_num_nonzeros.
Definition at line 585 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of eval_grad_gi.
Definition at line 590 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of eval_hess_L_prod.
Definition at line 595 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of eval_hess_L.
Definition at line 600 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of get_hess_L_num_nonzeros.
Definition at line 603 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of eval_hess_ψ_prod.
Definition at line 608 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of eval_hess_ψ.
Definition at line 613 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of get_hess_ψ_num_nonzeros.
Definition at line 616 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 621 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 626 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 629 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 634 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 637 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 640 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 643 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of get_box_C.
Definition at line 648 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of get_box_D.
Definition at line 651 of file type-erased-problem.hpp.
|
inline |
Returns true if the problem provides an implementation of check.
Definition at line 653 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 817 of file type-erased-problem.hpp.
|
defaultnoexcept |
Default constructor.
|
inline |
Default constructor (allocator aware).
Definition at line 228 of file type-erasure.hpp.
|
inline |
Copy constructor.
Definition at line 230 of file type-erasure.hpp.
|
inline |
Copy constructor (allocator aware).
Definition at line 236 of file type-erasure.hpp.
|
inlinenoexcept |
Move constructor.
Definition at line 252 of file type-erasure.hpp.
|
inlinenoexcept |
Move constructor (allocator aware).
Definition at line 270 of file type-erasure.hpp.
|
inlineexplicit |
Main constructor that type-erases the given argument.
Definition at line 355 of file type-erasure.hpp.
|
inlineexplicit |
Main constructor that type-erases the object constructed from the given argument.
Definition at line 362 of file type-erasure.hpp.
|
inlineexplicit |
Requirement prevents this constructor from taking precedence over the copy and move constructors.
Definition at line 372 of file type-erasure.hpp.
|
inlineexplicit |
Main constructor that type-erases the object constructed from the given argument.
Definition at line 378 of file type-erasure.hpp.
|
inlineprotected |
Call the vtable function f
with the given arguments args
, implicitly passing the self pointer and vtable reference if necessary.
Definition at line 517 of file type-erasure.hpp.
|
inlineprotected |
Call the vtable function f
with the given arguments args
, implicitly passing the self pointer and vtable reference if necessary.
Definition at line 529 of file type-erasure.hpp.
|
inlineprotected |
Call the vtable function f
with the given arguments args
, implicitly passing the self pointer and vtable reference if necessary.
Definition at line 541 of file type-erasure.hpp.
|
inlineprotected |
Call the vtable function f
with the given arguments args
, implicitly passing the self pointer and vtable reference if necessary.
Definition at line 548 of file type-erasure.hpp.
|
inlineprotected |
Call the vtable function f
with the given arguments args
, implicitly passing the self pointer and vtable reference if necessary.
Definition at line 555 of file type-erasure.hpp.
|
inlineprotected |
Call the vtable function f
with the given arguments args
, implicitly passing the self pointer and vtable reference if necessary.
Definition at line 563 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 386 of file type-erasure.hpp.
|
inlineexplicitnoexceptinherited |
Check if this wrapper wraps an object.
False for default-constructed objects.
Definition at line 403 of file type-erasure.hpp.
|
inlinenoexceptinherited |
Get a copy of the allocator.
Definition at line 406 of file type-erasure.hpp.
|
inlinenoexceptinherited |
Query the contained type.
Definition at line 409 of file type-erasure.hpp.
|
inlineinherited |
Convert the type-erased object to the given type.
The type is checked in debug builds only, use with caution.
Definition at line 416 of file type-erasure.hpp.
|
inlineinherited |
Convert the type-erased object to the given type.
The type is checked in debug builds only, use with caution.
Definition at line 423 of file type-erasure.hpp.
|
inlineinherited |
Convert the type-erased object to the given type.
The type is checked in debug builds only, use with caution.
Definition at line 430 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 453 of file type-erasure.hpp.
|
inlineprivateinherited |
Deallocate the memory without invoking the destructor.
Definition at line 463 of file type-erasure.hpp.
|
inlineprivateinherited |
Destroy the type-erased object (if not empty), and deallocate the memory if necessary.
Definition at line 473 of file type-erasure.hpp.
|
inlineprivateinherited |
|
inlineprotectedinherited |
Ensure storage and construct the type-erased object of type T in-place.
Definition at line 501 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 555 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 563 of file type-erasure.hpp.
|
protected |
Pointer to the stored object.
Definition at line 218 of file type-erasure.hpp.
|
protected |
Definition at line 221 of file type-erasure.hpp.
|
staticconstexprinherited |
Definition at line 199 of file type-erasure.hpp.
|
privateinherited |
Definition at line 205 of file type-erasure.hpp.
|
privateinherited |
Definition at line 206 of file type-erasure.hpp.
|
staticconstexprprivateinherited |
True if T
is not a child class of TypeErased.
Definition at line 211 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 220 of file type-erasure.hpp.