Accelerators#
- group grp_Accelerators
Computing accelerated directions, such as L-BFGS.
-
template<Config Conf = DefaultConfig>
class AndersonAccel# - #include <alpaqa/accelerators/anderson.hpp>
Anderson Acceleration.
Algorithm for accelerating fixed-point iterations for finding fixed points of a function \( g \), i.e. \( g(x^\star) = x^\star \), or equivalently, roots of the residual \( r(x) \triangleq g(x) - x \).
Public Types
-
using Params = AndersonAccelParams<config_t>#
Public Functions
-
AndersonAccel() = default#
-
inline AndersonAccel(Params params, length_t n)#
- Parameters:
params – Parameters.
n – Problem dimension (size of the vectors).
-
inline void resize(length_t n)#
Change the problem dimension.
Flushes the history.
- Parameters:
n – Problem dimension (size of the vectors).
-
inline void initialize(crvec g_0, crvec r_0)#
Call this function on the first iteration to initialize the accelerator.
-
inline void compute(crvec gₖ, crvec rₖ, rvec xₖ_aa)#
Compute the accelerated iterate \( x^k_\text{AA} \), given the function value at the current iterate \( g^k = g(x^k) \) and the corresponding residual \( r^k = g^k - x^k \).
-
inline void compute(crvec gₖ, vec &&rₖ, rvec xₖ_aa)#
Compute the accelerated iterate \( x^k_\text{AA} \), given the function value at the current iterate \( g^k = g(x^k) \) and the corresponding residual \( r^k = g^k - x^k \).
-
inline void reset()#
Reset the accelerator (but keep the last function value and residual, so calling initialize is not necessary).
-
inline std::string get_name() const#
-
inline const LimitedMemoryQR<config_t> &get_QR() const#
For testing purposes.
-
using Params = AndersonAccelParams<config_t>#
-
template<Config Conf = DefaultConfig>
class LBFGS# - #include <alpaqa/accelerators/lbfgs.hpp>
Limited memory Broyden–Fletcher–Goldfarb–Shanno (L-BFGS) algorithm.
Public Types
-
enum class Sign#
The sign of the vectors \( p \) passed to the update method.
Values:
-
enumerator Positive#
\( p \sim \nabla \psi(x) \)
-
enumerator Negative#
\( p \sim -\nabla \psi(x) \)
-
enumerator Positive#
-
using Params = LBFGSParams<config_t>#
Public Functions
-
LBFGS() = default#
-
bool update_sy(crvec s, crvec y, real_t pₙₑₓₜᵀpₙₑₓₜ, bool forced = false)#
Update the inverse Hessian approximation using the new vectors sₖ = xₙₑₓₜ - xₖ and yₖ = pₙₑₓₜ - pₖ.
-
bool update_sy_impl(const auto &s, const auto &y, real_t pₙₑₓₜᵀpₙₑₓₜ, bool forced = false)#
See also
-
bool update(crvec xₖ, crvec xₙₑₓₜ, crvec pₖ, crvec pₙₑₓₜ, Sign sign = Sign::Positive, bool forced = false)#
Update the inverse Hessian approximation using the new vectors xₙₑₓₜ and pₙₑₓₜ.
-
bool apply(rvec q, real_t γ = -1) const#
Apply the inverse Hessian approximation to the given vector q.
Initial inverse Hessian approximation is set to \( H_0 = \gamma I \). If
γ
is negative, \( H_0 = \frac{s^\top y}{y^\top y} I \).
-
bool apply_masked(rvec q, real_t γ, crindexvec J) const#
Apply the inverse Hessian approximation to the given vector q, applying only the columns and rows of the Hessian in the index set J.
-
bool apply_masked(rvec q, real_t γ, const std::vector<index_t> &J) const#
Apply the inverse Hessian approximation to the given vector q, applying only the columns and rows of the Hessian in the index set J.
-
bool apply_masked_impl(rvec q, real_t γ, const auto &J) const#
Apply the inverse Hessian approximation to the given vector q, applying only the columns and rows of the Hessian in the index set J.
-
void reset()#
Throw away the approximation and all previous vectors s and y.
-
inline std::string get_name() const#
Get a string identifier for this accelerator.
-
inline index_t succ(index_t i) const#
Get the next index in the circular buffer of previous s and y vectors.
-
inline index_t pred(index_t i) const#
Get the previous index in the circular buffer of s and y vectors.
-
inline length_t current_history() const#
Get the number of previous s and y vectors currently stored in the buffer.
-
enum class Sign#
-
template<Config Conf = DefaultConfig>