3#ifndef pRC_ALGORITHMS_OPTIMIZER_LBFGS_H
4#define pRC_ALGORITHMS_OPTIMIZER_LBFGS_H
13 template<
class LS = LineSearch::Bracketing, Size M = 5>
17 static constexpr Size defaultMaxIterations()
22 template<
class G,
class T>
23 static constexpr auto projectedGradientConverged(G
const &g,
28 return infNorm <= tolerance * identity<T>(1e-3);
31 template<
class F,
class T>
32 static constexpr auto valueConverged(F
const &f0, F
const &f,
37 return delta(f0, f) <= tolerance * scale;
41 static constexpr auto valueDiverged(F
const &f)
47 static constexpr auto valueIncreased(F
const &f0, F
const &f)
52 template<
class S,
class Y,
class R,
class H>
53 static constexpr auto resetHistory(
S &s, Y &
y, R &rho, H &H0)
63 template<
class S,
class Y,
class R,
class H,
class G>
64 static constexpr auto applyHessianMatrix(
S const &s, Y
const &
y,
65 R
const &rho, H
const &H0,
Size const size, G
const &g)
83 q += s.front(
i) * (alpha.
front(
i) - beta);
109 return mMaxIterations;
112 template<
class XX,
class FF,
class FC,
122 inline constexpr auto operator()(XX &&x0, FF &&function, FC &&callback,
125 using TX =
typename RX::Type;
131 auto f = function(
x, g);
135 if(projectedGradientConverged(g, tolerance))
146 for(
Index iteration = 0;;)
148 Tensor p = -applyHessianMatrix(s,
y, rho, H0, s.
size(), g);
153 resetHistory(s,
y, rho, H0);
173 if(valueIncreased(f0, f))
187 if(valueConverged(f0, f, tolerance))
193 if(projectedGradientConverged(g, tolerance))
211 return forward<XX>(x0);
220 LS
const mLineSearch;
221 Size const mMaxIterations;
constexpr auto size() const
Definition deque.hpp:28
constexpr decltype(auto) front(Index const position=0) &&
Definition deque.hpp:33
constexpr auto pushFront(R const &element) &&
Definition deque.hpp:81
constexpr decltype(auto) back(Index const position=0) &&
Definition deque.hpp:53
constexpr auto pushBack(R const &element) &&
Definition deque.hpp:135
constexpr LBFGS(LS const &lineSearch, Size const maxIterations=defaultMaxIterations())
Definition lbfgs.hpp:90
constexpr auto operator()(XX &&x0, FF &&function, FC &&callback, VT const &tolerance=NumericLimits< VT >::tolerance()) const
Definition lbfgs.hpp:122
constexpr auto maxIterations() const
Definition lbfgs.hpp:107
constexpr auto & lineSearch() const
Definition lbfgs.hpp:102
constexpr LBFGS(Size const maxIterations=defaultMaxIterations())
Definition lbfgs.hpp:97
Definition concepts.hpp:25
Definition concepts.hpp:31
Definition concepts.hpp:19
Definition declarations.hpp:27
Definition declarations.hpp:45
TN::Subscripts S
Definition externs_nonTT.hpp:9
int i
Definition gmock-matchers-comparisons_test.cc:603
const double y
Definition gmock-matchers-containers_test.cc:377
int x
Definition gmock-matchers-containers_test.cc:376
const char * p
Definition gmock-matchers-containers_test.cc:379
static void info(Xs &&...args)
Definition log.hpp:27
static constexpr auto isFinite(T const &a)
Definition is_finite.hpp:13
static constexpr Conditional< C, RemoveConstReference< X >, RemoveConst< X > > copy(X &&a)
Definition copy.hpp:13
static constexpr auto rcp(T const &b)
Definition rcp.hpp:12
Size Index
Definition basics.hpp:32
std::size_t Size
Definition basics.hpp:31
std::invoke_result_t< F, Args... > ResultOf
Definition basics.hpp:59
std::remove_reference_t< T > RemoveReference
Definition basics.hpp:41
static constexpr auto abs(T const &a)
Definition abs.hpp:11
typename ValueType< T >::Type Value
Definition value.hpp:72
static constexpr auto scalarProduct(TA const &a, TB const &b)
Definition scalar_product.hpp:11
static constexpr auto delta(TA const &a, TB const &b)
Definition delta.hpp:11
RemoveConst< RemoveReference< T > > RemoveConstReference
Definition basics.hpp:47
static constexpr auto identity()
Definition identity.hpp:13
static constexpr auto zero()
Definition zero.hpp:12
static constexpr decltype(auto) eval(X &&a)
Definition eval.hpp:12
static constexpr auto norm(T const &a)
Definition norm.hpp:12
static constexpr decltype(auto) max(X &&a)
Definition max.hpp:13