alpaqa pantr
Nonconvex constrained optimization
Loading...
Searching...
No Matches
Classes | Namespaces | Enumerations
accelerators/lbfgs.hpp File Reference
#include <alpaqa/config/config.hpp>
#include <alpaqa/export.hpp>
#include <cmath>
#include <limits>
#include <string>
#include <utility>
#include <vector>
+ Include dependency graph for accelerators/lbfgs.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  CBFGSParams< Conf >
 Cautious BFGS update. More...
 
struct  LBFGSParams< Conf >
 Parameters for the LBFGS class. More...
 
struct  LBFGSStorage< Conf >
 Layout: More...
 
class  LBFGS< Conf >
 Limited memory Broyden–Fletcher–Goldfarb–Shanno (L-BFGS) algorithm. More...
 

Namespaces

namespace  alpaqa
 

Enumerations

enum class  LBFGSStepSize { BasedOnExternalStepSize = 0 , BasedOnCurvature = 1 , BasedOnGradientStepSize }
 Which method to use to select the L-BFGS step size. More...
 

Class Documentation

◆ alpaqa::LBFGSParams

struct alpaqa::LBFGSParams
+ Collaboration diagram for LBFGSParams< Conf >:
Class Members
length_t memory = 10 Length of the history to keep.
real_t min_div_fac = std::numeric_limits<real_t>::epsilon() Reject update if \( y^\top s \le \text{min_div_fac} \cdot s^\top s \).
real_t min_abs_s Reject update if \( s^\top s \le \text{min_abs_s} \).
CBFGSParams< config_t > cbfgs = {} Parameters in the cautious BFGS update condition.

\[ \frac{y^\top s}{s^\top s} \ge \epsilon \| g \|^\alpha \]

See also
https://epubs.siam.org/doi/10.1137/S1052623499354242
bool force_pos_def = true If set to true, the inverse Hessian estimate should remain definite, i.e.

a check is performed that rejects the update if \( y^\top s \le \text{min_div_fac} \cdot s^\top s \). If set to false, just try to prevent a singular Hessian by rejecting the update if \( \left| y^\top s \right| \le \text{min_div_fac} \cdot s^\top s \).

LBFGSStepSize stepsize = LBFGSStepSize::BasedOnCurvature
See also
LBFGSStepSize