3#ifndef pRC_ALGORITHMS_OPTIMIZER_GRADIENT_DESCENT_H
4#define pRC_ALGORITHMS_OPTIMIZER_GRADIENT_DESCENT_H
18 template<
class LS = LineSearch::Bracketing>
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)
78 return mMaxIterations;
81 template<
class XX,
class RX = RemoveReference<XX>,
82 class TX =
typename RX::Type,
class VX =
typename TX::Value,
83 If<IsTensorish<RX>> = 0,
84 class RXE = RemoveConstReference<ResultOf<Eval, XX>>,
class FF,
85 If<IsInvocable<FF, RXE const &, RXE &>> = 0,
86 If<IsFloat<ResultOf<FF, RXE const &, RXE &>>> = 0,
class FC,
87 If<IsInvocable<FC, RXE &>> = 0,
class VT = VX,
88 If<All<IsFloat<VX>, IsFloat<VT>>> = 0,
89 If<IsInvocable<LS, RXE &, ResultOf<FF, RXE const &, RXE &> &, RXE &,
90 VX &, FF, RXE const &>> = 0>
102 if(projectedGradientConverged(
g, tolerance))
137 "Gradient Descent max iterations reached at f(x) =",
f);
141 if(valueConverged(
f0,
f, tolerance))
147 if(projectedGradientConverged(
g, tolerance))
169 LS const mLineSearch;
170 Size const mMaxIterations;
Definition gradient_descent.hpp:20
constexpr GradientDescent(LS const &lineSearch, Size const maxIterations=defaultMaxIterations())
Definition gradient_descent.hpp:58
constexpr auto & lineSearch() const
Definition gradient_descent.hpp:71
constexpr GradientDescent(Size const maxIterations=defaultMaxIterations())
Definition gradient_descent.hpp:65
constexpr auto operator()(XX &&x0, FF &&function, FC &&callback, VT const &tolerance=NumericLimits< VT >::tolerance()) const
Definition gradient_descent.hpp:91
constexpr auto maxIterations() const
Definition gradient_descent.hpp:76
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
std::size_t Size
Definition type_traits.hpp:20
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 X max(X &&a)
Definition max.hpp:13