alpaqa 1.0.0a11
Nonconvex constrained optimization
Loading...
Searching...
No Matches
Classes | Namespaces | Functions
panoc-ocp.hpp File Reference
#include <alpaqa/accelerators/lbfgs.hpp>
#include <alpaqa/inner/panoc.hpp>
#include <alpaqa/problem/ocproblem.hpp>
#include <chrono>
#include <iostream>
#include <limits>
#include <string>
+ Include dependency graph for panoc-ocp.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  PANOCOCPParams< Conf >
 Tuning parameters for the PANOC algorithm. More...
 
struct  PANOCOCPProgressInfo< Conf >
 
struct  PANOCOCPStats< Conf >
 
class  PANOCOCPSolver< Conf >
 
struct  InnerStatsAccumulator< PANOCOCPStats< Conf > >
 

Namespaces

namespace  alpaqa
 

Functions

template<Config Conf>
InnerStatsAccumulator< PANOCOCPStats< Conf > > & operator+= (InnerStatsAccumulator< PANOCOCPStats< Conf > > &acc, const PANOCOCPStats< Conf > &s)
 

Class Documentation

◆ alpaqa::PANOCOCPParams

struct alpaqa::PANOCOCPParams
+ Collaboration diagram for PANOCOCPParams< Conf >:
Class Members
LipschitzEstimateParams< config_t > Lipschitz Parameters related to the Lipschitz constant estimate and step size.
unsigned max_iter = 100 Maximum number of inner PANOC iterations.
nanoseconds max_time = std::chrono::minutes(5) Maximum duration.
real_t min_linesearch_coefficient = real_t(1. / 256) Minimum weight factor between Newton step and projected gradient step, line search parameter.
real_t linesearch_strictness_factor = real_t(0.95) Parameter β used in the line search (see Algorithm 2 in [1]).

\( 0 < \beta < 1 \)

real_t L_min = real_t(1e-5) Minimum Lipschitz constant estimate.
real_t L_max = real_t(1e20) Maximum Lipschitz constant estimate.
unsigned L_max_inc = 16 Maximum number of times to double the Lipschitz constant estimate per iteration.
PANOCStopCrit stop_crit = PANOCStopCrit::ApproxKKT What stopping criterion to use.
unsigned max_no_progress = 10 Maximum number of iterations without any progress before giving up.
unsigned gn_interval = 1 How often to use a Gauss-Newton step. Zero to disable GN entirely.
bool gn_sticky = true
bool reset_lbfgs_on_gn_step = false
bool lqr_factor_cholesky = true
LBFGSParams< config_t > lbfgs_params L-BFGS parameters (e.g. memory).
unsigned print_interval = 0 When to print progress.

If set to zero, nothing will be printed. If set to N != 0, progress is printed every N iterations.

int print_precision = std::numeric_limits<real_t>::max_digits10 / 2 The precision of the floating point values printed by the solver.
real_t quadratic_upperbound_tolerance_factor
real_t linesearch_tolerance_factor
bool disable_acceleration = false

◆ alpaqa::PANOCOCPStats

struct alpaqa::PANOCOCPStats
+ Collaboration diagram for PANOCOCPStats< Conf >:
Class Members
SolverStatus status = SolverStatus::Busy
real_t ε = inf<config_t>
nanoseconds elapsed_time {}
nanoseconds time_prox {}
nanoseconds time_forward {}
nanoseconds time_backward {}
nanoseconds time_jacobians {}
nanoseconds time_hessians {}
nanoseconds time_indices {}
nanoseconds time_lqr_factor {}
nanoseconds time_lqr_solve {}
nanoseconds time_lbfgs_indices {}
nanoseconds time_lbfgs_apply {}
nanoseconds time_lbfgs_update {}
nanoseconds time_progress_callback {}
unsigned iterations = 0
unsigned linesearch_failures = 0
unsigned linesearch_backtracks = 0
unsigned stepsize_backtracks = 0
unsigned lbfgs_failures = 0
unsigned lbfgs_rejected = 0
unsigned τ_1_accepted = 0
unsigned count_τ = 0
real_t sum_τ = 0
real_t final_γ = 0
real_t final_ψ = 0
real_t final_h = 0
real_t final_φγ = 0

◆ alpaqa::InnerStatsAccumulator< PANOCOCPStats< Conf > >

struct alpaqa::InnerStatsAccumulator< PANOCOCPStats< Conf > >
+ Collaboration diagram for InnerStatsAccumulator< PANOCOCPStats< Conf > >:
Class Members
nanoseconds elapsed_time {} Total elapsed time in the inner solver.
nanoseconds time_prox {} Total time spent computing proximal mappings.
nanoseconds time_forward {} Total time spent doing forward simulations.
nanoseconds time_backward {} Total time spent doing backward gradient evaluations.
nanoseconds time_jacobians {} Total time spent computing dynamics Jacobians.
nanoseconds time_hessians {} Total time spent computing cost Hessians and Hessian-vector products.
nanoseconds time_indices {} Total time spent determining active indices.
nanoseconds time_lqr_factor {} Total time spent performing LQR factorizations.
nanoseconds time_lqr_solve {} Total time spent solving the (factorized) LQR problem.
nanoseconds time_lbfgs_indices {} Total time spent determining active indices for L-BFGS applications.
nanoseconds time_lbfgs_apply {} Total time spent applying L-BFGS estimates.
nanoseconds time_lbfgs_update {} Total time spent updating the L-BFGS estimate.
nanoseconds time_progress_callback {} Total time spent in the user-provided progress callback.
unsigned iterations = 0 Total number of inner PANOC iterations.
unsigned linesearch_failures = 0 Total number of PANOC line search failures.
unsigned linesearch_backtracks = 0 Total number of PANOC line search backtracking steps.
unsigned stepsize_backtracks = 0 Total number of PANOC step size reductions.
unsigned lbfgs_failures = 0 Total number of times that the L-BFGS direction was not finite.
unsigned lbfgs_rejected = 0 Total number of times that the L-BFGS update was rejected (i.e.

it could have resulted in a non-positive definite Hessian estimate).

unsigned τ_1_accepted = 0 Total number of times that a line search parameter of \( \tau = 1 \) was accepted (i.e.

no backtracking necessary).

unsigned count_τ = 0 The total number of line searches performed (used for computing the average value of \( \tau \)).
real_t sum_τ = 0 The sum of the line search parameter \( \tau \) in all iterations (used for computing the average value of \( \tau \)).
real_t final_γ = 0 The final PANOC step size γ.
real_t final_ψ = 0 Final value of the smooth cost \( \psi(\hat x) \).
real_t final_h = 0 Final value of the nonsmooth cost \( h(\hat x) \).
real_t final_φγ = 0 Final value of the forward-backward envelope, \( \varphi_\gamma(x) \) (note that this is in the point \( x \), not \( \hat x \)).