aligator  0.16.0
A versatile and efficient C++ library for real-time constrained trajectory optimization.
Loading...
Searching...
No Matches
linesearch-nonmonotone.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "linesearch-base.hpp"
4#include <functional>
5
6namespace aligator {
7
11template <typename Scalar> struct NonmonotoneLinesearch : Linesearch<Scalar> {
13 using Base::options_;
14 using typename Base::FunctionSample;
15 using typename Base::Options;
16
17 explicit NonmonotoneLinesearch(const Options &options) noexcept
18 : Base(options)
19 , mov_avg(0.)
20 , avg_weight(0.) {}
21
22 Scalar run(const std::function<Scalar(Scalar)> &f, Scalar phi0, Scalar dphi0,
23 Scalar &a_opt) {
24 mov_avg = avg_eta * avg_weight * mov_avg + phi0;
25 avg_weight = avg_eta * avg_weight + 1;
26 mov_avg /= avg_weight;
27
28 while (a_opt > options_.alpha_min) {
29 try {
30 const Scalar phia = f(a_opt);
31 bool suff_decrease =
32 phia <= mov_avg + options_.armijo_c1 * a_opt * dphi0;
33 if (suff_decrease)
34 return phia;
35 } catch (const std::runtime_error &) {
36 }
37 a_opt *= beta_dec;
38 }
39
40 // then, a_opt <= options_.alpha_min
41 a_opt = std::max(a_opt, options_.alpha_min);
42 return f(a_opt);
43 }
44
45 void reset() noexcept {
46 mov_avg = Scalar(0.);
47 avg_weight = Scalar(0.);
48 }
49
51 Scalar avg_eta = 0.85;
52 Scalar beta_dec = 0.5;
53
54private:
55 Scalar mov_avg;
56 Scalar avg_weight;
57};
58
59template <typename Scalar>
62
63} // namespace aligator
LinesearchOptions< Scalar > Options
Linesearch(const Linesearch::Options &options) noexcept
Base structs for linesearch algorithms.
Main package namespace.
NonmonotoneLinesearch(const LinesearchOptions< Scalar > &) -> NonmonotoneLinesearch< Scalar >
Nonmonotone Linesearch algorithm. Modifies the Armijo condition with a moving average of function val...
Scalar run(const std::function< Scalar(Scalar)> &f, Scalar phi0, Scalar dphi0, Scalar &a_opt)
Scalar avg_eta
Weight for moving average.
NonmonotoneLinesearch(const Options &options) noexcept
LinesearchOptions< Scalar > Options