PANOC-ALM  quadratic-penalty
Nonconvex constrained optimization
polymorphic-inner-solver.hpp
Go to the documentation of this file.
1 #pragma once
2 
9 
10 #include <memory>
11 #include <type_traits>
12 
13 #include <pybind11/cast.h>
14 #include <pybind11/pybind11.h>
15 namespace py = pybind11;
16 
17 namespace pa {
18 
19 template <class InnerSolver>
21  return [](InnerSolver &solver, const pa::Problem &p, pa::crvec Σ,
23  pa::vec y) -> std::tuple<pa::vec, pa::vec, pa::vec, py::dict> {
24  pa::vec z(p.m);
25  auto stats = solver(p, Σ, ε, true, x, y, z);
26  return std::make_tuple(std::move(x), std::move(y), std::move(z),
27  stats.ptr->to_dict());
28  };
29 }
30 
31 template <class InnerSolver>
33  return [](InnerSolver &solver, const pa::ProblemFull &p, pa::crvec Σ1,
35  -> std::tuple<pa::vec, pa::vec, pa::vec, pa::vec, py::dict> {
36  pa::vec z1(p.m1);
37  pa::vec z2(p.m2);
38  (void)solver(p, Σ1, Σ2, ε, true, x, y, z1, z2);
39  return std::make_tuple(std::move(x), std::move(y), std::move(z1),
40  std::move(z2), py::dict{});
41  };
42 }
43 
45  : public std::enable_shared_from_this<
46  PolymorphicInnerSolverStatsAccumulatorBase> {
47  public:
49  virtual py::dict to_dict() const = 0;
50  virtual void accumulate(const class PolymorphicInnerSolverStatsBase &) = 0;
51 };
52 
54  : public std::enable_shared_from_this<PolymorphicInnerSolverStatsBase> {
55  public:
56  virtual ~PolymorphicInnerSolverStatsBase() = default;
57  virtual py::dict to_dict() const = 0;
58  virtual std::shared_ptr<PolymorphicInnerSolverStatsAccumulatorBase>
59  accumulator() const = 0;
60 };
61 
63  : public std::enable_shared_from_this<PolymorphicInnerSolverBase> {
64  public:
65  struct Stats {
66  std::shared_ptr<PolymorphicInnerSolverStatsBase> ptr;
69  unsigned iterations;
70 
71  static Stats from_dict(py::dict d) {
72  using PolyStats = pa::PolymorphicInnerSolverStatsBase;
74  using InnerStats = pa::PolymorphicInnerSolverBase::Stats;
75  struct AccStats : PolyAccStats {
76  AccStats(py::dict dict) : dict(std::move(dict)) {}
77  py::dict dict;
78  py::dict to_dict() const override { return dict; }
79  void accumulate(const PolyStats &s) override {
80  if (this->dict.contains("accumulate"))
81  this->dict["accumulate"](this->dict, s.to_dict());
82  else
83  throw py::key_error("Stats accumulator does not define "
84  "an accumulate function");
85  }
86  };
87  struct Stats : PolyStats {
88  Stats(py::dict dict) : dict(std::move(dict)) {}
89  py::dict dict;
90  py::dict to_dict() const override { return dict; }
91  std::shared_ptr<PolyAccStats> accumulator() const override {
92  if (this->dict.contains("accumulator"))
93  return {
94  std::make_shared<AccStats>(
95  dict["accumulator"].cast<py::dict>()),
96  };
97  else
98  throw py::key_error(
99  "Stats do not define an accumulator");
100  }
101  };
102  bool ok = d.contains("status") && d.contains("ε") &&
103  d.contains("iterations");
104  if (not ok)
105  throw py::key_error(
106  "Stats should contain status, ε and iterations");
107  return {
108  std::static_pointer_cast<PolyStats>(std::make_shared<Stats>(d)),
109  d["status"].cast<decltype(InnerStats::status)>(),
110  d["ε"].cast<decltype(InnerStats::ε)>(),
111  d["iterations"].cast<decltype(InnerStats::iterations)>(),
112  };
113  }
114  };
115 
116  virtual ~PolymorphicInnerSolverBase() = default;
117  virtual Stats operator()(
119  const Problem &problem,
121  crvec Σ,
123  real_t ε,
125  bool always_overwrite_results,
127  rvec x,
129  rvec y,
131  rvec err_z) = 0;
132  virtual void stop() = 0;
133  virtual std::string get_name() const = 0;
134  virtual py::object get_params() const = 0;
135 };
136 
139  std::shared_ptr<PolymorphicInnerSolverBase> solver;
141  std::shared_ptr<PolymorphicInnerSolverBase> &&solver)
142  : solver(std::move(solver)) {}
143 
145  bool always_overwrite_results, rvec x, rvec y,
146  rvec err_z) {
147  return solver->operator()(problem, Σ, ε, always_overwrite_results, x, y,
148  err_z);
149  }
150  void stop() { solver->stop(); }
151  std::string get_name() const { return solver->get_name(); }
152  py::object get_params() const { return solver->get_params(); }
153 };
154 
155 template <class InnerSolverStats>
156 struct InnerStatsAccumulator;
157 
158 template <>
160  std::shared_ptr<PolymorphicInnerSolverStatsAccumulatorBase> ptr;
161  py::dict to_dict() const { return ptr->to_dict(); }
162 };
163 
164 inline InnerStatsAccumulator<PolymorphicInnerSolverWrapper::Stats> &
167  assert(s.ptr);
168  if (not acc.ptr)
169  acc.ptr = s.ptr->accumulator();
170  acc.ptr->accumulate(*s.ptr);
171  return acc;
172 }
173 
175  public:
177  bool always_overwrite_results, rvec x, rvec y,
178  rvec err_z) override {
179  py::dict stats;
180  std::tie(x, y, err_z, stats) =
181  call(problem, Σ, ε, always_overwrite_results, x, y);
182  return Stats::from_dict(stats);
183  }
184  virtual std::tuple<pa::vec, pa::vec, pa::vec, py::dict>
186  bool always_overwrite_results, pa::vec x, pa::vec y) {
187  using ret = std::tuple<pa::vec, pa::vec, pa::vec, py::dict>;
188  PYBIND11_OVERRIDE_PURE_NAME(ret, PolymorphicInnerSolverBase, "__call__",
189  call, problem, Σ, ε,
190  always_overwrite_results, x, y);
191  }
192  std::string get_name() const override {
193  PYBIND11_OVERRIDE_PURE(std::string, PolymorphicInnerSolverBase,
194  get_name, );
195  }
196  py::object get_params() const override {
197  PYBIND11_OVERRIDE_PURE(py::object, PolymorphicInnerSolverBase,
198  get_params, );
199  }
200  void stop() override {
201  PYBIND11_OVERRIDE_PURE(void, PolymorphicInnerSolverBase, stop, );
202  }
203 };
204 
205 inline py::dict stats_to_dict(const PANOCStats &s) {
206  using py::operator""_a;
207  return py::dict{
208  "status"_a = s.status,
209  "ε"_a = s.ε,
210  "elapsed_time"_a = s.elapsed_time,
211  "iterations"_a = s.iterations,
212  "linesearch_failures"_a = s.linesearch_failures,
213  "lbfgs_failures"_a = s.lbfgs_failures,
214  "lbfgs_rejected"_a = s.lbfgs_rejected,
215  "τ_1_accepted"_a = s.τ_1_accepted,
216  "count_τ"_a = s.count_τ,
217  "sum_τ"_a = s.sum_τ,
218  };
219 }
220 
222  using py::operator""_a;
223  return py::dict{
224  "elapsed_time"_a = s.elapsed_time,
225  "iterations"_a = s.iterations,
226  "linesearch_failures"_a = s.linesearch_failures,
227  "lbfgs_failures"_a = s.lbfgs_failures,
228  "lbfgs_rejected"_a = s.lbfgs_rejected,
229  "τ_1_accepted"_a = s.τ_1_accepted,
230  "count_τ"_a = s.count_τ,
231  "sum_τ"_a = s.sum_τ,
232  };
233 }
234 
236  using py::operator""_a;
237  return py::dict{
238  "status"_a = s.status,
239  "ε"_a = s.ε,
240  "elapsed_time"_a = s.elapsed_time,
241  "iterations"_a = s.iterations,
242  "linesearch_failures"_a = s.linesearch_failures,
243  "lbfgs_failures"_a = s.lbfgs_failures,
244  "lbfgs_rejected"_a = s.lbfgs_rejected,
245  "τ_1_accepted"_a = s.τ_1_accepted,
246  "count_τ"_a = s.count_τ,
247  "sum_τ"_a = s.sum_τ,
248  };
249 }
250 
251 inline py::dict stats_to_dict(const PGASolver::Stats &s) {
252  using py::operator""_a;
253  return py::dict{
254  "status"_a = s.status,
255  "ε"_a = s.ε,
256  "elapsed_time"_a = s.elapsed_time,
257  "iterations"_a = s.iterations,
258  };
259 }
260 
261 inline py::dict stats_to_dict(const GAAPGASolver::Stats &s) {
262  using py::operator""_a;
263  return py::dict{
264  "status"_a = s.status,
265  "ε"_a = s.ε,
266  "elapsed_time"_a = s.elapsed_time,
267  "iterations"_a = s.iterations,
268  "accelerated_steps_accepted"_a = s.accelerated_steps_accepted,
269  };
270 }
271 
272 inline py::dict stats_to_dict(
274  using py::operator""_a;
275  return py::dict{
276  "elapsed_time"_a = s.elapsed_time,
277  "iterations"_a = s.iterations,
278  "linesearch_failures"_a = s.linesearch_failures,
279  "lbfgs_failures"_a = s.lbfgs_failures,
280  "lbfgs_rejected"_a = s.lbfgs_rejected,
281  "τ_1_accepted"_a = s.τ_1_accepted,
282  "count_τ"_a = s.count_τ,
283  "sum_τ"_a = s.sum_τ,
284  };
285 }
286 
287 inline py::dict
289  using py::operator""_a;
290  return py::dict{
291  "elapsed_time"_a = s.elapsed_time,
292  "iterations"_a = s.iterations,
293  };
294 }
295 
296 inline py::dict
298  using py::operator""_a;
299  return py::dict{
300  "elapsed_time"_a = s.elapsed_time,
301  "iterations"_a = s.iterations,
302  "accelerated_steps_accepted"_a = s.accelerated_steps_accepted,
303  };
304 }
305 
306 template <class InnerSolver>
308  public:
310  : innersolver(std::forward<InnerSolver>(innersolver)) {}
313  template <class... Args>
315  : innersolver(InnerSolver{std::forward<Args>(args)...}) {}
316 
320  void
321  accumulate(const PolymorphicInnerSolverStatsBase &bstats) override {
322  auto &stats = dynamic_cast<const WrappedStats &>(bstats).stats;
323  acc += stats;
324  }
325  py::dict to_dict() const override { return stats_to_dict(acc); }
326  };
328  using Stats = typename InnerSolver::Stats;
331  std::shared_ptr<PolymorphicInnerSolverStatsAccumulatorBase>
332  accumulator() const override {
333  return std::static_pointer_cast<
335  std::make_shared<WrappedStatsAccumulator>());
336  }
337  py::dict to_dict() const override { return stats_to_dict(stats); }
338  };
339 
342  const Problem &problem,
344  crvec Σ,
346  real_t ε,
348  bool always_overwrite_results,
350  rvec x,
352  rvec y,
354  rvec err_z) override {
355  auto stats =
356  innersolver(problem, Σ, ε, always_overwrite_results, x, y, err_z);
357  return {
358  std::static_pointer_cast<PolymorphicInnerSolverStatsBase>(
359  std::make_shared<WrappedStats>(stats)),
360  stats.status,
361  stats.ε,
362  stats.iterations,
363  };
364  }
365  void stop() override { innersolver.stop(); }
366  std::string get_name() const override { return innersolver.get_name(); }
367  py::object get_params() const override {
368  return py::cast(innersolver.get_params());
369  }
370 
372  std::function<void(const typename InnerSolver::ProgressInfo &)> cb) {
373  this->innersolver.set_progress_callback(std::move(cb));
374  }
375 
376  InnerSolver innersolver;
377 };
378 
379 // template <class InnerSolver>
380 // class PolymorphicInnerSolverFull : public PolymorphicInnerSolverBase {
381 // public:
382 // PolymorphicInnerSolverFull(InnerSolver &&innersolver)
383 // : innersolver(std::forward<InnerSolver>(innersolver)) {}
384 // PolymorphicInnerSolverFull(const InnerSolver &innersolver)
385 // : innersolver(innersolver) {}
386 // template <class... Args>
387 // PolymorphicInnerSolverFull(Args... args)
388 // : innersolver(InnerSolver{std::forward<Args>(args)...}) {}
389 
390 // struct WrappedStatsAccumulator
391 // : PolymorphicInnerSolverStatsAccumulatorBase {
392 // InnerStatsAccumulator<InnerSolver> acc;
393 // void
394 // accumulate(const PolymorphicInnerSolverStatsBase &bstats) override {
395 // auto &stats = dynamic_cast<const WrappedStats &>(bstats).stats;
396 // acc += stats;
397 // }
398 // py::dict to_dict() const override {
399 // return stats_to_dict<InnerSolver>(acc);
400 // }
401 // };
402 // struct WrappedStats : PolymorphicInnerSolverStatsBase {
403 // using Stats = typename InnerSolver::Stats;
404 // WrappedStats(const Stats &stats) : stats(stats) {}
405 // Stats stats;
406 // std::shared_ptr<PolymorphicInnerSolverStatsAccumulatorBase>
407 // accumulator() const override {
408 // return std::static_pointer_cast<
409 // PolymorphicInnerSolverStatsAccumulatorBase>(
410 // std::make_shared<WrappedStatsAccumulator>());
411 // }
412 // py::dict to_dict() const override {
413 // return stats_to_dict<InnerSolver>(stats);
414 // }
415 // };
416 
417 // Stats operator()(
418 // /// [in] Problem description
419 // const ProblemFull &problem,
420 // /// [in] Constraint weights @f$ \Sigma @f$
421 // crvec Σ1,
422 // /// [in] Constraint weights @f$ \Sigma @f$
423 // crvec Σ2,
424 // /// [in] Tolerance @f$ \varepsilon @f$
425 // real_t ε,
426 // /// [in] Overwrite @p x, @p y and @p err_z even if not converged
427 // bool always_overwrite_results,
428 // /// [inout] Decision variable @f$ x @f$
429 // rvec x,
430 // /// [inout] Lagrange multipliers @f$ y @f$
431 // rvec y,
432 // /// [out] Slack variable error @f$ g(x) - z @f$
433 // rvec err_z1,
434 // /// [out] Slack variable error @f$ g(x) - z @f$
435 // rvec err_z2) override {
436 // auto stats =
437 // innersolver(problem, Σ1, Σ1, ε, always_overwrite_results, x, y,
438 // err_z1, err_z2);
439 // return {
440 // std::static_pointer_cast<PolymorphicInnerSolverStatsBase>(
441 // std::make_shared<WrappedStats>(stats)),
442 // stats.status,
443 // stats.ε,
444 // stats.iterations,
445 // };
446 // }
447 // void stop() override { innersolver.stop(); }
448 // std::string get_name() const override { return innersolver.get_name(); }
449 // py::object get_params() const override {
450 // return py::cast(innersolver.get_params());
451 // }
452 
453 // void set_progress_callback(
454 // std::function<void(const typename InnerSolver::ProgressInfo &)> cb) {
455 // this->innersolver.set_progress_callback(std::move(cb));
456 // }
457 
458 // InnerSolver innersolver;
459 // };
460 
461 } // namespace pa
462 
464 #include <panoc-alm/alm.hpp>
465 
466 namespace pa {
467 
476 
478 
479 inline py::dict stats_to_dict(const PolymorphicALMSolver::Stats &s) {
480  using py::operator""_a;
481  return py::dict{
482  "outer_iterations"_a = s.outer_iterations,
483  "elapsed_time"_a = s.elapsed_time,
484  "initial_penalty_reduced"_a = s.initial_penalty_reduced,
485  "penalty_reduced"_a = s.penalty_reduced,
486  "inner_convergence_failures"_a = s.inner_convergence_failures,
487  "ε"_a = s.ε,
488  "δ"_a = s.δ,
489  "norm_penalty"_a = s.norm_penalty,
490  "status"_a = s.status,
491  "inner"_a = s.inner.to_dict(),
492  };
493 }
494 
495 template <class InnerSolver>
496 inline py::dict
498  using py::operator""_a;
499  return py::dict{
500  "outer_iterations"_a = s.outer_iterations,
501  "elapsed_time"_a = s.elapsed_time,
502  "initial_penalty_reduced"_a = s.initial_penalty_reduced,
503  "penalty_reduced"_a = s.penalty_reduced,
504  "inner_convergence_failures"_a = s.inner_convergence_failures,
505  "ε"_a = s.ε,
506  "δ₁"_a = s.δ₁,
507  "δ₂"_a = s.δ₂,
508  "norm_penalty₁"_a = s.norm_penalty₁,
509  "norm_penalty₂"_a = s.norm_penalty₂,
510  "penalty₂"_a = s.penalty₂,
511  "status"_a = s.status,
512  "inner"_a = stats_to_dict(s.inner),
513  };
514 }
515 
516 } // namespace pa
pa::PolymorphicInnerSolver::WrappedStats::WrappedStats
WrappedStats(const Stats &stats)
Definition: polymorphic-inner-solver.hpp:329
pa::PANOCStats::τ_1_accepted
unsigned τ_1_accepted
Definition: inner/decl/panoc.hpp:59
pa::PolymorphicInnerSolverBase
Definition: polymorphic-inner-solver.hpp:63
pa::StructuredPANOCLBFGSSolver::Stats::lbfgs_failures
unsigned lbfgs_failures
Definition: decl/structured-panoc-lbfgs.hpp:90
pa::PolymorphicInnerSolver::get_params
py::object get_params() const override
Definition: polymorphic-inner-solver.hpp:367
pa::PolymorphicInnerSolverBase::stop
virtual void stop()=0
pa::PolymorphicInnerSolverTrampoline::operator()
Stats operator()(const Problem &problem, crvec Σ, real_t ε, bool always_overwrite_results, rvec x, rvec y, rvec err_z) override
Definition: polymorphic-inner-solver.hpp:176
pa::InnerSolverFullCallWrapper
auto InnerSolverFullCallWrapper()
Definition: polymorphic-inner-solver.hpp:32
codegen-rosenbrock.z
z
Definition: codegen-rosenbrock.py:10
pa::PolymorphicInnerSolver::WrappedStats
Definition: polymorphic-inner-solver.hpp:327
structured-panoc-lbfgs.hpp
pa::ALMSolver::Stats
Definition: decl/alm.hpp:87
panocpy.test.stats
stats
Definition: test.py:76
pga.hpp
pa::PolymorphicInnerSolverStatsAccumulatorBase::accumulate
virtual void accumulate(const class PolymorphicInnerSolverStatsBase &)=0
pa::rvec
Eigen::Ref< vec > rvec
Default type for mutable references to vectors.
Definition: vec.hpp:16
pa::StructuredPANOCLBFGSSolver::Stats::status
SolverStatus status
Definition: decl/structured-panoc-lbfgs.hpp:85
pa::InnerStatsAccumulator< GAAPGASolver::Stats >::accelerated_steps_accepted
unsigned accelerated_steps_accepted
Definition: guarded-aa-pga.hpp:357
pa::PolymorphicInnerSolverStatsBase
Definition: polymorphic-inner-solver.hpp:54
pa::PANOCStats::iterations
unsigned iterations
Definition: inner/decl/panoc.hpp:55
polymorphic-panoc-direction.hpp
lbfgs.hpp
pa::StructuredPANOCLBFGSSolver::Stats::elapsed_time
std::chrono::microseconds elapsed_time
Definition: decl/structured-panoc-lbfgs.hpp:87
pa::InnerStatsAccumulator< PGASolver::Stats >
Definition: pga.hpp:277
pa::PolymorphicInnerSolver::PolymorphicInnerSolver
PolymorphicInnerSolver(InnerSolver &&innersolver)
Definition: polymorphic-inner-solver.hpp:309
panoc.hpp
pa::PolymorphicInnerSolver::get_name
std::string get_name() const override
Definition: polymorphic-inner-solver.hpp:366
pa::PGASolver::Stats::status
SolverStatus status
Definition: pga.hpp:69
panocpy.test.y
y
Definition: test.py:76
pa::GAAPGASolver::Stats::elapsed_time
std::chrono::microseconds elapsed_time
Definition: guarded-aa-pga.hpp:81
pa::PGASolver::Stats::iterations
unsigned iterations
Definition: pga.hpp:72
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::InnerStatsAccumulator< PolymorphicInnerSolverWrapper::Stats >::to_dict
py::dict to_dict() const
Definition: polymorphic-inner-solver.hpp:161
pa::ALMSolver::Stats::δ
real_t δ
Definition: decl/alm.hpp:94
guarded-aa-pga.hpp
pa::PANOCSolverFull<>
pa::GAAPGASolver::Stats
Definition: guarded-aa-pga.hpp:78
pa::vec
realvec vec
Default type for vectors.
Definition: vec.hpp:14
pa::GAAPGASolver::Stats::iterations
unsigned iterations
Definition: guarded-aa-pga.hpp:82
pa::PolymorphicInnerSolver::WrappedStats::to_dict
py::dict to_dict() const override
Definition: polymorphic-inner-solver.hpp:337
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::PANOCStats::count_τ
unsigned count_τ
Definition: inner/decl/panoc.hpp:60
pa::PolymorphicInnerSolverTrampoline::call
virtual std::tuple< pa::vec, pa::vec, pa::vec, py::dict > call(const pa::Problem &problem, pa::crvec Σ, pa::real_t ε, bool always_overwrite_results, pa::vec x, pa::vec y)
Definition: polymorphic-inner-solver.hpp:185
pa::operator+=
InnerStatsAccumulator< PANOCStats > & operator+=(InnerStatsAccumulator< PANOCStats > &acc, const PANOCStats &s)
Definition: inner/decl/panoc.hpp:217
pa::PolymorphicInnerSolverWrapper::solver
std::shared_ptr< PolymorphicInnerSolverBase > solver
Definition: polymorphic-inner-solver.hpp:139
pa::PolymorphicInnerSolverStatsBase::accumulator
virtual std::shared_ptr< PolymorphicInnerSolverStatsAccumulatorBase > accumulator() const =0
pa::PolymorphicInnerSolverStatsAccumulatorBase
Definition: polymorphic-inner-solver.hpp:46
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::PolymorphicInnerSolver::WrappedStatsAccumulator::acc
InnerStatsAccumulator< typename InnerSolver::Stats > acc
Definition: polymorphic-inner-solver.hpp:319
pa::InnerSolverCallWrapper
auto InnerSolverCallWrapper()
Definition: polymorphic-inner-solver.hpp:20
pa::PolymorphicInnerSolver::WrappedStats::accumulator
std::shared_ptr< PolymorphicInnerSolverStatsAccumulatorBase > accumulator() const override
Definition: polymorphic-inner-solver.hpp:332
pa::PolymorphicInnerSolverBase::operator()
virtual Stats operator()(const Problem &problem, crvec Σ, real_t ε, bool always_overwrite_results, rvec x, rvec y, rvec err_z)=0
pa::PolymorphicInnerSolver::PolymorphicInnerSolver
PolymorphicInnerSolver(Args... args)
Definition: polymorphic-inner-solver.hpp:314
pa::PolymorphicInnerSolver::stop
void stop() override
Definition: polymorphic-inner-solver.hpp:365
pa::PANOCStats::status
SolverStatus status
Definition: inner/decl/panoc.hpp:52
main.problem
problem
Definition: main.py:16
pa::ALMSolver::Stats::inner
InnerStatsAccumulator< typename InnerSolver::Stats > inner
Definition: decl/alm.hpp:99
pa::StructuredPANOCLBFGSSolver::Stats::count_τ
unsigned count_τ
Definition: decl/structured-panoc-lbfgs.hpp:93
pa::ALMSolver::Stats::ε
real_t ε
Definition: decl/alm.hpp:93
pa::ALMSolver
Augmented Lagrangian Method solver.
Definition: decl/alm.hpp:82
pa::ALMSolverFull
Definition: decl/alm.hpp:128
pa::PolymorphicInnerSolverWrapper::operator()
Stats operator()(const Problem &problem, crvec Σ, real_t ε, bool always_overwrite_results, rvec x, rvec y, rvec err_z)
Definition: polymorphic-inner-solver.hpp:144
pa
Definition: alm.hpp:10
pa::PolymorphicInnerSolver::WrappedStatsAccumulator::to_dict
py::dict to_dict() const override
Definition: polymorphic-inner-solver.hpp:325
pa::PolymorphicInnerSolver::WrappedStats::stats
Stats stats
Definition: polymorphic-inner-solver.hpp:330
panocpy.test.x
x
Definition: test.py:40
pa::PANOCStats::lbfgs_rejected
unsigned lbfgs_rejected
Definition: inner/decl/panoc.hpp:58
pa::ALMSolver::Stats::status
SolverStatus status
Definition: decl/alm.hpp:97
pa::PolymorphicInnerSolverBase::get_name
virtual std::string get_name() const =0
alm.hpp
pa::PolymorphicInnerSolverWrapper
Definition: polymorphic-inner-solver.hpp:137
pa::PolymorphicInnerSolverBase::get_params
virtual py::object get_params() const =0
pa::PolymorphicInnerSolver::operator()
Stats operator()(const Problem &problem, crvec Σ, real_t ε, bool always_overwrite_results, rvec x, rvec y, rvec err_z) override
Definition: polymorphic-inner-solver.hpp:340
pa::PGASolver::Stats::ε
real_t ε
Definition: pga.hpp:70
pa::InnerStatsAccumulator< PANOCStats >
Definition: inner/decl/panoc.hpp:205
pa::PANOCStats::ε
real_t ε
Definition: inner/decl/panoc.hpp:53
pa::StructuredPANOCLBFGSSolver::Stats::linesearch_failures
unsigned linesearch_failures
Definition: decl/structured-panoc-lbfgs.hpp:89
pa::PolymorphicInnerSolverTrampoline::get_name
std::string get_name() const override
Definition: polymorphic-inner-solver.hpp:192
pa::PolymorphicInnerSolver::PolymorphicInnerSolver
PolymorphicInnerSolver(const InnerSolver &innersolver)
Definition: polymorphic-inner-solver.hpp:311
pa::PolymorphicInnerSolver::innersolver
InnerSolver innersolver
Definition: polymorphic-inner-solver.hpp:376
pa::InnerStatsAccumulator< GAAPGASolver::Stats >
Definition: guarded-aa-pga.hpp:354
pa::InnerStatsAccumulator< PolymorphicInnerSolverWrapper::Stats >
Definition: polymorphic-inner-solver.hpp:159
pa::PolymorphicInnerSolver::WrappedStatsAccumulator::accumulate
void accumulate(const PolymorphicInnerSolverStatsBase &bstats) override
Definition: polymorphic-inner-solver.hpp:321
pa::crvec
Eigen::Ref< const vec > crvec
Default type for immutable references to vectors.
Definition: vec.hpp:18
pa::PGASolver::Stats
Definition: pga.hpp:68
pa::ALMSolver::Stats::inner_convergence_failures
unsigned inner_convergence_failures
Definition: decl/alm.hpp:92
pa::stats_to_dict
py::dict stats_to_dict(const PANOCStats &s)
Definition: polymorphic-inner-solver.hpp:205
pa::PolymorphicInnerSolverWrapper::PolymorphicInnerSolverWrapper
PolymorphicInnerSolverWrapper(std::shared_ptr< PolymorphicInnerSolverBase > &&solver)
Definition: polymorphic-inner-solver.hpp:140
pa::PolymorphicInnerSolverWrapper::get_name
std::string get_name() const
Definition: polymorphic-inner-solver.hpp:151
pa::PolymorphicInnerSolverStatsAccumulatorBase::to_dict
virtual py::dict to_dict() const =0
pa::GAAPGASolver::Stats::accelerated_steps_accepted
unsigned accelerated_steps_accepted
Definition: guarded-aa-pga.hpp:83
pa::PolymorphicInnerSolverBase::Stats::status
SolverStatus status
Definition: polymorphic-inner-solver.hpp:67
panocpy.test.Σ
int Σ
Definition: test.py:70
pa::PGASolver::Stats::elapsed_time
std::chrono::microseconds elapsed_time
Definition: pga.hpp:71
pa::StructuredPANOCLBFGSSolver::Stats::ε
real_t ε
Definition: decl/structured-panoc-lbfgs.hpp:86
pa::InnerStatsAccumulator< PolymorphicInnerSolverWrapper::Stats >::ptr
std::shared_ptr< PolymorphicInnerSolverStatsAccumulatorBase > ptr
Definition: polymorphic-inner-solver.hpp:160
panocpy.test.solver
solver
Definition: test.py:8
pa::PANOCStats::sum_τ
real_t sum_τ
Definition: inner/decl/panoc.hpp:61
pa::PANOCStats
Definition: inner/decl/panoc.hpp:51
pa::PolymorphicInnerSolverBase::Stats::from_dict
static Stats from_dict(py::dict d)
Definition: polymorphic-inner-solver.hpp:71
pa::PolymorphicInnerSolverBase::Stats::ptr
std::shared_ptr< PolymorphicInnerSolverStatsBase > ptr
Definition: polymorphic-inner-solver.hpp:66
pa::PolymorphicInnerSolverStatsBase::to_dict
virtual py::dict to_dict() const =0
pa::ALMSolver::Stats::elapsed_time
std::chrono::microseconds elapsed_time
Definition: decl/alm.hpp:89
pa::GAAPGASolver::Stats::ε
real_t ε
Definition: guarded-aa-pga.hpp:80
pa::PolymorphicInnerSolverBase::Stats
Definition: polymorphic-inner-solver.hpp:65
pa::PolymorphicInnerSolverBase::~PolymorphicInnerSolverBase
virtual ~PolymorphicInnerSolverBase()=default
panocpy.test.p
p
Definition: test.py:57
pa::InnerStatsAccumulator
Definition: panoc-fwd.hpp:10
pa::ProblemFull
Problem description for minimization problems.
Definition: include/panoc-alm/util/problem.hpp:213
pa::PolymorphicInnerSolverStatsBase::~PolymorphicInnerSolverStatsBase
virtual ~PolymorphicInnerSolverStatsBase()=default
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::PolymorphicInnerSolverWrapper::stop
void stop()
Definition: polymorphic-inner-solver.hpp:150
pa::StructuredPANOCLBFGSSolver::Stats::iterations
unsigned iterations
Definition: decl/structured-panoc-lbfgs.hpp:88
pa::InnerStatsAccumulator< typename InnerSolver::Stats >
pa::PolymorphicInnerSolverTrampoline
Definition: polymorphic-inner-solver.hpp:174
pa::ALMSolver::Stats::penalty_reduced
unsigned penalty_reduced
Definition: decl/alm.hpp:91
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::PolymorphicInnerSolverBase::Stats::ε
real_t ε
Definition: polymorphic-inner-solver.hpp:68
pa::PolymorphicInnerSolver
Definition: polymorphic-inner-solver.hpp:307
pa::PolymorphicInnerSolverWrapper::get_params
py::object get_params() const
Definition: polymorphic-inner-solver.hpp:152
pa::PANOCStats::lbfgs_failures
unsigned lbfgs_failures
Definition: inner/decl/panoc.hpp:57
solverstatus.hpp
pa::PolymorphicInnerSolver::WrappedStats::Stats
typename InnerSolver::Stats Stats
Definition: polymorphic-inner-solver.hpp:328
pa::PolymorphicInnerSolverStatsAccumulatorBase::~PolymorphicInnerSolverStatsAccumulatorBase
virtual ~PolymorphicInnerSolverStatsAccumulatorBase()=default
pa::PolymorphicInnerSolverBase::Stats::iterations
unsigned iterations
Definition: polymorphic-inner-solver.hpp:69
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::PolymorphicInnerSolver::WrappedStatsAccumulator
Definition: polymorphic-inner-solver.hpp:318
pa::PolymorphicInnerSolverTrampoline::stop
void stop() override
Definition: polymorphic-inner-solver.hpp:200
pa::PolymorphicInnerSolver::set_progress_callback
void set_progress_callback(std::function< void(const typename InnerSolver::ProgressInfo &)> cb)
Definition: polymorphic-inner-solver.hpp:371
pa::GAAPGASolver::Stats::status
SolverStatus status
Definition: guarded-aa-pga.hpp:79
pa::PolymorphicInnerSolverTrampoline::get_params
py::object get_params() const override
Definition: polymorphic-inner-solver.hpp:196
pa::ALMSolver::Stats::outer_iterations
unsigned outer_iterations
Definition: decl/alm.hpp:88