3#ifndef pRC_ALGORITHMS_OPTIMIZER_BFGS_H
4#define pRC_ALGORITHMS_OPTIMIZER_BFGS_H
17 template<
class LS = LineSearch::Bracketing>
21 static constexpr Size defaultMaxIterations()
26 template<
class G,
class T>
27 static constexpr auto projectedGradientConverged(
G const &
g,
35 template<
class F,
class T>
36 static constexpr auto valueConverged(F
const &
f0, F
const &
f,
64 return mMaxIterations;
67 template<
class XX,
class RX = RemoveReference<XX>,
68 class TX =
typename RX::Type,
class VX =
typename TX::Value,
69 If<IsTensorish<RX>> = 0,
70 class RXE = RemoveConstReference<ResultOf<Eval, XX>>,
class FF,
71 If<IsInvocable<FF, RXE const &, RXE &>> = 0,
72 If<IsFloat<ResultOf<FF, RXE const &, RXE &>>> = 0,
class FC,
73 If<IsInvocable<FC, RXE &>> = 0,
class VT = VX,
74 If<All<IsFloat<VX>, IsFloat<VT>>> = 0,
75 If<IsInvocable<LS, RXE &, ResultOf<FF, RXE const &, RXE &> &, RXE &,
76 VX &, FF, RXE const &>> = 0>
88 if(projectedGradientConverged(
g, tolerance))
94 [&](
auto const...
seq)
126 if(valueConverged(
f0,
f, tolerance))
132 if(projectedGradientConverged(
g, tolerance))
160 LS const mLineSearch;
161 Size const mMaxIterations;
constexpr auto operator()(XX &&x0, FF &&function, FC &&callback, VT const &tolerance=NumericLimits< VT >::tolerance()) const
Definition bfgs.hpp:77
constexpr BFGS(Size const maxIterations=defaultMaxIterations())
Definition bfgs.hpp:52
constexpr BFGS(LS const &lineSearch, Size const maxIterations=defaultMaxIterations())
Definition bfgs.hpp:45
constexpr auto maxIterations() const
Definition bfgs.hpp:62
constexpr auto & lineSearch() const
Definition bfgs.hpp:57
Class storing tensors.
Definition tensor.hpp:44
static void info(Xs &&...args)
Definition log.hpp:27
static void debug(Xs &&...args)
Definition log.hpp:33
static constexpr X eval(X &&a)
Definition eval.hpp:11
static constexpr auto rcp(Complex< T > const &b)
Definition rcp.hpp:13
static constexpr auto zero()
Definition zero.hpp:12
std::size_t Size
Definition type_traits.hpp:20
static constexpr auto transpose(JacobiRotation< T > const &a)
Definition jacobi_rotation.hpp:319
static constexpr auto makeSeries()
Definition sequence.hpp:361
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
std::is_reference< T > IsReference
Definition type_traits.hpp:47
static constexpr auto scalarProduct(Complex< TA > const &a, Complex< TB > const &b)
Definition scalar_product.hpp:13
static constexpr decltype(auto) expand(Sequence< T, Seq... > const, F &&f, Xs &&...args)
forwards the values in a pRC::Sequence to a function as parameters
Definition sequence.hpp:354
static constexpr auto tensorProduct(XA &&a, XB &&b)
Calculates the tensor product of two Tensors.
Definition tensor_product.hpp:32
Size Index
Definition type_traits.hpp:21
static constexpr auto identity()
Definition identity.hpp:12
static constexpr X max(X &&a)
Definition max.hpp:13