alpaqa no-casadi-dep
Nonconvex constrained optimization
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
BoxConstrProblem< Conf > Class Template Reference

#include <alpaqa/problem/box-constr-problem.hpp>

Detailed Description

template<Config Conf>
class alpaqa::BoxConstrProblem< Conf >

Implements common problem functions for minimization problems with box constraints.

Meant to be used as a base class for custom problem implementations. Supports optional \( \ell_1 \)-regularization.

Examples
C++/CustomCppProblem/main.cpp, and C++/FortranProblem/main.cpp.

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

+ Inheritance diagram for BoxConstrProblem< Conf >:
+ Collaboration diagram for BoxConstrProblem< Conf >:

Public Types

using Box = alpaqa::Box< config_t >
 

Public Member Functions

 BoxConstrProblem (length_t n, length_t m)
 Create a problem with inactive boxes \( (-\infty, +\infty) \), with no \( \ell_1 \)-regularization, and all general constraints handled using ALM.
 
 BoxConstrProblem (std::tuple< length_t, length_t > dims)
 Create a problem with inactive boxes \( (-\infty, +\infty) \), with no \( \ell_1 \)-regularization, and all general constraints handled using ALM.
 
 BoxConstrProblem (Box C, Box D, vec l1_reg=vec(0), index_t penalty_alm_split=0)
 
void resize (length_t n, length_t m)
 Change the dimensions of the problem (number of decision variables and number of constaints).
 
 BoxConstrProblem (const BoxConstrProblem &)=default
 
BoxConstrProblemoperator= (const BoxConstrProblem &)=default
 
 BoxConstrProblem (BoxConstrProblem &&) noexcept=default
 
BoxConstrProblemoperator= (BoxConstrProblem &&) noexcept=default
 
length_t get_n () const
 Number of decision variables, n.
 
length_t get_m () const
 Number of constraints, m.
 
real_t eval_prox_grad_step (real_t γ, crvec x, crvec grad_ψ, rvec x̂, rvec p) const
 
void eval_proj_diff_g (crvec z, rvec p) const
 
void eval_proj_multipliers (rvec y, real_t M) const
 
const Boxget_box_C () const
 
const Boxget_box_D () const
 
bool provides_get_box_C () 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
 
std::string get_name () 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

length_t n
 Number of decision variables, dimension of x.
 
length_t m
 Number of constraints, dimension of g(x) and z.
 
Box C {this->n}
 Constraints of the decision variables, \( x \in C \).
 
Box D {this->m}
 Other constraints, \( g(x) \in D \).
 
vec l1_reg {}
 \( \ell_1 \) (1-norm) regularization parameter.
 
index_t penalty_alm_split = 0
 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

template<Config Conf>
using Box = alpaqa::Box<config_t>

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

Constructor & Destructor Documentation

◆ BoxConstrProblem() [1/5]

template<Config Conf>
BoxConstrProblem ( length_t  n,
length_t  m 
)
inline

Create a problem with inactive boxes \( (-\infty, +\infty) \), with no \( \ell_1 \)-regularization, and all general constraints handled using ALM.

Parameters
nNumber of decision variables
mNumber of constraints

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

◆ BoxConstrProblem() [2/5]

template<Config Conf>
BoxConstrProblem ( std::tuple< length_t, length_t dims)
inline

Create a problem with inactive boxes \( (-\infty, +\infty) \), with no \( \ell_1 \)-regularization, and all general constraints handled using ALM.

Parameters
dimsNumber of variables and number of constraints.

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

◆ BoxConstrProblem() [3/5]

template<Config Conf>
BoxConstrProblem ( Box  C,
Box  D,
vec  l1_reg = vec(0),
index_t  penalty_alm_split = 0 
)
inline

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

◆ BoxConstrProblem() [4/5]

template<Config Conf>
BoxConstrProblem ( const BoxConstrProblem< Conf > &  )
default

◆ BoxConstrProblem() [5/5]

template<Config Conf>
BoxConstrProblem ( BoxConstrProblem< Conf > &&  )
defaultnoexcept

Member Function Documentation

◆ resize()

template<Config Conf>
void resize ( length_t  n,
length_t  m 
)
inline

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

Destructive: resizes and/or resets the members C, D, l1_reg and penalty_alm_split.

Parameters
nNumber of decision variables
mNumber of constraints

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

◆ operator=() [1/2]

template<Config Conf>
BoxConstrProblem & operator= ( const BoxConstrProblem< Conf > &  )
default

◆ operator=() [2/2]

template<Config Conf>
BoxConstrProblem & operator= ( BoxConstrProblem< Conf > &&  )
defaultnoexcept

◆ get_n()

template<Config Conf>
length_t get_n ( ) const
inline

Number of decision variables, n.

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

◆ get_m()

template<Config Conf>
length_t get_m ( ) const
inline

Number of constraints, m.

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

◆ eval_proj_grad_step_box()

template<Config Conf>
static real_t eval_proj_grad_step_box ( const Box C,
real_t  γ,
crvec  x,
crvec  grad_ψ,
rvec  ,
rvec  p 
)
inlinestatic

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 90 of file box-constr-problem.hpp.

+ Here is the caller graph for this function:

◆ eval_prox_grad_step_box_l1_impl()

template<Config Conf>
static void eval_prox_grad_step_box_l1_impl ( const Box C,
const auto λ,
real_t  γ,
crvec  x,
crvec  grad_ψ,
rvec  ,
rvec  p 
)
inlinestatic

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 113 of file box-constr-problem.hpp.

+ Here is the caller graph for this function:

◆ eval_prox_grad_step_box_l1()

template<Config Conf>
static real_t eval_prox_grad_step_box_l1 ( const Box C,
const auto λ,
real_t  γ,
crvec  x,
crvec  grad_ψ,
rvec  ,
rvec  p 
)
inlinestatic

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 122 of file box-constr-problem.hpp.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eval_prox_grad_step_box_l1_scal()

template<Config Conf>
static real_t eval_prox_grad_step_box_l1_scal ( const Box C,
real_t  λ,
real_t  γ,
crvec  x,
crvec  grad_ψ,
rvec  ,
rvec  p 
)
inlinestatic

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 130 of file box-constr-problem.hpp.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eval_prox_grad_step()

template<Config Conf>
real_t eval_prox_grad_step ( real_t  γ,
crvec  x,
crvec  grad_ψ,
rvec  ,
rvec  p 
) const
inline
See also
TypeErasedProblem::eval_prox_grad_step

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

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ eval_proj_diff_g()

template<Config Conf>
void eval_proj_diff_g ( crvec  z,
rvec  p 
) const
inline
See also
TypeErasedProblem::eval_proj_diff_g

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

+ Here is the caller graph for this function:

◆ eval_proj_multipliers_box()

template<Config Conf>
static void eval_proj_multipliers_box ( const Box D,
rvec  y,
real_t  M,
index_t  penalty_alm_split 
)
inlinestatic

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

+ Here is the caller graph for this function:

◆ eval_proj_multipliers()

template<Config Conf>
void eval_proj_multipliers ( rvec  y,
real_t  M 
) const
inline
See also
TypeErasedProblem::eval_proj_multipliers

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

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_box_C()

template<Config Conf>
const Box & get_box_C ( ) const
inline
See also
TypeErasedProblem::get_box_C

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

◆ get_box_D()

template<Config Conf>
const Box & get_box_D ( ) const
inline
See also
TypeErasedProblem::get_box_D

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

◆ provides_get_box_C()

template<Config Conf>
bool provides_get_box_C ( ) const
inline

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

See also
TypeErasedProblem::provides_get_box_C

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

+ Here is the caller graph for this function:

◆ eval_inactive_indices_res_lna()

template<Config Conf>
index_t eval_inactive_indices_res_lna ( real_t  γ,
crvec  x,
crvec  grad_ψ,
rindexvec  J 
) const
inline
See also
TypeErasedProblem::eval_inactive_indices_res_lna

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

+ Here is the caller graph for this function:

◆ check()

template<Config Conf>
void check ( ) const
inline
See also
TypeErasedProblem::check

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

+ Here is the call graph for this function:

◆ get_name()

template<Config Conf>
std::string get_name ( ) const
inline
See also
TypeErasedProblem::get_name

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

Member Data Documentation

◆ n

template<Config Conf>
length_t n

Number of decision variables, dimension of x.

Examples
C++/CustomCppProblem/main.cpp.

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

◆ m

template<Config Conf>
length_t m

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

Examples
C++/CustomCppProblem/main.cpp.

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

◆ C

template<Config Conf>
Box C {this->n}

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

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

◆ D

template<Config Conf>
Box D {this->m}

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

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

◆ l1_reg

template<Config Conf>
vec l1_reg {}

\( \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 72 of file box-constr-problem.hpp.

◆ penalty_alm_split

template<Config Conf>
index_t penalty_alm_split = 0

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 78 of file box-constr-problem.hpp.


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