9#ifndef pRC_ALGORITHMS_OPTIMIZER_LBFGSB_H
10#define pRC_ALGORITHMS_OPTIMIZER_LBFGSB_H
31 template<
class LS = LineSearch::MoreThuente, Size M = 5>
35 static constexpr Size defaultMaxIterations()
40 template<
class X,
class G,
class L,
class U,
class T>
41 static constexpr auto projectedGradientConverged(
X const &
x,
G const &
g,
52 template<
class F,
class T>
53 static constexpr auto valueConverged(F
const &
f0, F
const &
f,
62 static constexpr auto valueDiverged(F
const &
f)
68 static constexpr auto valueIncreased(F
const &
f0, F
const &
f)
73 template<
class S,
class Y,
class STY,
class J,
class T>
122 template<
class X,
class G,
class LB,
class UB,
class T,
class S,
123 class Y,
class STY,
class J,
class C>
124 static constexpr auto computeGeneralizedCauchyPoint(
X const &
x,
129 using TX =
typename X::Type;
138 for(
Index i = 0;
i < X::size(); ++
i)
144 [&
t](
auto const i,
auto const j)
153 for(
Index m = 0; m < s.size(); ++m)
161 auto const mp = applyMiddleMatrix(
sTy,
j,
p, s.size());
168 while(
t[b] <=
zero())
192 auto const z =
xCP[b] -
x[b];
202 for(
Index m = 0; m < s.size(); ++m)
204 w0(m) =
y.front(m)[b];
208 auto wM = applyMiddleMatrix(
sTy,
j,
w, s.size());
239 template<
class X,
class CP,
class G,
class LB,
class UB,
class T,
240 class S,
class Y,
class STY,
class J,
class C>
241 static constexpr auto minimizeSubspace(
X const &
x,
CP &
xCP,
G const &
g,
243 S const &s,
Y const &
y,
STY const &
sTy,
J const &
j,
C const &c)
245 using TX =
typename X::Type;
248 Tensor const mc = applyMiddleMatrix(
sTy,
j, c, s.size());
249 for(
Index m = 0; m < s.size(); ++m)
251 r +=
y.front(m) *
mc(m);
252 r += s.front(m) *
theta *
mc(M + m);
257 for(
Index i = 0;
i < X::size(); ++
i)
272 for(
Index m = 0; m < s.size(); ++m)
282 for(
Index m = 0; m <
y.size(); ++m)
299 for(
Index m = 0; m <
zTy.size(); ++m)
301 for(
Index n = 0; n <
zTy.size(); ++n)
315 for(
Index m = 0; m <
zTy.size(); ++m)
317 for(
Index n = 0; n <
zTs.size(); ++n)
331 for(
Index m = 0; m < s.size(); ++m)
333 for(
Index n = 0; n < s.size(); ++n)
347 for(
Index m = 0; m <
zTy.size(); ++m)
351 for(
Index m = 0; m <
zTs.size(); ++m)
361 for(
Index m = 0; m <
zTy.size(); ++m)
414 template<
class X,
class P,
class LB,
class UB>
415 static constexpr auto getLineSearchParameters(
X const &
x,
P const &
p,
418 using TX =
typename X::Type;
422 for(
Index i = 0;
i < X::size(); ++
i)
481 return mMaxIterations;
484 template<
class XX,
class RX = RemoveReference<XX>,
485 class TX =
typename RX::Type,
class VX =
typename TX::Value,
486 If<IsTensorish<RX>> = 0,
487 class RXE = RemoveConstReference<ResultOf<Eval, XX>>,
class FF,
488 If<IsInvocable<FF, RXE const &, RXE &>> = 0,
489 If<IsFloat<ResultOf<FF, RXE const &, RXE &>>> = 0,
class FC,
490 If<IsInvocable<FC, RXE>> = 0,
491 class XL = decltype(unit<RX>(NumericLimits<VX>::lowest())),
492 class RL = RemoveReference<XL>,
class TL =
typename RL::Type,
493 class VL =
typename TL::Value, If<IsTensorish<RL>> = 0,
494 class XU = decltype(unit<RX>(NumericLimits<VX>::max())),
495 class RU = RemoveReference<XU>,
class TU =
typename RU::Type,
496 class VU =
typename TU::Value, If<IsTensorish<RU>> = 0,
497 class VT = Common<VX, VL, VU>,
498 If<All<IsFloat<VX>, IsFloat<VT>>> = 0,
499 If<IsSame<
typename RX::Dimension,
typename RL::Dimension,
500 typename RU::Dimension>> = 0,
501 If<IsSame<
typename RX::Sizes,
typename RL::Sizes,
502 typename RU::Sizes>> = 0,
503 If<IsInvocable<LS, RXE &, ResultOf<FF, RXE const &, RXE &> &, RXE &,
504 VX &, FF, RXE(RXE const &), RXE const &, VX, VX, VX>> = 0>
523 "L-BFGS-B: Initial parameters not in range "
592 if(valueIncreased(
f))
607 if(valueConverged(
f0,
f, tolerance))
634 for(
Index n = 0; n <
y.size(); ++n)
672 LS const mLineSearch;
673 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 pushBack(R const &element) &&
Definition deque.hpp:133
constexpr auto emplaceBack(Args &&...args) &&
Definition deque.hpp:163
constexpr LBFGSB(Size const maxIterations=defaultMaxIterations())
Definition lbfgsb.hpp:469
constexpr LBFGSB(LS const &lineSearch, Size const maxIterations=defaultMaxIterations())
Definition lbfgsb.hpp:462
constexpr auto & lineSearch() const
Definition lbfgsb.hpp:474
constexpr auto maxIterations() const
Definition lbfgsb.hpp:479
constexpr auto operator()(XX &&x0, FF &&function, FC &&callback, VT const &tolerance=NumericLimits< VT >::tolerance(), XL &&lowerBound=unit< RL >(NumericLimits< VL >::lowest()), XU &&upperBound=unit< RU >(NumericLimits< VU >::max())) const
Definition lbfgsb.hpp:505
TN::Subscripts S
Definition externs_nonTT.hpp:9
pRC::Float<> T
Definition externs_nonTT.hpp:1
static void info(Xs &&...args)
Definition log.hpp:27
static void error(Xs &&...args)
Definition log.hpp:14
static constexpr auto extractDiagonal(X &&a)
Definition extract_diagonal.hpp:17
static constexpr auto isFinite(T const &a)
Definition is_finite.hpp:13
static constexpr X eval(X &&a)
Definition eval.hpp:11
static constexpr X min(X &&a)
Definition min.hpp:13
static constexpr auto makeConstantSequence()
Definition sequence.hpp:402
static constexpr auto diagonal(X &&a)
Definition diagonal.hpp:16
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
static constexpr auto cholesky(X &&a)
Definition cholesky.hpp:24
static constexpr auto zero()
Definition zero.hpp:12
static constexpr auto transpose(JacobiRotation< T > const &a)
Definition jacobi_rotation.hpp:319
static constexpr T where(TE const e, T &&a, T &&b)
Definition where.hpp:12
static constexpr void sort(C const &compare, T &a, Size const k=T::size(), Size const d=0)
Definition sort.hpp:15
static constexpr auto square(Complex< T > const &a)
Definition square.hpp:14
std::is_reference< T > IsReference
Definition type_traits.hpp:47
static constexpr auto strictlyLowerTriangular(X &&a)
Definition strictly_lower_triangular.hpp:15
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
constexpr auto cDebugLevel
Definition config.hpp:46
Conditional< IsSatisfied<((Ns *... *1) *sizeof(T) > cHugepageSizeByte)>, HeapArray< T, Ns... >, StackArray< T, Ns... > > Array
Definition type_traits.hpp:58
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