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.