14 using typename Base::FunctionSample;
22 Scalar
run(
const std::function<Scalar(Scalar)> &f, Scalar phi0, Scalar dphi0,
24 mov_avg =
avg_eta * avg_weight * mov_avg + phi0;
25 avg_weight =
avg_eta * avg_weight + 1;
26 mov_avg /= avg_weight;
30 const Scalar phia = f(a_opt);
32 phia <= mov_avg +
options_.armijo_c1 * a_opt * dphi0;
35 }
catch (
const std::runtime_error &) {
41 a_opt = std::max(a_opt,
options_.alpha_min);
47 avg_weight = Scalar(0.);
59template <
typename Scalar>
LinesearchOptions< Scalar > Options
Linesearch(const Linesearch::Options &options) noexcept
Linesearch::Options options_
Base structs for linesearch algorithms.
NonmonotoneLinesearch(const LinesearchOptions< Scalar > &) -> NonmonotoneLinesearch< Scalar >
Nonmonotone Linesearch algorithm. Modifies the Armijo condition with a moving average of function val...
Linesearch::Options options_
Scalar run(const std::function< Scalar(Scalar)> &f, Scalar phi0, Scalar dphi0, Scalar &a_opt)
Scalar avg_eta
Weight for moving average.
Linesearch< Scalar > Base
NonmonotoneLinesearch(const Options &options) noexcept
LinesearchOptions< Scalar > Options