23 template<
typename F,
typename... Args>
25 { std::invoke(f, args...) } -> std::convertible_to<double>;
29 template <
size_t param_index,
size_t grid_size,
typename EvalResult,
typename Tuple,
typename... TupleTypes>
35 template <
size_t grid_size,
typename EvalResult,
typename Tuple,
typename... TupleTypes>
36 struct Looper<grid_size, grid_size, EvalResult, Tuple, TupleTypes...>
38 template <
typename Functor>
39 requires
Evaluator<Functor, TupleTypes...>
40 constexpr
auto operator()(
const Tuple&, Functor functor, EvalResult , std::array<size_t, grid_size>& )
const
42 return std::invoke(functor);
47 template <
size_t param_index,
size_t grid_size,
typename EvalResult,
typename Tuple,
typename FirstTupleType,
typename... TupleTypes>
48 struct Looper<param_index, grid_size, EvalResult, Tuple, FirstTupleType, TupleTypes...>
50 template <
typename Functor>
51 requires
Evaluator<Functor, FirstTupleType, TupleTypes...>
52 constexpr
auto operator()(
const Tuple& grid, Functor functor, EvalResult bestValue, std::array<size_t, grid_size>& bestIndices)
const
54 const auto& current_vector = std::get<param_index>(grid);
56 for (
size_t index = 0; index < current_vector.size(); ++index) {
57 const auto& value = current_vector[index];
58 auto currVal =
Looper<param_index + 1, grid_size, EvalResult, Tuple, TupleTypes...>{}
61 [&value, &functor](TupleTypes... rest){
62 return std::invoke(functor, value, rest...);
68 if (currVal > bestValue) {
70 bestIndices[param_index] = index;
78 template <
typename... TupleTypes>
82 explicit GridSearch(std::vector<TupleTypes>... gridValues)
83 :
grid_(std::make_tuple<std::vector<TupleTypes>...>(std::move(gridValues)...))
87 template <
typename Functor>
91 std::invoke_result_t<Functor, TupleTypes...> startValue,
92 std::array<
size_t, std::tuple_size_v<std::tuple<std::vector<TupleTypes>...>>>& resultIndices)
const
96 std::tuple_size_v<std::tuple<std::vector<TupleTypes>...>>,
97 std::invoke_result_t<Functor, TupleTypes...>,
98 std::tuple<std::vector<TupleTypes>...>,
99 TupleTypes...>{}(
grid_, evaluator, startValue, resultIndices);
103 template <
typename EvalResult>
104 requires std::convertible_to<EvalResult, double>
106 EvalResult (*evaluator)(TupleTypes...),
107 EvalResult startValue,
108 std::array<
size_t, std::tuple_size_v<std::tuple<std::vector<TupleTypes>...>>>& resultIndices)
const
112 std::tuple_size_v<std::tuple<std::vector<TupleTypes>...>>,
114 std::tuple<std::vector<TupleTypes>...>,
115 TupleTypes...>{}(
grid_, evaluator, startValue, resultIndices);
127 std::tuple<std::vector<TupleTypes>...>
grid_;
131 template<std::
size_t I = 0>
134 if constexpr (I ==
sizeof...(TupleTypes)) {
139 return calculateCombos<I + 1>();
Definition: GridSearch.h:80
requires constexpr std::convertible_to< EvalResult, double > auto evaluate(EvalResult(*evaluator)(TupleTypes...), EvalResult startValue, std::array< size_t, std::tuple_size_v< std::tuple< std::vector< TupleTypes >... >>> &resultIndices) const
Definition: GridSearch.h:105
std::tuple< std::vector< TupleTypes >... > grid_
Definition: GridSearch.h:127
constexpr unsigned int calculateCombos() const
Definition: GridSearch.h:132
requires constexpr Internal::Evaluator< Functor, TupleTypes... > auto evaluate(Functor evaluator, std::invoke_result_t< Functor, TupleTypes... > startValue, std::array< size_t, std::tuple_size_v< std::tuple< std::vector< TupleTypes >... >>> &resultIndices) const
Definition: GridSearch.h:89
unsigned int combos_
Definition: GridSearch.h:128
bool combos_ready_
Definition: GridSearch.h:129
constexpr auto getNrCombos() const -> unsigned int
Definition: GridSearch.h:118
GridSearch(std::vector< TupleTypes >... gridValues)
Definition: GridSearch.h:82
const double F
Definition: Constants.h:157
concept Evaluator
Definition: GridSearch.h:24
custom arguments to allow for looping calls
Definition: WizardHelper.h:47
Definition: GridSearch.h:31
Main OpenMS namespace.
Definition: openswathalgo/include/OpenMS/OPENSWATHALGO/DATAACCESS/ISpectrumAccess.h:19
requires constexpr Evaluator< Functor, TupleTypes... > auto operator()(const Tuple &, Functor functor, EvalResult, std::array< size_t, grid_size > &) const
Definition: GridSearch.h:40
requires constexpr Evaluator< Functor, FirstTupleType, TupleTypes... > auto operator()(const Tuple &grid, Functor functor, EvalResult bestValue, std::array< size_t, grid_size > &bestIndices) const
Definition: GridSearch.h:52