35 #ifndef OPENMS_MATH_MISC_GRIDSEARCH_H 36 #define OPENMS_MATH_MISC_GRIDSEARCH_H 45 template <
size_t param_index,
size_t grid_size,
typename EvalResult,
typename Tuple,
typename... TupleTypes>
54 template <
size_t grid_size,
typename EvalResult,
typename Tuple,
typename... TupleTypes>
55 struct Looper<grid_size, grid_size, EvalResult, Tuple, TupleTypes...>
57 template <
typename Functor>
58 double operator()(
const Tuple&, Functor functor, EvalResult , std::array<size_t, grid_size>& )
68 template <
size_t param_index,
size_t grid_size,
typename EvalResult,
typename Tuple,
typename FirstTupleType,
typename... TupleTypes>
69 struct Looper<param_index, grid_size, EvalResult, Tuple, FirstTupleType, TupleTypes...>
71 template <
typename Functor>
72 EvalResult
operator()(
const Tuple& grid, Functor functor, EvalResult bestValue, std::array<size_t, grid_size>& bestIndices)
74 for (
size_t index = 0; index < std::get<param_index>(grid).size(); ++index)
76 double currVal =
Looper<param_index + 1, grid_size, EvalResult, Tuple, TupleTypes...>()
79 [&grid, index, &functor](TupleTypes... rest){
return functor(std::get<param_index>(grid)[index], rest...);},
84 if ( currVal > bestValue )
87 bestIndices[param_index] = index;
96 template <
typename... TupleTypes>
101 grid_(
std::make_tuple<
std::vector<TupleTypes>...>(
std::move(gridValues)...))
105 template <
typename Functor>
106 typename std::result_of<Functor(TupleTypes...)>::type
evaluate(Functor evaluator,
107 typename std::result_of<Functor(TupleTypes...)>::type startValue,
108 std::array<
size_t,std::tuple_size<std::tuple<std::vector<TupleTypes>...>>::value>& resultIndices)
111 std::tuple_size<std::tuple<std::vector<TupleTypes>...>>::value,
112 typename std::result_of<Functor(TupleTypes...)>::type,
113 std::tuple<std::vector<TupleTypes>...>,
115 (
grid_, evaluator, startValue, resultIndices);
120 template <
typename EvalResult>
121 EvalResult
evaluate(EvalResult evaluator(TupleTypes...),
122 EvalResult startValue,
123 std::array<
size_t,std::tuple_size<std::tuple<std::vector<TupleTypes>...>>::value>& resultIndices)
126 std::tuple_size<std::tuple<std::vector<TupleTypes>...>>::value,
128 std::tuple<std::vector<TupleTypes>...>,
130 (
grid_, evaluator, startValue, resultIndices);
147 std::tuple<std::vector<TupleTypes>...>
grid_;
151 template<std::
size_t I = 0>
152 typename std::enable_if<I ==
sizeof...(TupleTypes),
unsigned int>::type
159 template<std::
size_t I = 0>
160 typename std::enable_if<I <
sizeof...(TupleTypes),
unsigned int>::type
164 return nrCombos<I + 1>();
198 #endif //OPENMS_MATH_MISC_GRIDSEARCH_H unsigned int getNrCombos()
Definition: GridSearch.h:134
bool combos_ready_
Definition: GridSearch.h:149
unsigned int combos_
Definition: GridSearch.h:148
Definition: GridSearch.h:97
EvalResult evaluate(EvalResult evaluator(TupleTypes...), EvalResult startValue, std::array< size_t, std::tuple_size< std::tuple< std::vector< TupleTypes >... >>::value > &resultIndices)
Definition: GridSearch.h:121
GridSearch(std::vector< TupleTypes >... gridValues)
Definition: GridSearch.h:100
std::result_of< Functor(TupleTypes...)>::type evaluate(Functor evaluator, typename std::result_of< Functor(TupleTypes...)>::type startValue, std::array< size_t, std::tuple_size< std::tuple< std::vector< TupleTypes >... >>::value > &resultIndices)
Definition: GridSearch.h:106
double operator()(const Tuple &, Functor functor, EvalResult, std::array< size_t, grid_size > &)
Definition: GridSearch.h:58
std::tuple< std::vector< TupleTypes >... > grid_
Definition: GridSearch.h:147
EvalResult operator()(const Tuple &grid, Functor functor, EvalResult bestValue, std::array< size_t, grid_size > &bestIndices)
Definition: GridSearch.h:72
Definition: GridSearch.h:46
std::enable_if< I==sizeof...(TupleTypes), unsigned int >::type nrCombos()
Definition: GridSearch.h:153