Ultra 0.9.4
Loading...
Searching...
No Matches
evolution_replacement.h
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_EVOLUTION_REPLACEMENT_H)
14#define ULTRA_EVOLUTION_REPLACEMENT_H
15
16#include "kernel/alps.h"
17#include "kernel/evaluator.h"
21
22namespace ultra::replacement
23{
26/// ultra::evolution_strategy class.
27///
28template<Evaluator E>
30{
31public:
32 using individual_t = evaluator_individual_t<E>;
33 using fitness_t = evaluator_fitness_t<E>;
36
37 strategy(E &, const parameters &);
38
39protected:
40 E &eva_;
41 const parameters &params_;
42};
43
52template<Evaluator E>
53class tournament : public strategy<E>
54{
55public:
56 using strategy<E>::strategy;
57 using typename strategy<E>::individual_t;
58 using typename strategy<E>::scored_t;
59 using typename strategy<E>::status_t;
60
61 template<Population P>
62 bool operator()(P &, const scored_t &, status_t &) const;
63};
64
65template<Evaluator E> tournament(E &, const parameters &) -> tournament<E>;
66
78template<Evaluator E>
79class alps : public strategy<E>
80{
81public:
82 using strategy<E>::strategy;
83 using typename strategy<E>::individual_t;
84 using typename strategy<E>::scored_t;
85 using typename strategy<E>::status_t;
86
87 template<PopulationWithMutex P>
88 void operator()(alps_layer_pair<P>, const scored_t &, status_t &) const;
90 template<PopulationWithMutex P>
91 void try_promote_individuals(const P &, P &) const;
92
93private:
94 template<PopulationWithMutex P, class S>
95 bool try_add_to_layer(alps_layer_pair<P>, const S &) const
96 requires (std::same_as<S, individual_t> || std::same_as<S, scored_t>);
97
98 template<PopulationWithMutex P, class S>
99 bool try_add_to_layer(P &, const S &) const
100 requires (std::same_as<S, individual_t> || std::same_as<S, scored_t>);
101};
102
103template<Evaluator E> alps(E &, const parameters &) -> alps<E>;
104
105template<Evaluator E>
106class de : public strategy<E>
107{
108public:
109 using strategy<E>::strategy;
110 using typename strategy<E>::individual_t;
111 using typename strategy<E>::status_t;
112
113 bool operator()(individual_t &, const individual_t &, status_t &) const;
114};
115
116template<Evaluator E> de(E &, const parameters &) -> de<E>;
117
119
120} // namespace ultra::replacement
121
122#endif // include guard
Definition alps.h:48
Definition evolution_status.h:36
Definition evolution_replacement.h:80
void operator()(alps_layer_pair< P >, const scored_t &, status_t &) const
Definition evolution_replacement.h:294
void try_promote_individuals(const P &, P &) const
Definition evolution_replacement.h:89
Definition evolution_replacement.h:107
strategy(E &, const parameters &)
Definition evolution_replacement.h:26
Definition evolution_replacement.h:54
bool operator()(P &, const scored_t &, status_t &) const
Definition evolution_replacement.h:42
Definition parameters.h:26
Definition scored_individual.h:48