3#ifndef pRC_ALGORITHMS_OPTIMIZER_LBFGS_H
4#define pRC_ALGORITHMS_OPTIMIZER_LBFGS_H
18 template<
class LS = LineSearch::Bracketing, Size M = 5>
22 static constexpr Size defaultMaxIterations()
27 template<
class G,
class T>
28 static constexpr auto projectedGradientConverged(
G const &
g,
36 template<
class F,
class T>
37 static constexpr auto valueConverged(F
const &
f0, F
const &
f,
46 static constexpr auto valueDiverged(F
const &
f)
52 static constexpr auto valueIncreased(F
const &
f0, F
const &
f)
57 template<
class S,
class Y,
class R,
class H>
58 static constexpr auto resetHistory(
S &s,
Y &
y,
R &
rho,
H &
H0)
68 template<
class S,
class Y,
class R,
class H,
class G>
69 static constexpr auto applyHessianMatrix(
S const &s,
Y const &
y,
114 return mMaxIterations;
117 template<
class XX,
class RX = RemoveReference<XX>,
118 class TX =
typename RX::Type,
class VX =
typename TX::Value,
119 If<IsTensorish<RX>> = 0,
120 class RXE = RemoveConstReference<ResultOf<Eval, XX>>,
class FF,
121 If<IsInvocable<FF, RXE const &, RXE &>> = 0,
122 If<IsFloat<ResultOf<FF, RXE const &, RXE &>>> = 0,
class FC,
123 If<IsInvocable<FC, RXE>> = 0,
class VT = VX,
124 If<All<IsFloat<VX>, IsFloat<VT>>> = 0,
125 If<IsInvocable<LS, RXE &, ResultOf<FF, RXE const &, RXE &> &, RXE &,
126 VX &, FF, RXE const &>> = 0>
138 if(projectedGradientConverged(
g, tolerance))
156 resetHistory(s,
y,
rho,
H0);
176 if(valueIncreased(
f0,
f))
190 if(valueConverged(
f0,
f, tolerance))
196 if(projectedGradientConverged(
g, tolerance))
223 LS const mLineSearch;
224 Size const mMaxIterations;
constexpr auto size() const
Definition deque.hpp:28
constexpr auto pushBack(R const &element) &&
Definition deque.hpp:133
constexpr decltype(auto) back(Index const position=0) &&
Definition deque.hpp:53
constexpr LBFGS(LS const &lineSearch, Size const maxIterations=defaultMaxIterations())
Definition lbfgs.hpp:95
constexpr auto maxIterations() const
Definition lbfgs.hpp:112
constexpr auto & lineSearch() const
Definition lbfgs.hpp:107
constexpr auto operator()(XX &&x0, FF &&function, FC &&callback, VT const &tolerance=NumericLimits< VT >::tolerance()) const
Definition lbfgs.hpp:127
constexpr LBFGS(Size const maxIterations=defaultMaxIterations())
Definition lbfgs.hpp:102
TN::Subscripts S
Definition externs_nonTT.hpp:9
static void info(Xs &&...args)
Definition log.hpp:27
static constexpr auto isFinite(T const &a)
Definition is_finite.hpp:13
static constexpr X eval(X &&a)
Definition eval.hpp:11
static constexpr auto makeConstantSequence()
Definition sequence.hpp:402
Size Index
Definition type_traits.hpp:21
static constexpr auto rcp(Complex< T > const &b)
Definition rcp.hpp:13
std::size_t Size
Definition type_traits.hpp:20
std::invoke_result_t< F, Args... > ResultOf
Definition type_traits.hpp:140
static constexpr auto zero()
Definition zero.hpp:12
std::is_reference< T > IsReference
Definition type_traits.hpp:47
static constexpr auto delta(Complex< TA > const &a, Complex< TB > const &b)
Definition delta.hpp:12
static constexpr auto abs(Complex< T > const &a)
Definition abs.hpp:12
static constexpr Conditional< IsSatisfied< C >, RemoveConstReference< X >, X > copy(X &&a)
Definition copy.hpp:13
static constexpr auto scalarProduct(Complex< TA > const &a, Complex< TB > const &b)
Definition scalar_product.hpp:13
static constexpr auto identity()
Definition identity.hpp:12
static constexpr X max(X &&a)
Definition max.hpp:13