PANOC-ALM  quadratic-penalty
Nonconvex constrained optimization
decl/second-order-panoc.hpp
Go to the documentation of this file.
1 #pragma once
2 
9 
10 #include <atomic>
11 #include <chrono>
12 #include <limits>
13 #include <string>
14 
15 namespace pa {
16 
22  unsigned max_iter = 100;
24  std::chrono::microseconds max_time = std::chrono::minutes(5);
26  real_t τ_min = 1. / 256;
28  real_t L_min = 1e-5;
30  real_t L_max = 1e9;
32  PANOCStopCrit stop_crit = PANOCStopCrit::ApproxKKT;
34  unsigned max_no_progress = 10;
35 
38  unsigned print_interval = 0;
39 
41  10 * std::numeric_limits<real_t>::epsilon();
42 
45 };
46 
50  public:
52 
53  struct Stats {
54  SolverStatus status = SolverStatus::Unknown;
56  std::chrono::microseconds elapsed_time;
57  unsigned iterations = 0;
58  unsigned newton_failures = 0;
59  unsigned linesearch_failures = 0;
60  unsigned τ_1_accepted = 0;
61  unsigned count_τ = 0;
63  };
64 
65  struct ProgressInfo {
66  unsigned k;
80  const Problem &problem;
81  const Params &params;
82  };
83 
85 
86  Stats operator()(const Problem &problem, // in
87  crvec Σ, // in
88  real_t ε, // in
89  bool always_overwrite_results, // in
90  rvec x, // inout
91  rvec y, // inout
92  rvec err_z); // out
93 
95  set_progress_callback(std::function<void(const ProgressInfo &)> cb) {
96  this->progress_cb = cb;
97  return *this;
98  }
99 
100  std::string get_name() const { return "SecondOrderPANOCSolver"; }
101 
102  void stop() { stop_signal.stop(); }
103 
104  const Params &get_params() const { return params; }
105 
106  private:
109  std::function<void(const ProgressInfo &)> progress_cb;
110 };
111 
112 template <class InnerSolverStats>
113 struct InnerStatsAccumulator;
114 
115 template <>
117  std::chrono::microseconds elapsed_time;
118  unsigned iterations = 0;
119  unsigned newton_failures = 0;
120  unsigned linesearch_failures = 0;
121  unsigned τ_1_accepted = 0;
122  unsigned count_τ = 0;
123  real_t sum_τ = 0;
124 };
125 
129  acc.elapsed_time += s.elapsed_time;
130  acc.iterations += s.iterations;
133  acc.τ_1_accepted += s.τ_1_accepted;
134  acc.count_τ += s.count_τ;
135  acc.sum_τ += s.sum_τ;
136  return acc;
137 }
138 
139 } // namespace pa
pa::SecondOrderPANOCSolver::ProgressInfo::problem
const Problem & problem
Definition: decl/second-order-panoc.hpp:80
pa::InnerStatsAccumulator< SecondOrderPANOCSolver::Stats >::τ_1_accepted
unsigned τ_1_accepted
Definition: decl/second-order-panoc.hpp:121
pa::SecondOrderPANOCSolver::ProgressInfo
Definition: decl/second-order-panoc.hpp:65
pa::SecondOrderPANOCSolver::ProgressInfo::x
crvec x
Definition: decl/second-order-panoc.hpp:67
pa::AtomicStopSignal
Definition: atomic_stop_signal.hpp:7
pa::SecondOrderPANOCSolver::ProgressInfo::γ
real_t γ
Definition: decl/second-order-panoc.hpp:76
panoc-fwd.hpp
pa::SecondOrderPANOCSolver::ProgressInfo::k
unsigned k
Definition: decl/second-order-panoc.hpp:66
pa::SecondOrderPANOCParams::L_min
real_t L_min
Minimum Lipschitz constant estimate.
Definition: decl/second-order-panoc.hpp:28
pa::rvec
Eigen::Ref< vec > rvec
Default type for mutable references to vectors.
Definition: vec.hpp:16
pa::SecondOrderPANOCSolver::ProgressInfo::params
const Params & params
Definition: decl/second-order-panoc.hpp:81
pa::InnerStatsAccumulator< SecondOrderPANOCSolver::Stats >::iterations
unsigned iterations
Definition: decl/second-order-panoc.hpp:118
pa::SecondOrderPANOCSolver::progress_cb
std::function< void(const ProgressInfo &)> progress_cb
Definition: decl/second-order-panoc.hpp:109
panocpy.test.y
y
Definition: test.py:76
atomic_stop_signal.hpp
panocpy.test.err_z
err_z
Definition: test.py:76
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::SecondOrderPANOCSolver::operator()
Stats operator()(const Problem &problem, crvec Σ, real_t ε, bool always_overwrite_results, rvec x, rvec y, rvec err_z)
Definition: second-order-panoc.hpp:19
pa::SecondOrderPANOCSolver::Stats::ε
real_t ε
Definition: decl/second-order-panoc.hpp:55
pa::SecondOrderPANOCParams::print_interval
unsigned print_interval
When to print progress.
Definition: decl/second-order-panoc.hpp:38
pa::InnerStatsAccumulator< SecondOrderPANOCSolver::Stats >::count_τ
unsigned count_τ
Definition: decl/second-order-panoc.hpp:122
pa::SecondOrderPANOCParams::quadratic_upperbound_tolerance_factor
real_t quadratic_upperbound_tolerance_factor
Definition: decl/second-order-panoc.hpp:40
pa::operator+=
InnerStatsAccumulator< PANOCStats > & operator+=(InnerStatsAccumulator< PANOCStats > &acc, const PANOCStats &s)
Definition: inner/decl/panoc.hpp:217
pa::SecondOrderPANOCSolver::Stats::iterations
unsigned iterations
Definition: decl/second-order-panoc.hpp:57
main.problem
problem
Definition: main.py:16
pa::SecondOrderPANOCSolver::Stats::linesearch_failures
unsigned linesearch_failures
Definition: decl/second-order-panoc.hpp:59
pa::SecondOrderPANOCParams::τ_min
real_t τ_min
Minimum weight factor between Newton step and projected gradient step.
Definition: decl/second-order-panoc.hpp:26
pa::SecondOrderPANOCParams::L_max
real_t L_max
Maximum Lipschitz constant estimate.
Definition: decl/second-order-panoc.hpp:30
pa
Definition: alm.hpp:10
pa::SecondOrderPANOCSolver::ProgressInfo::p
crvec p
Definition: decl/second-order-panoc.hpp:68
panocpy.test.x
x
Definition: test.py:40
pa::PANOCStopCrit
PANOCStopCrit
Definition: panoc-stop-crit.hpp:8
pa::SecondOrderPANOCSolver::get_name
std::string get_name() const
Definition: decl/second-order-panoc.hpp:100
panoc-stop-crit.hpp
pa::SecondOrderPANOCSolver::ProgressInfo::Σ
crvec Σ
Definition: decl/second-order-panoc.hpp:78
pa::inf
constexpr real_t inf
Definition: vec.hpp:26
pa::SecondOrderPANOCSolver::stop
void stop()
Definition: decl/second-order-panoc.hpp:102
pa::SecondOrderPANOCSolver::ProgressInfo::L
real_t L
Definition: decl/second-order-panoc.hpp:75
pa::SecondOrderPANOCParams::max_time
std::chrono::microseconds max_time
Maximum duration.
Definition: decl/second-order-panoc.hpp:24
lipschitz.hpp
pa::SecondOrderPANOCSolver::params
Params params
Definition: decl/second-order-panoc.hpp:107
pa::crvec
Eigen::Ref< const vec > crvec
Default type for immutable references to vectors.
Definition: vec.hpp:18
pa::SecondOrderPANOCSolver::ProgressInfo::grad_ψ
crvec grad_ψ
Definition: decl/second-order-panoc.hpp:72
pa::SecondOrderPANOCSolver::SecondOrderPANOCSolver
SecondOrderPANOCSolver(Params params)
Definition: decl/second-order-panoc.hpp:84
pa::SecondOrderPANOCSolver::set_progress_callback
SecondOrderPANOCSolver & set_progress_callback(std::function< void(const ProgressInfo &)> cb)
Definition: decl/second-order-panoc.hpp:95
pa::SecondOrderPANOCSolver::ProgressInfo::ψ
real_t ψ
Definition: decl/second-order-panoc.hpp:71
pa::LipschitzEstimateParams
Definition: lipschitz.hpp:7
pa::SecondOrderPANOCParams::Lipschitz
LipschitzEstimateParams Lipschitz
Parameters related to the Lipschitz constant estimate and step size.
Definition: decl/second-order-panoc.hpp:20
pa::SecondOrderPANOCParams
Tuning parameters for the second order PANOC algorithm.
Definition: decl/second-order-panoc.hpp:18
pa::SecondOrderPANOCSolver
Second order PANOC solver for ALM.
Definition: decl/second-order-panoc.hpp:49
panocpy.test.Σ
int Σ
Definition: test.py:70
pa::SecondOrderPANOCParams::stop_crit
PANOCStopCrit stop_crit
What stopping criterion to use.
Definition: decl/second-order-panoc.hpp:32
pa::SecondOrderPANOCSolver::Stats::count_τ
unsigned count_τ
Definition: decl/second-order-panoc.hpp:61
pa::InnerStatsAccumulator< SecondOrderPANOCSolver::Stats >::sum_τ
real_t sum_τ
Definition: decl/second-order-panoc.hpp:123
pa::InnerStatsAccumulator< SecondOrderPANOCSolver::Stats >
Definition: decl/second-order-panoc.hpp:116
pa::SecondOrderPANOCSolver::ProgressInfo::x_hat
crvec x_hat
Definition: decl/second-order-panoc.hpp:70
pa::SecondOrderPANOCSolver::ProgressInfo::y
crvec y
Definition: decl/second-order-panoc.hpp:79
pa::SecondOrderPANOCParams::max_no_progress
unsigned max_no_progress
Maximum number of iterations without any progress before giving up.
Definition: decl/second-order-panoc.hpp:34
problem.hpp
pa::SecondOrderPANOCSolver::Stats
Definition: decl/second-order-panoc.hpp:53
pa::SecondOrderPANOCSolver::Stats::τ_1_accepted
unsigned τ_1_accepted
Definition: decl/second-order-panoc.hpp:60
pa::InnerStatsAccumulator
Definition: panoc-fwd.hpp:10
pa::SecondOrderPANOCSolver::stop_signal
AtomicStopSignal stop_signal
Definition: decl/second-order-panoc.hpp:108
pa::SecondOrderPANOCSolver::Stats::status
SolverStatus status
Definition: decl/second-order-panoc.hpp:54
pa::SecondOrderPANOCSolver::Stats::sum_τ
real_t sum_τ
Definition: decl/second-order-panoc.hpp:62
pa::InnerStatsAccumulator< SecondOrderPANOCSolver::Stats >::linesearch_failures
unsigned linesearch_failures
Definition: decl/second-order-panoc.hpp:120
pa::InnerStatsAccumulator< SecondOrderPANOCSolver::Stats >::elapsed_time
std::chrono::microseconds elapsed_time
Definition: decl/second-order-panoc.hpp:117
pa::SecondOrderPANOCSolver::ProgressInfo::grad_ψ_hat
crvec grad_ψ_hat
Definition: decl/second-order-panoc.hpp:74
pa::real_t
double real_t
Default floating point type.
Definition: vec.hpp:8
solverstatus.hpp
pa::SecondOrderPANOCSolver::Stats::newton_failures
unsigned newton_failures
Definition: decl/second-order-panoc.hpp:58
pa::SecondOrderPANOCSolver::ProgressInfo::ψ_hat
real_t ψ_hat
Definition: decl/second-order-panoc.hpp:73
pa::AtomicStopSignal::stop
void stop()
Definition: atomic_stop_signal.hpp:15
pa::SecondOrderPANOCSolver::get_params
const Params & get_params() const
Definition: decl/second-order-panoc.hpp:104
pa::SecondOrderPANOCParams::max_iter
unsigned max_iter
Maximum number of inner PANOC iterations.
Definition: decl/second-order-panoc.hpp:22
pa::Problem
Problem description for minimization problems.
Definition: include/panoc-alm/util/problem.hpp:24
pa::SecondOrderPANOCSolver::ProgressInfo::norm_sq_p
real_t norm_sq_p
Definition: decl/second-order-panoc.hpp:69
pa::SecondOrderPANOCParams::update_lipschitz_in_linesearch
bool update_lipschitz_in_linesearch
Definition: decl/second-order-panoc.hpp:43
pa::SecondOrderPANOCParams::alternative_linesearch_cond
bool alternative_linesearch_cond
Definition: decl/second-order-panoc.hpp:44
pa::InnerStatsAccumulator< SecondOrderPANOCSolver::Stats >::newton_failures
unsigned newton_failures
Definition: decl/second-order-panoc.hpp:119
pa::SecondOrderPANOCSolver::Stats::elapsed_time
std::chrono::microseconds elapsed_time
Definition: decl/second-order-panoc.hpp:56