PANOC-ALM  quadratic-penalty
Nonconvex constrained optimization
inner/decl/panoc.hpp
Go to the documentation of this file.
1 #pragma once
2 
11 
12 #include <atomic>
13 #include <chrono>
14 #include <limits>
15 #include <string>
16 
17 namespace pa {
18 
20 struct PANOCParams {
24  unsigned max_iter = 100;
26  std::chrono::microseconds max_time = std::chrono::minutes(5);
28  real_t τ_min = 1. / 256;
30  real_t L_min = 1e-5;
32  real_t L_max = 1e9;
34  PANOCStopCrit stop_crit = PANOCStopCrit::ApproxKKT;
36  unsigned max_no_progress = 10;
37 
40  unsigned print_interval = 0;
41 
43  10 * std::numeric_limits<real_t>::epsilon();
44 
47 
49 };
50 
51 struct PANOCStats {
52  SolverStatus status = SolverStatus::Unknown;
54  std::chrono::microseconds elapsed_time;
55  unsigned iterations = 0;
56  unsigned linesearch_failures = 0;
57  unsigned lbfgs_failures = 0;
58  unsigned lbfgs_rejected = 0;
59  unsigned τ_1_accepted = 0;
60  unsigned count_τ = 0;
62 };
63 
65  unsigned k;
81  const Problem &problem;
83 };
84 
87 template <class DirectionProviderT>
88 class PANOCSolver {
89  public:
91  using DirectionProvider = DirectionProviderT;
92  using Stats = PANOCStats;
94 
101 
102  Stats operator()(const Problem &problem, // in
103  crvec Σ, // in
104  real_t ε, // in
105  bool always_overwrite_results, // in
106  rvec x, // inout
107  rvec y, // inout
108  rvec err_z, // out
109  std::chrono::microseconds time_remaining = std::chrono::microseconds(0)); // in
110 
111  PANOCSolver &
112  set_progress_callback(std::function<void(const ProgressInfo &)> cb) {
113  this->progress_cb = cb;
114  return *this;
115  }
116 
117  std::string get_name() const;
118 
119  void stop() { stop_signal.stop(); }
120 
121  const Params &get_params() const { return params; }
122 
123  private:
126  std::function<void(const ProgressInfo &)> progress_cb;
127 
128  public:
130 };
131 
133  unsigned k;
152 };
153 
154 template <class DirectionProviderT>
156  public:
158  using DirectionProvider = DirectionProviderT;
159  using Stats = PANOCStats;
161 
168 
169  Stats operator()(const ProblemFull &problem, // in
170  crvec Σ1, // in
171  crvec Σ2, // in
172  real_t ε, // in
173  bool always_overwrite_results, // in
174  rvec x, // inout
175  rvec y, // inout
176  rvec err_z1, // out
177  rvec err_z2, // out
178  std::chrono::microseconds time_remaining = std::chrono::microseconds(0)); // in
179 
181  set_progress_callback(std::function<void(const ProgressInfo &)> cb) {
182  this->progress_cb = cb;
183  return *this;
184  }
185 
186  std::string get_name() const;
187 
188  void stop() { stop_signal.stop(); }
189 
190  const Params &get_params() const { return params; }
191 
192  private:
195  std::function<void(const ProgressInfo &)> progress_cb;
196 
197  public:
199 };
200 
201 template <class InnerSolverStats>
202 struct InnerStatsAccumulator;
203 
204 template <>
206  std::chrono::microseconds elapsed_time;
207  unsigned iterations = 0;
208  unsigned linesearch_failures = 0;
209  unsigned lbfgs_failures = 0;
210  unsigned lbfgs_rejected = 0;
211  unsigned τ_1_accepted = 0;
212  unsigned count_τ = 0;
213  real_t sum_τ = 0;
214 };
215 
218  acc.iterations += s.iterations;
219  acc.elapsed_time += s.elapsed_time;
223  acc.τ_1_accepted += s.τ_1_accepted;
224  acc.count_τ += s.count_τ;
225  acc.sum_τ += s.sum_τ;
226  return acc;
227 }
228 
229 } // namespace pa
pa::PANOCFullProgressInfo::Σ2
crvec Σ2
Definition: inner/decl/panoc.hpp:148
pa::PANOCStats::τ_1_accepted
unsigned τ_1_accepted
Definition: inner/decl/panoc.hpp:59
pa::PANOCSolverFull::get_params
const Params & get_params() const
Definition: inner/decl/panoc.hpp:190
pa::PANOCSolver::operator()
Stats operator()(const Problem &problem, crvec Σ, real_t ε, bool always_overwrite_results, rvec x, rvec y, rvec err_z, std::chrono::microseconds time_remaining=std::chrono::microseconds(0))
Definition: inner/panoc.hpp:26
pa::AtomicStopSignal
Definition: atomic_stop_signal.hpp:7
panoc-fwd.hpp
pa::PANOCProgressInfo::p
crvec p
Definition: inner/decl/panoc.hpp:67
pa::PANOCProgressInfo::k
unsigned k
Definition: inner/decl/panoc.hpp:65
pa::PANOCSolver::get_name
std::string get_name() const
Definition: inner/panoc.hpp:20
pa::PANOCSolverFull::get_name
std::string get_name() const
Definition: inner/panoc.hpp:323
pa::PANOCParams::L_min
real_t L_min
Minimum Lipschitz constant estimate.
Definition: inner/decl/panoc.hpp:30
pa::rvec
Eigen::Ref< vec > rvec
Default type for mutable references to vectors.
Definition: vec.hpp:16
pa::PANOCProgressInfo::norm_sq_p
real_t norm_sq_p
Definition: inner/decl/panoc.hpp:68
pa::PANOCStats::iterations
unsigned iterations
Definition: inner/decl/panoc.hpp:55
pa::PANOCProgressInfo::grad_ψ_hat
crvec grad_ψ_hat
Definition: inner/decl/panoc.hpp:74
pa::PANOCSolver::PANOCSolver
PANOCSolver(Params params, const PANOCDirection< DirectionProvider > &direction_provider)
Definition: inner/decl/panoc.hpp:98
panocpy.test.y
y
Definition: test.py:76
atomic_stop_signal.hpp
panocpy.test.err_z
err_z
Definition: test.py:76
pa::PANOCFullProgressInfo
Definition: inner/decl/panoc.hpp:132
pa::SolverStatus
SolverStatus
Exit status of a numerical solver such as ALM or PANOC.
Definition: solverstatus.hpp:7
panocpy.test.ε
int ε
Definition: test.py:71
pa::PANOCSolverFull::PANOCSolverFull
PANOCSolverFull(Params params, PANOCDirection< DirectionProvider > &&direction_provider)
Definition: inner/decl/panoc.hpp:162
pa::PANOCProgressInfo::x
crvec x
Definition: inner/decl/panoc.hpp:66
pa::PANOCSolver::stop
void stop()
Definition: inner/decl/panoc.hpp:119
pa::PANOCSolverFull
Definition: inner/decl/panoc.hpp:155
pa::PANOCProgressInfo::params
const PANOCParams & params
Definition: inner/decl/panoc.hpp:82
pa::LBFGSStepSize::BasedOnGradientStepSize
@ BasedOnGradientStepSize
pa::PANOCProgressInfo::ψ
real_t ψ
Definition: inner/decl/panoc.hpp:71
pa::PANOCProgressInfo::problem
const Problem & problem
Definition: inner/decl/panoc.hpp:81
pa::PANOCProgressInfo::φγ
real_t φγ
Definition: inner/decl/panoc.hpp:70
pa::PANOCParams::print_interval
unsigned print_interval
When to print progress.
Definition: inner/decl/panoc.hpp:40
pa::PANOCStats::count_τ
unsigned count_τ
Definition: inner/decl/panoc.hpp:60
pa::PANOCParams::quadratic_upperbound_tolerance_factor
real_t quadratic_upperbound_tolerance_factor
Definition: inner/decl/panoc.hpp:42
pa::operator+=
InnerStatsAccumulator< PANOCStats > & operator+=(InnerStatsAccumulator< PANOCStats > &acc, const PANOCStats &s)
Definition: inner/decl/panoc.hpp:217
pa::PANOCSolverFull::progress_cb
std::function< void(const ProgressInfo &)> progress_cb
Definition: inner/decl/panoc.hpp:195
pa::PANOCFullProgressInfo::Σ1
crvec Σ1
Definition: inner/decl/panoc.hpp:147
pa::PANOCProgressInfo::x_hat
crvec x_hat
Definition: inner/decl/panoc.hpp:69
pa::PANOCStats::status
SolverStatus status
Definition: inner/decl/panoc.hpp:52
main.problem
problem
Definition: main.py:16
pa::PANOCProgressInfo::Σ
crvec Σ
Definition: inner/decl/panoc.hpp:79
pa::PANOCSolverFull::operator()
Stats operator()(const ProblemFull &problem, crvec Σ1, crvec Σ2, real_t ε, bool always_overwrite_results, rvec x, rvec y, rvec err_z1, rvec err_z2, std::chrono::microseconds time_remaining=std::chrono::microseconds(0))
Definition: inner/panoc.hpp:329
pa::PANOCParams::τ_min
real_t τ_min
Minimum weight factor between Newton step and projected gradient step.
Definition: inner/decl/panoc.hpp:28
pa::PANOCParams
Tuning parameters for the PANOC algorithm.
Definition: inner/decl/panoc.hpp:20
pa::PANOCParams::L_max
real_t L_max
Maximum Lipschitz constant estimate.
Definition: inner/decl/panoc.hpp:32
pa
Definition: alm.hpp:10
panocpy.test.x
x
Definition: test.py:40
pa::LBFGSStepSize
LBFGSStepSize
Which method to use to select the L-BFGS step size.
Definition: lbfgs-stepsize.hpp:6
pa::PANOCProgressInfo::L
real_t L
Definition: inner/decl/panoc.hpp:75
pa::PANOCParams::lbfgs_stepsize
LBFGSStepSize lbfgs_stepsize
Definition: inner/decl/panoc.hpp:48
pa::PANOCStats::lbfgs_rejected
unsigned lbfgs_rejected
Definition: inner/decl/panoc.hpp:58
pa::PANOCStopCrit
PANOCStopCrit
Definition: panoc-stop-crit.hpp:8
panoc-stop-crit.hpp
pa::inf
constexpr real_t inf
Definition: vec.hpp:26
pa::PANOCSolver::Stats
PANOCStats Stats
Definition: inner/decl/panoc.hpp:92
pa::PANOCProgressInfo::γ
real_t γ
Definition: inner/decl/panoc.hpp:76
pa::PANOCParams::max_time
std::chrono::microseconds max_time
Maximum duration.
Definition: inner/decl/panoc.hpp:26
pa::PANOCSolverFull<>::DirectionProvider
DirectionProviderT DirectionProvider
Definition: inner/decl/panoc.hpp:158
pa::InnerStatsAccumulator< PANOCStats >
Definition: inner/decl/panoc.hpp:205
lipschitz.hpp
pa::PANOCSolver::get_params
const Params & get_params() const
Definition: inner/decl/panoc.hpp:121
pa::PANOCStats::ε
real_t ε
Definition: inner/decl/panoc.hpp:53
pa::PANOCProgressInfo::τ
real_t τ
Definition: inner/decl/panoc.hpp:77
pa::PANOCSolverFull::PANOCSolverFull
PANOCSolverFull(Params params, const PANOCDirection< DirectionProvider > &direction_provider)
Definition: inner/decl/panoc.hpp:165
pa::PANOCSolverFull::stop
void stop()
Definition: inner/decl/panoc.hpp:188
pa::crvec
Eigen::Ref< const vec > crvec
Default type for immutable references to vectors.
Definition: vec.hpp:18
panoc-direction-update.hpp
pa::PANOCSolver::PANOCSolver
PANOCSolver(Params params, PANOCDirection< DirectionProvider > &&direction_provider)
Definition: inner/decl/panoc.hpp:95
pa::PANOCProgressInfo::ψ_hat
real_t ψ_hat
Definition: inner/decl/panoc.hpp:73
pa::PANOCSolverFull::direction_provider
PANOCDirection< DirectionProvider > direction_provider
Definition: inner/decl/panoc.hpp:198
pa::LipschitzEstimateParams
Definition: lipschitz.hpp:7
pa::PANOCSolver
PANOC solver for ALM.
Definition: inner/decl/panoc.hpp:88
pa::PANOCParams::Lipschitz
LipschitzEstimateParams Lipschitz
Parameters related to the Lipschitz constant estimate and step size.
Definition: inner/decl/panoc.hpp:22
pa::PANOCProgressInfo::grad_ψ
crvec grad_ψ
Definition: inner/decl/panoc.hpp:72
panocpy.test.Σ
int Σ
Definition: test.py:70
pa::PANOCParams::stop_crit
PANOCStopCrit stop_crit
What stopping criterion to use.
Definition: inner/decl/panoc.hpp:34
pa::PANOCSolver::direction_provider
PANOCDirection< DirectionProvider > direction_provider
Definition: inner/decl/panoc.hpp:129
pa::PANOCStats::sum_τ
real_t sum_τ
Definition: inner/decl/panoc.hpp:61
pa::PANOCStats
Definition: inner/decl/panoc.hpp:51
pa::PANOCDirection< DirectionProvider >
lbfgs-stepsize.hpp
pa::PANOCSolverFull::stop_signal
AtomicStopSignal stop_signal
Definition: inner/decl/panoc.hpp:194
pa::PANOCProgressInfo
Definition: inner/decl/panoc.hpp:64
pa::PANOCParams::max_no_progress
unsigned max_no_progress
Maximum number of iterations without any progress before giving up.
Definition: inner/decl/panoc.hpp:36
pa::PANOCSolver::stop_signal
AtomicStopSignal stop_signal
Definition: inner/decl/panoc.hpp:125
problem.hpp
pa::PANOCProgressInfo::y
crvec y
Definition: inner/decl/panoc.hpp:80
pa::InnerStatsAccumulator
Definition: panoc-fwd.hpp:10
pa::PANOCSolverFull::set_progress_callback
PANOCSolverFull & set_progress_callback(std::function< void(const ProgressInfo &)> cb)
Definition: inner/decl/panoc.hpp:181
pa::PANOCSolver::set_progress_callback
PANOCSolver & set_progress_callback(std::function< void(const ProgressInfo &)> cb)
Definition: inner/decl/panoc.hpp:112
pa::ProblemFull
Problem description for minimization problems.
Definition: include/panoc-alm/util/problem.hpp:213
pa::PANOCSolverFull::Stats
PANOCStats Stats
Definition: inner/decl/panoc.hpp:159
pa::PANOCStats::linesearch_failures
unsigned linesearch_failures
Definition: inner/decl/panoc.hpp:56
pa::PANOCStats::elapsed_time
std::chrono::microseconds elapsed_time
Definition: inner/decl/panoc.hpp:54
pa::real_t
double real_t
Default floating point type.
Definition: vec.hpp:8
pa::PANOCStats::lbfgs_failures
unsigned lbfgs_failures
Definition: inner/decl/panoc.hpp:57
pa::PANOCSolver::progress_cb
std::function< void(const ProgressInfo &)> progress_cb
Definition: inner/decl/panoc.hpp:126
solverstatus.hpp
pa::AtomicStopSignal::stop
void stop()
Definition: atomic_stop_signal.hpp:15
pa::PANOCFullProgressInfo::problem
const ProblemFull & problem
Definition: inner/decl/panoc.hpp:150
pa::PANOCParams::max_iter
unsigned max_iter
Maximum number of inner PANOC iterations.
Definition: inner/decl/panoc.hpp:24
pa::Problem
Problem description for minimization problems.
Definition: include/panoc-alm/util/problem.hpp:24
pa::PANOCParams::update_lipschitz_in_linesearch
bool update_lipschitz_in_linesearch
Definition: inner/decl/panoc.hpp:45
pa::PANOCSolverFull::params
Params params
Definition: inner/decl/panoc.hpp:193
pa::PANOCParams::alternative_linesearch_cond
bool alternative_linesearch_cond
Definition: inner/decl/panoc.hpp:46
pa::PANOCSolver::params
Params params
Definition: inner/decl/panoc.hpp:124
pa::PANOCSolver<>::DirectionProvider
DirectionProviderT DirectionProvider
Definition: inner/decl/panoc.hpp:91