pRC
multi-purpose Tensor Train library for C++
Loading...
Searching...
No Matches
optimize.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_ALGORITHMS_OPTIMIZE_H
4#define pRC_ALGORITHMS_OPTIMIZE_H
5
10
11namespace pRC
12{
30 template<class Optimizer, class XX, class RX = RemoveReference<XX>,
31 class TX = typename RX::Type, class VX = typename TX::Value,
32 If<IsTensorish<RX>> = 0,
33 class RXE = RemoveConstReference<ResultOf<Eval, XX>>, class FF,
34 If<IsInvocable<FF, RXE const &, RXE &>> = 0,
35 If<IsFloat<ResultOf<FF, RXE const &, RXE &>>> = 0, class FC,
36 If<IsInvocable<FC, RXE &>> = 0, class VT = VX,
37 If<All<IsFloat<VX>, IsFloat<VT>>> = 0,
38 If<IsInvocable<Optimizer, XX, FF, FC, VT>> = 0>
39 static inline constexpr auto optimize(Optimizer &&optimizer, XX &&x,
41 VT const &tolerance = NumericLimits<VT>::tolerance())
42 {
45 }
46
64 template<class Optimizer, class XX, class RX = RemoveReference<XX>,
65 class TX = typename RX::Type, class VX = typename TX::Value,
66 If<IsTensorish<RX>> = 0,
67 class RXE = RemoveConstReference<ResultOf<Eval, XX>>, class FF,
68 If<IsInvocable<FF, RXE const &, RXE &>> = 0,
69 If<IsFloat<ResultOf<FF, RXE const &, RXE &>>> = 0, class VT = VX,
70 If<All<IsFloat<VX>, IsFloat<VT>>> = 0,
71 If<IsInvocable<Optimizer, XX, FF, void(RXE const), VT>> = 0>
72 static inline constexpr auto optimize(Optimizer &&optimizer, XX &&x,
73 FF &&function, VT const &tolerance = NumericLimits<VT>::tolerance())
74 {
75 return optimize(
78 [](auto &&)
79 {
80 },
81 tolerance);
82 }
83
103 template<class Optimizer, class XX, class RX = RemoveReference<XX>,
104 class TX = typename RX::Type, class VX = typename TX::Value,
105 If<IsTensorish<RX>> = 0,
106 class RXE = RemoveConstReference<ResultOf<Eval, XX>>, class FF,
107 If<IsInvocable<FF, RXE const &, RXE &>> = 0,
108 If<IsFloat<ResultOf<FF, RXE const &, RXE &>>> = 0, class FC,
109 If<IsInvocable<FC, RXE &>> = 0, class VT = VX,
110 If<All<IsFloat<VX>, IsFloat<VT>>> = 0,
111 If<IsInvocable<Optimizer, XX, FF, FC, VT>> = 0>
112 static inline constexpr auto optimize(XX &&x, FF &&function, FC &&callback,
113 VT const &tolerance = NumericLimits<VT>::tolerance())
114 {
115 return optimize(Optimizer(), forward<XX>(x), forward<FF>(function),
116 forward<FC>(callback), tolerance);
117 }
118
136 template<class Optimizer, class XX, class RX = RemoveReference<XX>,
137 class TX = typename RX::Type, class VX = typename TX::Value,
138 If<IsTensorish<RX>> = 0,
139 class RXE = RemoveConstReference<ResultOf<Eval, XX>>, class FF,
140 If<IsInvocable<FF, RXE const &, RXE &>> = 0,
141 If<IsFloat<ResultOf<FF, RXE const &, RXE &>>> = 0, class VT = VX,
142 If<All<IsFloat<VX>, IsFloat<VT>>> = 0,
143 If<IsInvocable<Optimizer, XX, FF, void(RXE const), VT>> = 0>
144 static inline constexpr auto optimize(XX &&x, FF &&function,
145 VT const &tolerance = NumericLimits<VT>::tolerance())
146 {
147 return optimize(Optimizer(), forward<XX>(x), forward<FF>(function),
148 tolerance);
149 }
150}
151#endif // pRC_ALGORITHMS_OPTIMIZE_H
Definition cholesky.hpp:18
static constexpr auto optimize(Optimizer &&optimizer, XX &&x, FF &&function, FC &&callback, VT const &tolerance=NumericLimits< VT >::tolerance())
This function is used to optimize over a tensorish object.
Definition optimize.hpp:39
static constexpr Conditional< IsSatisfied< C >, RemoveConstReference< X >, X > copy(X &&a)
Definition copy.hpp:13
Definition limits.hpp:13