Augmented Lagrangian solver#

group grp_ALMSolver

Augmented Lagrangian Method solver (ALM).

template<class InnerSolverT>
class ALMSolver#
#include <alpaqa/outer/alm.hpp>

Augmented Lagrangian Method solver.

Public Types

using Params = ALMParams<config_t>#
using InnerSolver = InnerSolverT#
using Problem = typename InnerSolver::Problem#

Public Functions

inline ALMSolver(Params params, InnerSolver &&inner_solver)#
inline ALMSolver(Params params, const InnerSolver &inner_solver)#
Stats operator()(const Problem &problem, rvec x, rvec y, std::optional<rvec> Σ = std::nullopt)#
template<class P>
inline Stats operator()(const P &problem, rvec x, rvec y, std::optional<rvec> Σ = std::nullopt)#
inline std::string get_name() const#
inline void stop()#

Abort the computation and return the result so far.

Can be called from other threads or signal handlers.

inline const Params &get_params() const#

Public Members

InnerSolver inner_solver#
std::ostream *os = &std::cout#
struct Stats#
#include <alpaqa/outer/alm.hpp>

Public Members

unsigned outer_iterations = 0#

Total number of outer ALM iterations (i.e.

the number of times that the inner solver was invoked).

std::chrono::nanoseconds elapsed_time = {}#

Total elapsed time.

unsigned inner_convergence_failures = 0#

The total number of times that the inner solver failed to converge.

real_t ε = inf<config_t>#

Final primal tolerance that was reached, depends on the stopping criterion used by the inner solver, see for example PANOCStopCrit.

real_t δ = inf<config_t>#

Final dual tolerance or constraint violation that was reached:

\[ \delta = \| \Pi_D\left(g(x^k) + \Sigma^{-1}y\right) \|_\infty \]

real_t norm_penalty = 0#

2-norm of the final penalty factors \( \| \Sigma \|_2 \).

SolverStatus status = SolverStatus::Busy#

Whether the solver converged or not.

See also

SolverStatus

InnerStatsAccumulator<typename InnerSolver::Stats> inner = {}#

The statistics of the inner solver invocations, accumulated over all ALM iterations.