aligator
0.19.0
A versatile and efficient C++ library for real-time constrained trajectory optimization.
Toggle main menu visibility
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
6
namespace
aligator
{
7
11
template
<
typename
Scalar>
struct
NonmonotoneLinesearch
:
Linesearch
<Scalar> {
12
using
Base
=
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
54
private
:
55
Scalar mov_avg;
56
Scalar avg_weight;
57
};
58
59
template
<
typename
Scalar>
60
NonmonotoneLinesearch
(
const
LinesearchOptions<Scalar>
&)
61
->
NonmonotoneLinesearch<Scalar>
;
62
63
}
// namespace aligator
aligator::Linesearch< Scalar >::Options
LinesearchOptions< Scalar > Options
Definition
linesearch-base.hpp:48
aligator::Linesearch< Scalar >::Linesearch
Linesearch(const Linesearch::Options &options) noexcept
Definition
linesearch-base.hpp:49
aligator::Linesearch< Scalar >::options_
Linesearch::Options options_
Definition
linesearch-base.hpp:79
linesearch-base.hpp
Base structs for linesearch algorithms.
aligator
Main package namespace.
Definition
action-model-wrap.hpp:14
aligator::NonmonotoneLinesearch
NonmonotoneLinesearch(const LinesearchOptions< Scalar > &) -> NonmonotoneLinesearch< Scalar >
aligator::LinesearchOptions
Definition
linesearch-base.hpp:13
aligator::NonmonotoneLinesearch
Nonmonotone Linesearch algorithm. Modifies the Armijo condition with a moving average of function val...
Definition
linesearch-nonmonotone.hpp:11
aligator::NonmonotoneLinesearch::options_
Linesearch::Options options_
Definition
linesearch-base.hpp:79
aligator::NonmonotoneLinesearch::run
Scalar run(const std::function< Scalar(Scalar)> &f, Scalar phi0, Scalar dphi0, Scalar &a_opt)
Definition
linesearch-nonmonotone.hpp:22
aligator::NonmonotoneLinesearch::Options
LinesearchOptions< Scalar > Options
Definition
linesearch-base.hpp:48
aligator::NonmonotoneLinesearch::reset
void reset() noexcept
Definition
linesearch-nonmonotone.hpp:45
aligator::NonmonotoneLinesearch::avg_eta
Scalar avg_eta
Weight for moving average.
Definition
linesearch-nonmonotone.hpp:51
aligator::NonmonotoneLinesearch::Base
Linesearch< Scalar > Base
Definition
linesearch-nonmonotone.hpp:12
aligator::NonmonotoneLinesearch::NonmonotoneLinesearch
NonmonotoneLinesearch(const Options &options) noexcept
Definition
linesearch-nonmonotone.hpp:17
aligator::NonmonotoneLinesearch::beta_dec
Scalar beta_dec
Definition
linesearch-nonmonotone.hpp:52
include
aligator
core
linesearch-nonmonotone.hpp
Generated by
1.17.0