Ultra 0.9.4
Loading...
Searching...
No Matches
evolution.h
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_EVOLUTION_H)
14#define ULTRA_EVOLUTION_H
15
19#include "kernel/refiner.h"
20#include "kernel/search_log.h"
21
22#include "utility/term.h"
23#include "utility/thread_pool.h"
24#include "utility/timer.h"
25
26#include <atomic>
27#include <future>
28#include <vector>
29
30namespace ultra
31{
32
33namespace internal
34{
35struct print_status;
36}
37
77template<Evaluator E>
79{
80public:
81 using individual_t = evaluator_individual_t<E>;
82 using fitness_t = evaluator_fitness_t<E>;
83
84 using after_generation_callback_t =
85 ultra::after_generation_callback_t<individual_t, fitness_t>;
86 using refinement_callback_t = ultra::refinement_callback_t<E>;
87 using on_new_best_callback_t =
88 ultra::on_new_best_callback_t<individual_t, fitness_t>;
89
90 // ---- Constructor ----
91 explicit evolution(const problem &, E &);
92
93 // ---- Run ----
94 template<template<class> class ES>
96
97 // ---- Callback and configuration methods ----
98 evolution &after_generation(after_generation_callback_t);
100 evolution &refinement(refinement_callback_t);
101 evolution &messages(bool) noexcept;
102 evolution &on_new_best(on_new_best_callback_t);
103 evolution &shake_function(shake_function_callback_t);
104 evolution &stop_source(std::stop_source);
105 evolution &tag(const std::string &);
106
107 // ---- Misc ----
108 [[nodiscard]] bool is_valid() const;
109
110private:
111 enum class message {status, summary};
112
113 // ---- Private methods ----
114 template<Population P> [[nodiscard]] bool perform_refinement(
115 P &, internal::print_status &);
116 void print(message, internal::print_status &) const;
117 template<Population P> [[nodiscard]] auto refinement_tournament(const P &);
118
119 [[nodiscard]] bool stop_condition() const;
120
121 // ---- Data members ----
123 E &eva_;
124
126
127 shake_function_callback_t shake_ {};
128
129 after_generation_callback_t after_generation_callback_ {};
130 refinement_callback_t refinement_callback_ {};
131
132 mutable search_log *search_log_ {nullptr};
133 std::stop_source external_stop_source_ {std::nostopstate};
134 std::string tag_ {};
135 bool emit_messages_ {true};
136};
137
138#include "kernel/evolution.tcc"
139} // namespace ultra
140
141#endif // include guard
evolution & shake_function(shake_function_callback_t)
Definition evolution.h:360
summary< typename evolution< E >::individual_t, typename evolution< E >::fitness_t > run()
Definition evolution.h:575
evolution & logger(search_log &)
Definition evolution.h:313
evolution & tag(const std::string &)
Definition evolution.h:343
evolution(const problem &, E &)
Definition evolution.h:196
bool is_valid() const
Definition evolution.h:743
evolution & stop_source(std::stop_source)
Definition evolution.h:396
evolution & after_generation(after_generation_callback_t)
Definition evolution.h:373
Definition layered_population.h:41
Definition search_log.h:28
Definition evolution_summary.h:33
std::function< std::optional< evaluator_fitness_t< E > >( evaluator_individual_t< E > &, const E &, const parameters::refinement_parameters &)> refinement_callback_t
Definition evolution_callbacks.h:46
Definition problem.h:26