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)
-
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
-
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 initial_penalty_reduced = 0
The number of times that the initial penalty factor was reduced by ALMParams::initial_penalty_lower and that the initial tolerance was increased by ALMParams::initial_tolerance_increase because the inner solver failed to converge in the first ALM iteration.
If this number is greater than zero, consider lowering the initial penalty factor ALMParams::initial_penalty or ALMParams::initial_penalty_factor or increasing the initial tolerance ALMParams::initial_tolerance (or both).
-
unsigned penalty_reduced = 0
The number of times that the penalty update factor ALMParams::penalty_update_factor was reduced, that the tolerance update factor ALMParams::tolerance_update_factor was increased, and that an ALM iteration had to be restarted with a lower penalty factor and a higher tolerance because the inner solver failed to converge (not applicable in the first ALM iteration).
If this number is greater than zero, consider lowerering the penalty update factor ALMParams::penalty_update_factor or increasing the tolerance update factor (or both). Lowering the initial penalty factor could help as well.
-
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
-
InnerStatsAccumulator<typename InnerSolver::Stats> inner = {}
The statistics of the inner solver invocations, accumulated over all ALM iterations.
-
unsigned outer_iterations = 0
-
using Params = ALMParams<config_t>
-
template<class InnerSolverT>