Nonconvex constrained optimization
Loading...
Searching...
No Matches
FunctionalProblem< Conf > Class Template Reference

#include <alpaqa/problem/functional-problem.hpp>

Detailed Description

template<Config Conf = DefaultConfig>
class alpaqa::FunctionalProblem< Conf >

Problem class that allows specifying the basic functions as C++ std::functions.

Definition at line 12 of file functional-problem.hpp.

Inheritance diagram for FunctionalProblem< Conf >:
Collaboration diagram for FunctionalProblem< Conf >:

Public Types

using Box

Public Member Functions

real_t eval_objective (crvec x) const
void eval_objective_gradient (crvec x, rvec grad_fx) const
void eval_constraints (crvec x, rvec gx) const
void eval_constraints_gradient_product (crvec x, crvec y, rvec grad_gxy) const
void eval_grad_gi (crvec x, index_t i, rvec grad_gix) const
void eval_lagrangian_hessian_product (crvec x, crvec y, real_t scale, crvec v, rvec Hv) const
void eval_augmented_lagrangian_hessian_product (crvec x, crvec y, crvec Σ, real_t scale, crvec v, rvec Hv) const
void eval_constraints_jacobian (crvec x, rvec J_values) const
void eval_lagrangian_hessian (crvec x, crvec y, real_t scale, rvec H_values) const
void eval_augmented_lagrangian_hessian (crvec x, crvec y, crvec Σ, real_t scale, rvec H_values) const
bool provides_eval_grad_gi () const
bool provides_eval_constraints_jacobian () const
bool provides_eval_lagrangian_hessian_product () const
bool provides_eval_lagrangian_hessian () const
bool provides_eval_augmented_lagrangian_hessian_product () const
bool provides_eval_augmented_lagrangian_hessian () const
std::string get_name () const
 FunctionalProblem (const FunctionalProblem &)=default
FunctionalProblemoperator= (const FunctionalProblem &)=default
 FunctionalProblem (FunctionalProblem &&) noexcept=default
FunctionalProblemoperator= (FunctionalProblem &&) noexcept=default
void resize (length_t num_variables, length_t num_constraints)
 Change the dimensions of the problem (number of decision variables and number of constraints).
length_t get_num_variables () const
 Number of decision variables \( n \), num_variables.
length_t get_num_constraints () const
 Number of constraints \( m \), num_constraints.
real_t eval_proximal_gradient_step (real_t γ, crvec x, crvec grad_ψ, rvec x̂, rvec p) const
void eval_projecting_difference_constraints (crvec z, rvec p) const
void eval_projection_multipliers (rvec y, real_t M) const
const Boxget_variable_bounds () const
const Boxget_general_bounds () const
bool provides_get_variable_bounds () const
 Only supported if the ℓ₁-regularization term is zero.
index_t eval_inactive_indices_res_lna (real_t γ, crvec x, crvec grad_ψ, rindexvec J) const
void check () const

Static Public Member Functions

static real_t eval_proj_grad_step_box (const Box &C, real_t γ, crvec x, crvec grad_ψ, rvec x̂, rvec p)
 Projected gradient step for rectangular box C.
static void eval_prox_grad_step_box_l1_impl (const Box &C, const auto &λ, real_t γ, crvec x, crvec grad_ψ, rvec x̂, rvec p)
 Proximal gradient step for rectangular box C with ℓ₁-regularization.
static real_t eval_prox_grad_step_box_l1 (const Box &C, const auto &λ, real_t γ, crvec x, crvec grad_ψ, rvec x̂, rvec p)
 Proximal gradient step for rectangular box C with ℓ₁-regularization.
static real_t eval_prox_grad_step_box_l1_scal (const Box &C, real_t λ, real_t γ, crvec x, crvec grad_ψ, rvec x̂, rvec p)
 Proximal gradient step for rectangular box C with ℓ₁-regularization.
static void eval_proj_multipliers_box (const Box &D, rvec y, real_t M, index_t penalty_alm_split)

Public Attributes

std::function< real_t(crvec)> f
std::function< void(crvec, rvec)> grad_f
std::function< void(crvec, rvec)> g
std::function< void(crvec, crvec, rvec)> grad_g_prod
std::function< void(crvec, index_t, rvec)> grad_gi
std::function< void(crvec, rmat)> jac_g
std::function< void(crvec, crvec, real_t, crvec, rvec)> hess_L_prod
std::function< void(crvec, crvec, real_t, rmat)> hess_L
std::function< void(crvec, crvec, crvec, real_t, crvec, rvec)> hess_ψ_prod
std::function< void(crvec, crvec, crvec, real_t, rmat)> hess_ψ
length_t num_variables
 Number of decision variables, dimension of x.
length_t num_constraints
 Number of constraints, dimension of g(x) and z.
Box variable_bounds
 Constraints of the decision variables, \( x \in C \).
Box general_bounds
 Other constraints, \( g(x) \in D \).
vec l1_reg
 \( \ell_1 \) (1-norm) regularization parameter.
index_t penalty_alm_split
 Components of the constraint function with indices below this number are handled using a quadratic penalty method rather than using an augmented Lagrangian method.

Member Typedef Documentation

◆ Box

using Box
inherited

Definition at line 19 of file box-constr-problem.hpp.

Constructor & Destructor Documentation

◆ FunctionalProblem() [1/2]

template<Config Conf = DefaultConfig>
FunctionalProblem ( const FunctionalProblem< Conf > & )
default
Here is the call graph for this function:
Here is the caller graph for this function:

◆ FunctionalProblem() [2/2]

template<Config Conf = DefaultConfig>
FunctionalProblem ( FunctionalProblem< Conf > && )
defaultnoexcept
Here is the call graph for this function:

Member Function Documentation

◆ eval_objective()

template<Config Conf = DefaultConfig>
real_t eval_objective ( crvec x) const
inline

Definition at line 29 of file functional-problem.hpp.

◆ eval_objective_gradient()

template<Config Conf = DefaultConfig>
void eval_objective_gradient ( crvec x,
rvec grad_fx ) const
inline

Definition at line 30 of file functional-problem.hpp.

◆ eval_constraints()

template<Config Conf = DefaultConfig>
void eval_constraints ( crvec x,
rvec gx ) const
inline

Definition at line 31 of file functional-problem.hpp.

◆ eval_constraints_gradient_product()

template<Config Conf = DefaultConfig>
void eval_constraints_gradient_product ( crvec x,
crvec y,
rvec grad_gxy ) const
inline

Definition at line 32 of file functional-problem.hpp.

◆ eval_grad_gi()

template<Config Conf = DefaultConfig>
void eval_grad_gi ( crvec x,
index_t i,
rvec grad_gix ) const
inline

Definition at line 33 of file functional-problem.hpp.

◆ eval_lagrangian_hessian_product()

template<Config Conf = DefaultConfig>
void eval_lagrangian_hessian_product ( crvec x,
crvec y,
real_t scale,
crvec v,
rvec Hv ) const
inline

Definition at line 34 of file functional-problem.hpp.

◆ eval_augmented_lagrangian_hessian_product()

template<Config Conf = DefaultConfig>
void eval_augmented_lagrangian_hessian_product ( crvec x,
crvec y,
crvec Σ,
real_t scale,
crvec v,
rvec Hv ) const
inline

Definition at line 35 of file functional-problem.hpp.

◆ eval_constraints_jacobian()

template<Config Conf = DefaultConfig>
void eval_constraints_jacobian ( crvec x,
rvec J_values ) const
inline

Definition at line 37 of file functional-problem.hpp.

◆ eval_lagrangian_hessian()

template<Config Conf = DefaultConfig>
void eval_lagrangian_hessian ( crvec x,
crvec y,
real_t scale,
rvec H_values ) const
inline

Definition at line 41 of file functional-problem.hpp.

◆ eval_augmented_lagrangian_hessian()

template<Config Conf = DefaultConfig>
void eval_augmented_lagrangian_hessian ( crvec x,
crvec y,
crvec Σ,
real_t scale,
rvec H_values ) const
inline

Definition at line 45 of file functional-problem.hpp.

◆ provides_eval_grad_gi()

template<Config Conf = DefaultConfig>
bool provides_eval_grad_gi ( ) const
inlinenodiscard
See also
provides_eval_grad_gi

Definition at line 52 of file functional-problem.hpp.

◆ provides_eval_constraints_jacobian()

template<Config Conf = DefaultConfig>
bool provides_eval_constraints_jacobian ( ) const
inlinenodiscard
See also
provides_eval_constraints_jacobian

Definition at line 54 of file functional-problem.hpp.

◆ provides_eval_lagrangian_hessian_product()

template<Config Conf = DefaultConfig>
bool provides_eval_lagrangian_hessian_product ( ) const
inlinenodiscard

◆ provides_eval_lagrangian_hessian()

template<Config Conf = DefaultConfig>
bool provides_eval_lagrangian_hessian ( ) const
inlinenodiscard
See also
provides_eval_lagrangian_hessian

Definition at line 60 of file functional-problem.hpp.

◆ provides_eval_augmented_lagrangian_hessian_product()

template<Config Conf = DefaultConfig>
bool provides_eval_augmented_lagrangian_hessian_product ( ) const
inlinenodiscard

◆ provides_eval_augmented_lagrangian_hessian()

template<Config Conf = DefaultConfig>
bool provides_eval_augmented_lagrangian_hessian ( ) const
inlinenodiscard

◆ get_name()

template<Config Conf = DefaultConfig>
std::string get_name ( ) const
inlinenodiscard
See also
get_name

Definition at line 69 of file functional-problem.hpp.

◆ operator=() [1/2]

template<Config Conf = DefaultConfig>
FunctionalProblem & operator= ( const FunctionalProblem< Conf > & )
default
Here is the call graph for this function:

◆ operator=() [2/2]

template<Config Conf = DefaultConfig>
FunctionalProblem & operator= ( FunctionalProblem< Conf > && )
defaultnoexcept
Here is the call graph for this function:

◆ resize()

void resize ( length_t num_variables,
length_t num_constraints )
inlineinherited

Change the dimensions of the problem (number of decision variables and number of constraints).

Destructive: resizes and/or resets the members variable_bounds, general_bounds, l1_reg and penalty_alm_split.

Parameters
num_variablesNumber of decision variables
num_constraintsNumber of constraints

Definition at line 47 of file box-constr-problem.hpp.

◆ get_num_variables()

length_t get_num_variables ( ) const
inlineinherited

Number of decision variables \( n \), num_variables.

Examples
C++/DLProblem/main.cpp.

Definition at line 83 of file box-constr-problem.hpp.

◆ get_num_constraints()

length_t get_num_constraints ( ) const
inlineinherited

Number of constraints \( m \), num_constraints.

Examples
C++/DLProblem/main.cpp.

Definition at line 85 of file box-constr-problem.hpp.

◆ eval_proj_grad_step_box()

real_t eval_proj_grad_step_box ( const Box & C,
real_t γ,
crvec x,
crvec grad_ψ,
rvec ,
rvec p )
inlinestaticinherited

Projected gradient step for rectangular box C.

\[ \begin{aligned} \hat x &= \Pi_C(x - \gamma\nabla\psi(x)) \\ p &= \hat x - x \\ &= \max(\underline x - x, \;\min(-\gamma\nabla\psi(x), \overline x - x) \end{aligned} \]

Definition at line 92 of file box-constr-problem.hpp.

◆ eval_prox_grad_step_box_l1_impl()

void eval_prox_grad_step_box_l1_impl ( const Box & C,
const auto & λ,
real_t γ,
crvec x,
crvec grad_ψ,
rvec ,
rvec p )
inlinestaticinherited

Proximal gradient step for rectangular box C with ℓ₁-regularization.

\[ \begin{aligned} h(x) &= \|x\|_1 + \delta_C(x) \\ \hat x &= \prox_{\gamma h}(x - \gamma\nabla\psi(x)) \\ &= -\max\big( x - \overline x, \;\min\big( x - \underline x, \;\min\big( \gamma(\nabla\psi(x) + \lambda), \;\max\big( \gamma(\nabla\psi(x) - \lambda), x \big) \big) \big) \big) \end{aligned} \]

Definition at line 115 of file box-constr-problem.hpp.

◆ eval_prox_grad_step_box_l1()

real_t eval_prox_grad_step_box_l1 ( const Box & C,
const auto & λ,
real_t γ,
crvec x,
crvec grad_ψ,
rvec ,
rvec p )
inlinestaticinherited

Proximal gradient step for rectangular box C with ℓ₁-regularization.

\[ \begin{aligned} h(x) &= \|x\|_1 + \delta_C(x) \\ \hat x &= \prox_{\gamma h}(x - \gamma\nabla\psi(x)) \\ &= -\max\big( x - \overline x, \;\min\big( x - \underline x, \;\min\big( \gamma(\nabla\psi(x) + \lambda), \;\max\big( \gamma(\nabla\psi(x) - \lambda), x \big) \big) \big) \big) \end{aligned} \]

Definition at line 124 of file box-constr-problem.hpp.

◆ eval_prox_grad_step_box_l1_scal()

real_t eval_prox_grad_step_box_l1_scal ( const Box & C,
real_t λ,
real_t γ,
crvec x,
crvec grad_ψ,
rvec ,
rvec p )
inlinestaticinherited

Proximal gradient step for rectangular box C with ℓ₁-regularization.

\[ \begin{aligned} h(x) &= \|x\|_1 + \delta_C(x) \\ \hat x &= \prox_{\gamma h}(x - \gamma\nabla\psi(x)) \\ &= -\max\big( x - \overline x, \;\min\big( x - \underline x, \;\min\big( \gamma(\nabla\psi(x) + \lambda), \;\max\big( \gamma(\nabla\psi(x) - \lambda), x \big) \big) \big) \big) \end{aligned} \]

Definition at line 132 of file box-constr-problem.hpp.

◆ eval_proximal_gradient_step()

real_t eval_proximal_gradient_step ( real_t γ,
crvec x,
crvec grad_ψ,
rvec ,
rvec p ) const
inlineinherited
See also
eval_proximal_gradient_step

Definition at line 142 of file box-constr-problem.hpp.

◆ eval_projecting_difference_constraints()

void eval_projecting_difference_constraints ( crvec z,
rvec p ) const
inlineinherited

◆ eval_proj_multipliers_box()

void eval_proj_multipliers_box ( const Box & D,
rvec y,
real_t M,
index_t penalty_alm_split )
inlinestaticinherited

Definition at line 157 of file box-constr-problem.hpp.

◆ eval_projection_multipliers()

void eval_projection_multipliers ( rvec y,
real_t M ) const
inlineinherited
See also
eval_projection_multipliers

Definition at line 173 of file box-constr-problem.hpp.

◆ get_variable_bounds()

const Box & get_variable_bounds ( ) const
inlineinherited
See also
get_variable_bounds

Definition at line 178 of file box-constr-problem.hpp.

◆ get_general_bounds()

const Box & get_general_bounds ( ) const
inlineinherited
See also
get_general_bounds

Definition at line 180 of file box-constr-problem.hpp.

◆ provides_get_variable_bounds()

bool provides_get_variable_bounds ( ) const
inlinenodiscardinherited

Only supported if the ℓ₁-regularization term is zero.

See also
provides_get_variable_bounds

Definition at line 184 of file box-constr-problem.hpp.

◆ eval_inactive_indices_res_lna()

index_t eval_inactive_indices_res_lna ( real_t γ,
crvec x,
crvec grad_ψ,
rindexvec J ) const
inlineinherited
See also
eval_inactive_indices_res_lna

Definition at line 194 of file box-constr-problem.hpp.

◆ check()

void check ( ) const
inlineinherited
See also
check

Definition at line 233 of file box-constr-problem.hpp.

Member Data Documentation

◆ f

template<Config Conf = DefaultConfig>
std::function<real_t(crvec)> f

Definition at line 17 of file functional-problem.hpp.

◆ grad_f

template<Config Conf = DefaultConfig>
std::function<void(crvec, rvec)> grad_f

Definition at line 18 of file functional-problem.hpp.

◆ g

template<Config Conf = DefaultConfig>
std::function<void(crvec, rvec)> g

Definition at line 19 of file functional-problem.hpp.

◆ grad_g_prod

template<Config Conf = DefaultConfig>
std::function<void(crvec, crvec, rvec)> grad_g_prod

Definition at line 20 of file functional-problem.hpp.

◆ grad_gi

template<Config Conf = DefaultConfig>
std::function<void(crvec, index_t, rvec)> grad_gi

Definition at line 21 of file functional-problem.hpp.

◆ jac_g

template<Config Conf = DefaultConfig>
std::function<void(crvec, rmat)> jac_g

Definition at line 22 of file functional-problem.hpp.

◆ hess_L_prod

template<Config Conf = DefaultConfig>
std::function<void(crvec, crvec, real_t, crvec, rvec)> hess_L_prod

Definition at line 23 of file functional-problem.hpp.

◆ hess_L

template<Config Conf = DefaultConfig>
std::function<void(crvec, crvec, real_t, rmat)> hess_L

Definition at line 24 of file functional-problem.hpp.

◆ hess_ψ_prod

template<Config Conf = DefaultConfig>
std::function<void(crvec, crvec, crvec, real_t, crvec, rvec)> hess_ψ_prod

Definition at line 25 of file functional-problem.hpp.

◆ hess_ψ

template<Config Conf = DefaultConfig>
std::function<void(crvec, crvec, crvec, real_t, rmat)> hess_ψ

Definition at line 26 of file functional-problem.hpp.

◆ num_variables

length_t num_variables
inherited

Number of decision variables, dimension of x.

Definition at line 22 of file box-constr-problem.hpp.

◆ num_constraints

length_t num_constraints
inherited

Number of constraints, dimension of g(x) and z.

Definition at line 24 of file box-constr-problem.hpp.

◆ variable_bounds

Box variable_bounds
inherited

Constraints of the decision variables, \( x \in C \).

Examples
C++/DLProblem/main.cpp.

Definition at line 67 of file box-constr-problem.hpp.

◆ general_bounds

Box general_bounds
inherited

Other constraints, \( g(x) \in D \).

Examples
C++/DLProblem/main.cpp.

Definition at line 69 of file box-constr-problem.hpp.

◆ l1_reg

vec l1_reg
inherited

\( \ell_1 \) (1-norm) regularization parameter.

Possible dimensions are: \( 0 \) (no regularization), \( 1 \) (a single scalar factor), or \( n \) (a different factor for each variable).

Definition at line 74 of file box-constr-problem.hpp.

◆ penalty_alm_split

index_t penalty_alm_split
inherited

Components of the constraint function with indices below this number are handled using a quadratic penalty method rather than using an augmented Lagrangian method.

Specifically, the Lagrange multipliers for these components (which determine the shifts in ALM) are kept at zero.

Definition at line 80 of file box-constr-problem.hpp.


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