#include <alpaqa/config/config.hpp>
#include <alpaqa/export.hpp>
#include <alpaqa/inner/internal/solverstatus.hpp>
#include <alpaqa/outer/internal/alm-helpers.hpp>
#include <alpaqa/problem/type-erased-problem.hpp>
#include <chrono>
#include <iostream>
#include <string>
Go to the source code of this file.
Classes | |
struct | ALMParams< Conf > |
Parameters for the Augmented Lagrangian solver. More... | |
class | ALMSolver< InnerSolverT > |
Augmented Lagrangian Method solver. More... | |
struct | ALMSolver< InnerSolverT >::Stats |
Namespaces | |
namespace | alpaqa |
struct alpaqa::ALMParams |
Class Members | ||
---|---|---|
real_t | tolerance = real_t(1e-5) | Primal tolerance (used for stopping criterion of inner solver). |
real_t | dual_tolerance = real_t(1e-5) | Dual tolerance (constraint violation and complementarity). |
real_t | penalty_update_factor = 10 | Factor used in updating the penalty parameters. |
real_t | penalty_update_factor_lower = real_t(0.8) | Factor to reduce penalty_update_factor when inner convergence fails. |
real_t | min_penalty_update_factor = real_t(1.1) | Minimum value for penalty_update_factor after reduction because of inner convergence failure. |
real_t | initial_penalty = 1 |
Initial penalty parameter. When set to zero (which is the default), it is computed automatically, based on the constraint violation in the starting point and the parameter initial_penalty_factor. |
real_t | initial_penalty_factor = 20 |
Initial penalty parameter factor. Active if initial_penalty is set to zero. |
real_t | initial_penalty_lower = real_t(0.6) | Factor to reduce the initial penalty factor by if convergence fails in in the first iteration. |
real_t | initial_tolerance = 1 | Initial primal tolerance. |
real_t | initial_tolerance_increase = real_t(1.1) | Factor to increase the initial primal tolerance if convergence fails in the first iteration. |
real_t | tolerance_update_factor = real_t(1e-1) | Update factor for primal tolerance. |
real_t | ρ_increase = real_t(2) | Factor to increase the primal tolerance update factor by if convergence fails. |
real_t | ρ_max = real_t(0.5) | Maximum value of tolerance_update_factor after increase because of inner convergence failure. |
real_t | rel_penalty_increase_threshold = real_t(0.1) | Error tolerance for penalty increase. |
real_t | max_multiplier = real_t(1e9) | Lagrange multiplier bound. |
real_t | max_penalty = real_t(1e9) | Maximum penalty factor. |
real_t | min_penalty = real_t(1e-9) | Minimum penalty factor (used during initialization). |
unsigned int | max_iter = 100 | Maximum number of outer ALM iterations. |
nanoseconds | max_time = std::chrono::minutes(5) | Maximum duration. |
unsigned | max_num_initial_retries = 0 | How many times can the initial penalty initial_penalty or initial_penalty_factor and the initial primal tolerance initial_tolerance be reduced. |
unsigned | max_num_retries = 0 | How many times can the penalty update factor penalty_update_factor and the primal tolerance factor tolerance_update_factor be reduced. |
unsigned | max_total_num_retries = 0 | Combined limit for max_num_initial_retries and max_num_retries. |
unsigned | print_interval = 0 |
When to print progress. If set to zero, nothing will be printed. If set to N != 0, progress is printed every N iterations. |
int | print_precision = std::numeric_limits<real_t>::max_digits10 / 2 | The precision of the floating point values printed by the solver. |
bool | single_penalty_factor = false | Use one penalty factor for all m constraints. |
struct alpaqa::ALMSolver::Stats |
Class Members | ||
---|---|---|
unsigned | outer_iterations = 0 |
Total number of outer ALM iterations (i.e. the number of times that the inner solver was invoked). |
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.
|
InnerStatsAccumulator< typename Stats > | inner {} | The statistics of the inner solver invocations, accumulated over all ALM iterations. |