3#ifndef pRC_ALGORITHMS_OPTIMIZER_LINE_SEARCH_BRACKETING_H
4#define pRC_ALGORITHMS_OPTIMIZER_LINE_SEARCH_BRACKETING_H
19 static constexpr Bool defaultStrongWolfeConditions()
24 static constexpr Float<> defaultDecreasingStepScale()
29 static constexpr Float<> defaultIncreasingStepScale()
34 static constexpr Size defaultMaxIterations()
39 static constexpr Float<> defaultC1()
44 static constexpr Float<> defaultC2()
67 return mStrongWolfeConditions;
70 template<
class T = Float<>>
73 return cast<T>(mDecreasingStepScale);
76 template<
class T = Float<>>
79 return cast<T>(mIncreasingStepScale);
84 return mMaxIterations;
87 template<
class T = Float<>>
88 constexpr decltype(
auto)
c1()
const
93 template<
class T = Float<>>
94 constexpr decltype(
auto)
c2()
const
99 template<
class X, If<IsTensor<X>> = 0,
100 class T =
typename X::Type::Value, If<IsFloat<T>> = 0,
class F,
101 If<IsInvocable<F, X const &, X &>> = 0,
102 If<IsFloat<ResultOf<F, X const &, X &>>> = 0,
class FC,
103 If<IsInvocable<FC, X const &>> = 0,
104 If<IsConvertible<ResultOf<FC, X const &>, X>> = 0>
126 "LS-Bracketing: Minimum alpha > Maximum alpha.");
158 Logging::info(
"First Wolfe condition not satisfied, trying again");
166 Logging::info(
"Second Wolfe condition not satisfied, trying again");
175 Logging::info(
"Strong Wolfe condition not satisfied, trying again");
186 template<
class X, If<IsTensor<X>> = 0,
187 class T =
typename X::Type::Value, If<IsFloat<T>> = 0,
class F,
188 If<IsInvocable<F, X const &, X &>> = 0,
189 If<IsFloat<ResultOf<F, X const &, X &>>> = 0>
197 [](
auto &&
x) ->
decltype(
auto)
205 Bool const mStrongWolfeConditions;
206 Float<> const mDecreasingStepScale;
207 Float<> const mIncreasingStepScale;
208 Size const mMaxIterations;
Top-level class storing a floating point number.
Definition float.hpp:35
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 void error(Xs &&...args)
Definition log.hpp:14
Definition bracketing.hpp:15
bool Bool
Definition type_traits.hpp:18
static constexpr X min(X &&a)
Definition min.hpp:13
std::invoke_result_t< F, Args... > ResultOf
Definition type_traits.hpp:140
std::size_t Size
Definition type_traits.hpp:20
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
static constexpr auto scalarProduct(Complex< TA > const &a, Complex< TB > const &b)
Definition scalar_product.hpp:13
Size Index
Definition type_traits.hpp:21
Definition bracketing.hpp:17
constexpr decltype(auto) decreasingStepScale() const
Definition bracketing.hpp:71
constexpr auto strongWolfeConditions() const
Definition bracketing.hpp:65
constexpr decltype(auto) c2() const
Definition bracketing.hpp:94
constexpr decltype(auto) increasingStepScale() const
Definition bracketing.hpp:77
constexpr auto operator()(X &x, ResultOf< F, X const &, X & > &f, X &g, typename ResultOf< ScalarProduct, X, X >::Type &d, F &&function, X const &p, T alpha=identity< T >(), T const alphaMin=zero< T >(), T const alphaMax=identity< T >(NumericLimits< T >::max())) const
Definition bracketing.hpp:190
constexpr auto operator()(X &x, ResultOf< F, X const &, X & > &f, X &g, typename ResultOf< ScalarProduct, X, X >::Type &d, F &&function, FC &&constraint, X const &p, T alpha=identity< T >(), T const alphaMin=zero< T >(), T const alphaMax=identity< T >(NumericLimits< T >::max())) const
Definition bracketing.hpp:105
constexpr Bracketing(Bool const strongWolfeConditions=defaultStrongWolfeConditions(), Float<> const decreasingStepScale=defaultDecreasingStepScale(), Float<> const increasingStepScale=defaultIncreasingStepScale(), Size const maxIterations=defaultMaxIterations(), Float<> const c1=defaultC1(), Float<> const c2=defaultC2())
Definition bracketing.hpp:50
constexpr auto maxIterations() const
Definition bracketing.hpp:82
constexpr decltype(auto) c1() const
Definition bracketing.hpp:88