PANOC-ALM  quadratic-penalty
Nonconvex constrained optimization
decl/alm.hpp
Go to the documentation of this file.
1 #pragma once
2 
6 
7 #include <chrono>
8 #include <string>
9 
10 namespace pa {
11 
13 struct ALMParams {
15  real_t ε = 1e-5;
17  real_t δ = 1e-5;
19  real_t Δ = 10;
29  real_t σ₀ = 20;
39  real_t ρ = 1e-1;
44  real_t θ = 0.1;
46  real_t M = 1e9;
48  real_t Σ_max = 1e9;
50  real_t Σ_min = 1e-9;
52  unsigned int max_iter = 100;
54  std::chrono::microseconds max_time = std::chrono::minutes(5);
55 
59  unsigned max_num_initial_retries = 20;
62  unsigned max_num_retries = 20;
65  unsigned max_total_num_retries = 40;
66 
69  unsigned print_interval = 0;
70 
73  bool preconditioning = true;
75  bool single_penalty_factor = false;
76 };
77 
81 template <class InnerSolverT = PANOCSolver<>>
82 class ALMSolver {
83  public:
84  using Params = ALMParams;
85  using InnerSolver = InnerSolverT;
86 
87  struct Stats {
88  unsigned outer_iterations = 0;
89  std::chrono::microseconds elapsed_time;
91  unsigned penalty_reduced = 0;
96 
97  SolverStatus status = SolverStatus::Unknown;
98 
100  };
101 
103  : params(params),
104  inner_solver(std::forward<InnerSolver>(inner_solver)) {}
107 
108  Stats operator()(const Problem &problem, rvec y, rvec x);
109 
110  std::string get_name() const {
111  return "ALMSolver<" + inner_solver.get_name() + ">";
112  }
113 
116  void stop() { inner_solver.stop(); }
117 
118  const Params &get_params() const { return params; }
119 
120  private:
122 
123  public:
125 };
126 
127 template <class InnerSolverT = PANOCSolverFull<>>
129  public:
130  using Params = ALMParams;
131  using InnerSolver = InnerSolverT;
132 
133  struct Stats {
134  unsigned outer_iterations = 0;
135  std::chrono::microseconds elapsed_time;
137  unsigned penalty_reduced = 0;
145 
146  SolverStatus status = SolverStatus::Unknown;
147 
149 
150  Stats(int m2) : penalty₂(m2) {}
151  };
152 
154  : params(params),
155  inner_solver(std::forward<InnerSolver>(inner_solver)) {}
158 
159  Stats operator()(const ProblemFull &problem, rvec y, rvec x);
160 
161  std::string get_name() const {
162  return "ALMSolver<" + inner_solver.get_name() + ">";
163  }
164 
167  void stop() { inner_solver.stop(); }
168 
169  const Params &get_params() const { return params; }
170 
171  private:
173 
174  public:
176 };
177 
178 } // namespace pa
pa::ALMParams::Σ_min
real_t Σ_min
Minimum penalty factor (used during initialization).
Definition: decl/alm.hpp:50
pa::ALMSolver::params
Params params
Definition: decl/alm.hpp:121
pa::ALMSolverFull::Stats::initial_penalty_reduced
unsigned initial_penalty_reduced
Definition: decl/alm.hpp:136
pa::ALMSolver::InnerSolver
InnerSolverT InnerSolver
Definition: decl/alm.hpp:85
pa::ALMSolverFull::Stats::norm_penalty₁
real_t norm_penalty₁
Definition: decl/alm.hpp:142
pa::ALMParams::ε₀_increase
real_t ε₀_increase
Factor to increase the initial primal tolerance if convergence fails in the first iteration.
Definition: decl/alm.hpp:37
panoc-fwd.hpp
pa::ALMSolver::Stats
Definition: decl/alm.hpp:87
pa::rvec
Eigen::Ref< vec > rvec
Default type for mutable references to vectors.
Definition: vec.hpp:16
pa::ALMSolverFull::get_params
const Params & get_params() const
Definition: decl/alm.hpp:169
pa::ALMParams::θ
real_t θ
Error tolerance for penalty increase.
Definition: decl/alm.hpp:44
panocpy.test.y
y
Definition: test.py:76
pa::ALMSolverFull::get_name
std::string get_name() const
Definition: decl/alm.hpp:161
pa::ALMParams::max_iter
unsigned int max_iter
Maximum number of outer ALM iterations.
Definition: decl/alm.hpp:52
pa::ALMSolverFull::params
Params params
Definition: decl/alm.hpp:172
pa::SolverStatus
SolverStatus
Exit status of a numerical solver such as ALM or PANOC.
Definition: solverstatus.hpp:7
pa::ALMSolverFull::ALMSolverFull
ALMSolverFull(Params params, const InnerSolver &inner_solver)
Definition: decl/alm.hpp:156
pa::ALMSolverFull::Stats::inner_convergence_failures
unsigned inner_convergence_failures
Definition: decl/alm.hpp:138
pa::ALMSolver::get_params
const Params & get_params() const
Definition: decl/alm.hpp:118
pa::ALMSolverFull::Stats::δ₁
real_t δ₁
Definition: decl/alm.hpp:140
pa::ALMSolver::Stats::δ
real_t δ
Definition: decl/alm.hpp:94
pa::vec
realvec vec
Default type for vectors.
Definition: vec.hpp:14
pa::ALMSolver::Stats::norm_penalty
real_t norm_penalty
Definition: decl/alm.hpp:95
pa::ALMSolver::Stats::initial_penalty_reduced
unsigned initial_penalty_reduced
Definition: decl/alm.hpp:90
pa::ALMParams::print_interval
unsigned print_interval
When to print progress.
Definition: decl/alm.hpp:69
pa::ALMSolverFull::Stats::ε
real_t ε
Definition: decl/alm.hpp:139
pa::ALMSolver::get_name
std::string get_name() const
Definition: decl/alm.hpp:110
main.problem
problem
Definition: main.py:16
pa::ALMSolver::Stats::inner
InnerStatsAccumulator< typename InnerSolver::Stats > inner
Definition: decl/alm.hpp:99
pa::ALMSolver::Stats::ε
real_t ε
Definition: decl/alm.hpp:93
pa::ALMSolver::inner_solver
InnerSolver inner_solver
Definition: decl/alm.hpp:124
pa::ALMSolver::ALMSolver
ALMSolver(Params params, const InnerSolver &inner_solver)
Definition: decl/alm.hpp:105
pa::ALMSolver
Augmented Lagrangian Method solver.
Definition: decl/alm.hpp:82
pa::ALMSolverFull::ALMSolverFull
ALMSolverFull(Params params, InnerSolver &&inner_solver)
Definition: decl/alm.hpp:153
pa::ALMSolverFull
Definition: decl/alm.hpp:128
pa::ALMSolverFull::operator()
Stats operator()(const ProblemFull &problem, rvec y, rvec x)
Definition: alm.hpp:190
pa
Definition: alm.hpp:10
panocpy.test.x
x
Definition: test.py:40
pa::ALMSolverFull::Stats::elapsed_time
std::chrono::microseconds elapsed_time
Definition: decl/alm.hpp:135
pa::ALMSolver::Stats::status
SolverStatus status
Definition: decl/alm.hpp:97
pa::ALMSolverFull::stop
void stop()
Abort the computation and return the result so far.
Definition: decl/alm.hpp:167
pa::ALMSolverFull::Stats::norm_penalty₂
real_t norm_penalty₂
Definition: decl/alm.hpp:143
pa::ALMSolverFull::inner_solver
InnerSolver inner_solver
Definition: decl/alm.hpp:175
pa::ALMParams
Parameters for the Augmented Lagrangian solver.
Definition: decl/alm.hpp:13
pa::inf
constexpr real_t inf
Definition: vec.hpp:26
pa::ALMParams::max_time
std::chrono::microseconds max_time
Maximum duration.
Definition: decl/alm.hpp:54
pa::ALMSolver::stop
void stop()
Abort the computation and return the result so far.
Definition: decl/alm.hpp:116
pa::ALMParams::preconditioning
bool preconditioning
Apply preconditioning to the problem, based on the gradients in the starting point.
Definition: decl/alm.hpp:73
pa::ALMParams::max_total_num_retries
unsigned max_total_num_retries
Combined limit for ALMParams::max_num_initial_retries and ALMParams::max_num_retries.
Definition: decl/alm.hpp:65
pa::ALMSolver::ALMSolver
ALMSolver(Params params, InnerSolver &&inner_solver)
Definition: decl/alm.hpp:102
pa::ALMParams::ε
real_t ε
Primal tolerance.
Definition: decl/alm.hpp:15
pa::ALMParams::single_penalty_factor
bool single_penalty_factor
Use one penalty factor for all m constraints.
Definition: decl/alm.hpp:75
pa::ALMParams::ρ_increase
real_t ρ_increase
Factor to increase the primal tolerance update factor by if convergence fails.
Definition: decl/alm.hpp:42
pa::ALMParams::Δ_lower
real_t Δ_lower
Factor to reduce ALMParams::Δ when inner convergence fails.
Definition: decl/alm.hpp:21
pa::ALMSolverFull::Stats::Stats
Stats(int m2)
Definition: decl/alm.hpp:150
pa::ALMSolver::Stats::inner_convergence_failures
unsigned inner_convergence_failures
Definition: decl/alm.hpp:92
pa::ALMParams::δ
real_t δ
Dual tolerance.
Definition: decl/alm.hpp:17
pa::ALMParams::max_num_retries
unsigned max_num_retries
How many times can the penalty update factor ALMParams::Δ and the primal tolerance factor ALMParams::...
Definition: decl/alm.hpp:62
pa::ALMSolver::operator()
Stats operator()(const Problem &problem, rvec y, rvec x)
Definition: alm.hpp:17
pa::ALMSolverFull::Stats::outer_iterations
unsigned outer_iterations
Definition: decl/alm.hpp:134
pa::ALMParams::max_num_initial_retries
unsigned max_num_initial_retries
How many times can the initial penalty ALMParams::Σ₀ or ALMParams::σ₀ and the initial primal toleranc...
Definition: decl/alm.hpp:59
pa::ALMSolverFull::Stats
Definition: decl/alm.hpp:133
pa::ALMSolverFull::InnerSolver
InnerSolverT InnerSolver
Definition: decl/alm.hpp:131
pa::ALMParams::Σ_max
real_t Σ_max
Maximum penalty factor.
Definition: decl/alm.hpp:48
pa::ALMSolver::Stats::elapsed_time
std::chrono::microseconds elapsed_time
Definition: decl/alm.hpp:89
problem.hpp
pa::ALMParams::ε₀
real_t ε₀
Initial primal tolerance.
Definition: decl/alm.hpp:34
pa::ALMSolverFull::Stats::δ₂
real_t δ₂
Definition: decl/alm.hpp:141
pa::ALMSolverFull::Stats::status
SolverStatus status
Definition: decl/alm.hpp:146
pa::ALMParams::ρ
real_t ρ
Update factor for primal tolerance.
Definition: decl/alm.hpp:39
pa::ProblemFull
Problem description for minimization problems.
Definition: include/panoc-alm/util/problem.hpp:213
pa::InnerStatsAccumulator< typename InnerSolver::Stats >
pa::ALMSolver::Stats::penalty_reduced
unsigned penalty_reduced
Definition: decl/alm.hpp:91
pa::ALMSolverFull::Stats::inner
InnerStatsAccumulator< typename InnerSolver::Stats > inner
Definition: decl/alm.hpp:148
pa::ALMSolverFull::Stats::penalty_reduced
unsigned penalty_reduced
Definition: decl/alm.hpp:137
pa::real_t
double real_t
Default floating point type.
Definition: vec.hpp:8
pa::ALMParams::M
real_t M
Lagrange multiplier bound.
Definition: decl/alm.hpp:46
pa::ALMParams::Δ
real_t Δ
Factor used in updating the penalty parameters.
Definition: decl/alm.hpp:19
solverstatus.hpp
pa::ALMParams::Σ₀
real_t Σ₀
Initial penalty parameter.
Definition: decl/alm.hpp:26
pa::ALMSolverFull::Stats::penalty₂
vec penalty₂
Definition: decl/alm.hpp:144
pa::ALMParams::Σ₀_lower
real_t Σ₀_lower
Factor to reduce the initial penalty factor by if convergence fails in in the first iteration.
Definition: decl/alm.hpp:32
pa::Problem
Problem description for minimization problems.
Definition: include/panoc-alm/util/problem.hpp:24
pa::ALMParams::σ₀
real_t σ₀
Initial penalty parameter factor.
Definition: decl/alm.hpp:29
pa::ALMSolver::Stats::outer_iterations
unsigned outer_iterations
Definition: decl/alm.hpp:88