Ultra 0.9.4
Loading...
Searching...
No Matches
evaluator.h
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_EVALUATOR_H)
14#define ULTRA_EVALUATOR_H
15
17#include "kernel/individual.h"
18#include "kernel/fitness.h"
19#include "kernel/random.h"
20
21#include "utility/log.h"
22#include "utility/misc.h"
23
24#include <functional>
25#include <thread>
26
27namespace ultra
28{
29
32
43template<class F, class I = closure_arg_t<F>>
44concept Evaluator =
45 Individual<I> && std::invocable<const F &, I>
47
48template<Evaluator E> using evaluator_individual_t = closure_arg_t<E>;
49template<Evaluator E> using evaluator_fitness_t = closure_return_t<E>;
51enum class test_evaluator_type {realistic, fixed, random, age};
52
73
78template<Individual I>
80{
81public:
82 explicit test_evaluator(test_evaluator_type = test_evaluator_type::random);
83
84 void delay(std::chrono::milliseconds) noexcept;
85
86 [[nodiscard]] double operator()(const I &) const;
87
88private:
89 const test_evaluator_type et_;
90
91 std::chrono::milliseconds delay_ {0};
92};
93
95
96} // namespace ultra
97
98#endif // include guard
double operator()(const I &) const
Definition evaluator.h:50
test_evaluator(test_evaluator_type=test_evaluator_type::random)
Definition evaluator.h:27
void delay(std::chrono::milliseconds) noexcept
Definition evaluator.h:139
Definition evaluator.h:44
Definition fitness.h:65
Definition individual.h:93