3#ifndef pRC_ALGORITHMS_OPTIMIZER_LINE_SEARCH_BRACKETING_H
4#define pRC_ALGORITHMS_OPTIMIZER_LINE_SEARCH_BRACKETING_H
15 static constexpr Bool defaultStrongWolfeConditions()
20 static constexpr Float<> defaultDecreasingStepScale()
25 static constexpr Float<> defaultIncreasingStepScale()
30 static constexpr Size defaultMaxIterations()
35 static constexpr Float<> defaultC1()
40 static constexpr Float<> defaultC2()
63 return mStrongWolfeConditions;
66 template<
class T = Float<>>
69 return cast<T>(mDecreasingStepScale);
72 template<
class T = Float<>>
75 return cast<T>(mIncreasingStepScale);
80 return mMaxIterations;
83 template<
class T = Float<>>
84 constexpr decltype(
auto)
c1()
const
89 template<
class T = Float<>>
90 constexpr decltype(
auto)
c2()
const
95 template<IsTensor X, IsFloat T = Value<X>,
class F,
class FC>
118 if(alphaMax < alphaMin)
121 "LS-Bracketing: Minimum alpha > Maximum alpha.");
124 if(alpha <= alphaMin || alpha > alphaMax)
135 auto high = alphaMax;
137 for(
Index iteration = 0;; ++iteration,
147 x = constraint(x0 + alpha *
p);
150 if(f > f0 +
c1<T>() * alpha * d0)
154 "First Wolfe condition not satisfied, trying again");
163 "Second Wolfe condition not satisfied, trying again");
173 "Strong Wolfe condition not satisfied, trying "
185 template<IsTensor X, IsFloat T = Value<X>,
class F>
194 x, f, g, d, forward<F>(function),
195 [](
auto &&
x) ->
decltype(
auto)
197 return forward<decltype(x)>(
x);
199 p, alpha, alphaMin, alphaMax);
203 Bool const mStrongWolfeConditions;
204 Float<> const mDecreasingStepScale;
205 Float<> const mIncreasingStepScale;
206 Size const mMaxIterations;
Definition concepts.hpp:43
Definition concepts.hpp:31
int x
Definition gmock-matchers-containers_test.cc:376
const char * p
Definition gmock-matchers-containers_test.cc:379
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:11
static constexpr auto cast(T const &a)
Definition cast.hpp:11
Size Index
Definition basics.hpp:32
std::size_t Size
Definition basics.hpp:31
std::invoke_result_t< F, Args... > ResultOf
Definition basics.hpp:59
static constexpr auto abs(T const &a)
Definition abs.hpp:11
static constexpr decltype(auto) min(X &&a)
Definition min.hpp:13
static constexpr auto scalarProduct(TA const &a, TB const &b)
Definition scalar_product.hpp:11
constexpr auto cDebugLevel
Definition config.hpp:48
static constexpr auto identity()
Definition identity.hpp:13
static constexpr auto zero()
Definition zero.hpp:12
Definition gtest_pred_impl_unittest.cc:54
Definition bracketing.hpp:13
constexpr decltype(auto) decreasingStepScale() const
Definition bracketing.hpp:67
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:188
constexpr auto strongWolfeConditions() const
Definition bracketing.hpp:61
constexpr decltype(auto) c2() const
Definition bracketing.hpp:90
constexpr decltype(auto) increasingStepScale() const
Definition bracketing.hpp:73
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:100
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:46
constexpr auto maxIterations() const
Definition bracketing.hpp:78
constexpr decltype(auto) c1() const
Definition bracketing.hpp:84