PANOC-ALM  quadratic-penalty
Nonconvex constrained optimization
decl/structured-panoc-lbfgs.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 
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;
37  PANOCStopCrit stop_crit = PANOCStopCrit::ApproxKKT;
39  unsigned max_no_progress = 10;
40 
43  unsigned print_interval = 0;
44 
46  10 * std::numeric_limits<real_t>::epsilon();
47 
50 
53 
55 };
56 
58  unsigned k;
74  const Problem &problem;
76 };
77 
81  public:
83 
84  struct Stats {
85  SolverStatus status = SolverStatus::Unknown;
87  std::chrono::microseconds elapsed_time;
88  unsigned iterations = 0;
89  unsigned linesearch_failures = 0;
90  unsigned lbfgs_failures = 0;
91  unsigned lbfgs_rejected = 0;
92  unsigned τ_1_accepted = 0;
93  unsigned count_τ = 0;
95  };
96 
98 
100  : params(params), lbfgs(lbfgsparams) {}
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 
111  set_progress_callback(std::function<void(const ProgressInfo &)> cb) {
112  this->progress_cb = cb;
113  return *this;
114  }
115 
116  std::string get_name() const { return "SecondOrderPANOCSolverLBFGS"; }
117 
118  void stop() { stop_signal.stop(); }
119 
120  const Params &get_params() const { return params; }
121 
122  private:
125  std::function<void(const ProgressInfo &)> progress_cb;
126 
127  public:
129 };
130 
131 template <class InnerSolverStats>
132 struct InnerStatsAccumulator;
133 
134 template <>
136  std::chrono::microseconds elapsed_time;
137  unsigned iterations = 0;
138  unsigned linesearch_failures = 0;
139  unsigned lbfgs_failures = 0;
140  unsigned lbfgs_rejected = 0;
141  unsigned τ_1_accepted = 0;
142  unsigned count_τ = 0;
143  real_t sum_τ = 0;
144 };
145 
149  acc.iterations += s.iterations;
150  acc.elapsed_time += s.elapsed_time;
154  acc.τ_1_accepted += s.τ_1_accepted;
155  acc.count_τ += s.count_τ;
156  acc.sum_τ += s.sum_τ;
157  return acc;
158 }
159 
160 } // namespace pa
pa::InnerStatsAccumulator< StructuredPANOCLBFGSSolver::Stats >::τ_1_accepted
unsigned τ_1_accepted
Definition: decl/structured-panoc-lbfgs.hpp:141
pa::StructuredPANOCLBFGSSolver::get_params
const Params & get_params() const
Definition: decl/structured-panoc-lbfgs.hpp:120
pa::StructuredPANOCLBFGSSolver::Stats::lbfgs_failures
unsigned lbfgs_failures
Definition: decl/structured-panoc-lbfgs.hpp:90
pa::AtomicStopSignal
Definition: atomic_stop_signal.hpp:7
panoc-fwd.hpp
pa::StructuredPANOCLBFGSProgressInfo::p
crvec p
Definition: decl/structured-panoc-lbfgs.hpp:60
pa::StructuredPANOCLBFGSSolver::operator()
Stats operator()(const Problem &problem, crvec Σ, real_t ε, bool always_overwrite_results, rvec x, rvec y, rvec err_z)
Definition: structured-panoc-lbfgs.hpp:18
pa::StructuredPANOCLBFGSProgressInfo::k
unsigned k
Definition: decl/structured-panoc-lbfgs.hpp:58
lbfgs.hpp
pa::StructuredPANOCLBFGSParams::L_min
real_t L_min
Minimum Lipschitz constant estimate.
Definition: decl/structured-panoc-lbfgs.hpp:30
pa::rvec
Eigen::Ref< vec > rvec
Default type for mutable references to vectors.
Definition: vec.hpp:16
pa::StructuredPANOCLBFGSSolver::stop
void stop()
Definition: decl/structured-panoc-lbfgs.hpp:118
pa::StructuredPANOCLBFGSSolver::Stats::status
SolverStatus status
Definition: decl/structured-panoc-lbfgs.hpp:85
pa::StructuredPANOCLBFGSParams::hessian_vec_finited_differences
bool hessian_vec_finited_differences
Definition: decl/structured-panoc-lbfgs.hpp:51
pa::StructuredPANOCLBFGSProgressInfo::norm_sq_p
real_t norm_sq_p
Definition: decl/structured-panoc-lbfgs.hpp:61
pa::InnerStatsAccumulator< StructuredPANOCLBFGSSolver::Stats >::iterations
unsigned iterations
Definition: decl/structured-panoc-lbfgs.hpp:137
pa::StructuredPANOCLBFGSProgressInfo::grad_ψ_hat
crvec grad_ψ_hat
Definition: decl/structured-panoc-lbfgs.hpp:67
pa::StructuredPANOCLBFGSSolver::Stats::elapsed_time
std::chrono::microseconds elapsed_time
Definition: decl/structured-panoc-lbfgs.hpp:87
pa::StructuredPANOCLBFGSParams
Tuning parameters for the second order PANOC algorithm.
Definition: decl/structured-panoc-lbfgs.hpp:20
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::StructuredPANOCLBFGSProgressInfo::x
crvec x
Definition: decl/structured-panoc-lbfgs.hpp:59
pa::LBFGSStepSize::BasedOnGradientStepSize
@ BasedOnGradientStepSize
pa::StructuredPANOCLBFGSParams::full_augmented_hessian
bool full_augmented_hessian
Definition: decl/structured-panoc-lbfgs.hpp:52
pa::StructuredPANOCLBFGSProgressInfo::ψ
real_t ψ
Definition: decl/structured-panoc-lbfgs.hpp:64
pa::StructuredPANOCLBFGSProgressInfo::problem
const Problem & problem
Definition: decl/structured-panoc-lbfgs.hpp:74
pa::StructuredPANOCLBFGSProgressInfo::φγ
real_t φγ
Definition: decl/structured-panoc-lbfgs.hpp:63
pa::StructuredPANOCLBFGSParams::nonmonotone_linesearch
real_t nonmonotone_linesearch
Factor used in update for exponentially weighted nonmonotone line search.
Definition: decl/structured-panoc-lbfgs.hpp:35
pa::StructuredPANOCLBFGSParams::print_interval
unsigned print_interval
When to print progress.
Definition: decl/structured-panoc-lbfgs.hpp:43
pa::InnerStatsAccumulator< StructuredPANOCLBFGSSolver::Stats >::count_τ
unsigned count_τ
Definition: decl/structured-panoc-lbfgs.hpp:142
pa::StructuredPANOCLBFGSParams::quadratic_upperbound_tolerance_factor
real_t quadratic_upperbound_tolerance_factor
Definition: decl/structured-panoc-lbfgs.hpp:45
pa::StructuredPANOCLBFGSSolver::set_progress_callback
StructuredPANOCLBFGSSolver & set_progress_callback(std::function< void(const ProgressInfo &)> cb)
Definition: decl/structured-panoc-lbfgs.hpp:111
pa::operator+=
InnerStatsAccumulator< PANOCStats > & operator+=(InnerStatsAccumulator< PANOCStats > &acc, const PANOCStats &s)
Definition: inner/decl/panoc.hpp:217
pa::StructuredPANOCLBFGSSolver::lbfgs
LBFGS lbfgs
Definition: decl/structured-panoc-lbfgs.hpp:128
pa::StructuredPANOCLBFGSSolver
Second order PANOC solver for ALM.
Definition: decl/structured-panoc-lbfgs.hpp:80
pa::StructuredPANOCLBFGSSolver::Stats::lbfgs_rejected
unsigned lbfgs_rejected
Definition: decl/structured-panoc-lbfgs.hpp:91
pa::StructuredPANOCLBFGSSolver::Stats
Definition: decl/structured-panoc-lbfgs.hpp:84
pa::StructuredPANOCLBFGSProgressInfo::x_hat
crvec x_hat
Definition: decl/structured-panoc-lbfgs.hpp:62
main.problem
problem
Definition: main.py:16
pa::StructuredPANOCLBFGSSolver::Stats::count_τ
unsigned count_τ
Definition: decl/structured-panoc-lbfgs.hpp:93
pa::StructuredPANOCLBFGSProgressInfo::Σ
crvec Σ
Definition: decl/structured-panoc-lbfgs.hpp:72
pa::StructuredPANOCLBFGSParams::τ_min
real_t τ_min
Minimum weight factor between Newton step and projected gradient step.
Definition: decl/structured-panoc-lbfgs.hpp:28
pa::StructuredPANOCLBFGSParams::L_max
real_t L_max
Maximum Lipschitz constant estimate.
Definition: decl/structured-panoc-lbfgs.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::StructuredPANOCLBFGSProgressInfo::L
real_t L
Definition: decl/structured-panoc-lbfgs.hpp:68
pa::StructuredPANOCLBFGSParams::lbfgs_stepsize
LBFGSStepSize lbfgs_stepsize
Definition: decl/structured-panoc-lbfgs.hpp:54
pa::InnerStatsAccumulator< StructuredPANOCLBFGSSolver::Stats >::lbfgs_rejected
unsigned lbfgs_rejected
Definition: decl/structured-panoc-lbfgs.hpp:140
pa::PANOCStopCrit
PANOCStopCrit
Definition: panoc-stop-crit.hpp:8
pa::StructuredPANOCLBFGSSolver::params
Params params
Definition: decl/structured-panoc-lbfgs.hpp:123
pa::StructuredPANOCLBFGSSolver::StructuredPANOCLBFGSSolver
StructuredPANOCLBFGSSolver(Params params, LBFGSParams lbfgsparams)
Definition: decl/structured-panoc-lbfgs.hpp:99
panoc-stop-crit.hpp
pa::LBFGS
Limited memory Broyden–Fletcher–Goldfarb–Shanno (L-BFGS) algorithm.
Definition: decl/lbfgs.hpp:29
pa::inf
constexpr real_t inf
Definition: vec.hpp:26
pa::StructuredPANOCLBFGSProgressInfo::γ
real_t γ
Definition: decl/structured-panoc-lbfgs.hpp:69
pa::StructuredPANOCLBFGSParams::max_time
std::chrono::microseconds max_time
Maximum duration.
Definition: decl/structured-panoc-lbfgs.hpp:26
lipschitz.hpp
pa::StructuredPANOCLBFGSProgressInfo::ε
real_t ε
Definition: decl/structured-panoc-lbfgs.hpp:71
pa::StructuredPANOCLBFGSSolver::Stats::linesearch_failures
unsigned linesearch_failures
Definition: decl/structured-panoc-lbfgs.hpp:89
pa::StructuredPANOCLBFGSProgressInfo::τ
real_t τ
Definition: decl/structured-panoc-lbfgs.hpp:70
pa::crvec
Eigen::Ref< const vec > crvec
Default type for immutable references to vectors.
Definition: vec.hpp:18
pa::StructuredPANOCLBFGSProgressInfo::ψ_hat
real_t ψ_hat
Definition: decl/structured-panoc-lbfgs.hpp:66
pa::StructuredPANOCLBFGSProgressInfo
Definition: decl/structured-panoc-lbfgs.hpp:57
pa::LBFGSParams
Parameters for the LBFGS and SpecializedLBFGS classes.
Definition: decl/lbfgs.hpp:12
pa::LipschitzEstimateParams
Definition: lipschitz.hpp:7
pa::StructuredPANOCLBFGSParams::Lipschitz
LipschitzEstimateParams Lipschitz
Parameters related to the Lipschitz constant estimate and step size.
Definition: decl/structured-panoc-lbfgs.hpp:22
pa::StructuredPANOCLBFGSProgressInfo::params
const StructuredPANOCLBFGSParams & params
Definition: decl/structured-panoc-lbfgs.hpp:75
pa::StructuredPANOCLBFGSSolver::stop_signal
AtomicStopSignal stop_signal
Definition: decl/structured-panoc-lbfgs.hpp:124
pa::StructuredPANOCLBFGSProgressInfo::grad_ψ
crvec grad_ψ
Definition: decl/structured-panoc-lbfgs.hpp:65
panocpy.test.Σ
int Σ
Definition: test.py:70
pa::StructuredPANOCLBFGSSolver::Stats::ε
real_t ε
Definition: decl/structured-panoc-lbfgs.hpp:86
pa::StructuredPANOCLBFGSParams::stop_crit
PANOCStopCrit stop_crit
What stopping criterion to use.
Definition: decl/structured-panoc-lbfgs.hpp:37
pa::InnerStatsAccumulator< StructuredPANOCLBFGSSolver::Stats >::sum_τ
real_t sum_τ
Definition: decl/structured-panoc-lbfgs.hpp:143
pa::StructuredPANOCLBFGSSolver::get_name
std::string get_name() const
Definition: decl/structured-panoc-lbfgs.hpp:116
pa::StructuredPANOCLBFGSSolver::progress_cb
std::function< void(const ProgressInfo &)> progress_cb
Definition: decl/structured-panoc-lbfgs.hpp:125
lbfgs-stepsize.hpp
pa::StructuredPANOCLBFGSParams::max_no_progress
unsigned max_no_progress
Maximum number of iterations without any progress before giving up.
Definition: decl/structured-panoc-lbfgs.hpp:39
problem.hpp
pa::StructuredPANOCLBFGSProgressInfo::y
crvec y
Definition: decl/structured-panoc-lbfgs.hpp:73
pa::InnerStatsAccumulator
Definition: panoc-fwd.hpp:10
pa::InnerStatsAccumulator< StructuredPANOCLBFGSSolver::Stats >
Definition: decl/structured-panoc-lbfgs.hpp:135
pa::StructuredPANOCLBFGSSolver::Stats::τ_1_accepted
unsigned τ_1_accepted
Definition: decl/structured-panoc-lbfgs.hpp:92
pa::StructuredPANOCLBFGSSolver::Stats::iterations
unsigned iterations
Definition: decl/structured-panoc-lbfgs.hpp:88
pa::InnerStatsAccumulator< StructuredPANOCLBFGSSolver::Stats >::linesearch_failures
unsigned linesearch_failures
Definition: decl/structured-panoc-lbfgs.hpp:138
pa::InnerStatsAccumulator< StructuredPANOCLBFGSSolver::Stats >::elapsed_time
std::chrono::microseconds elapsed_time
Definition: decl/structured-panoc-lbfgs.hpp:136
pa::real_t
double real_t
Default floating point type.
Definition: vec.hpp:8
pa::InnerStatsAccumulator< StructuredPANOCLBFGSSolver::Stats >::lbfgs_failures
unsigned lbfgs_failures
Definition: decl/structured-panoc-lbfgs.hpp:139
solverstatus.hpp
pa::AtomicStopSignal::stop
void stop()
Definition: atomic_stop_signal.hpp:15
pa::StructuredPANOCLBFGSParams::max_iter
unsigned max_iter
Maximum number of inner PANOC iterations.
Definition: decl/structured-panoc-lbfgs.hpp:24
pa::StructuredPANOCLBFGSSolver::Stats::sum_τ
real_t sum_τ
Definition: decl/structured-panoc-lbfgs.hpp:94
pa::Problem
Problem description for minimization problems.
Definition: include/panoc-alm/util/problem.hpp:24
pa::StructuredPANOCLBFGSParams::update_lipschitz_in_linesearch
bool update_lipschitz_in_linesearch
Definition: decl/structured-panoc-lbfgs.hpp:48
pa::StructuredPANOCLBFGSParams::alternative_linesearch_cond
bool alternative_linesearch_cond
Definition: decl/structured-panoc-lbfgs.hpp:49