Ultra 0.9.4
Loading...
Searching...
No Matches
gp/individual.h
Go to the documentation of this file.
1
12
13#if !defined(ULTRA_GP_INDIVIDUAL_H)
14#define ULTRA_GP_INDIVIDUAL_H
15
16#include "kernel/individual.h"
18#include "kernel/problem.h"
19#include "kernel/random.h"
20#include "kernel/gp/gene.h"
21#include "utility/matrix.h"
22#include "utility/misc.h"
23
24#include <iosfwd>
25#include <iterator>
26#include <set>
27
28namespace ultra::gp
29{
30
31namespace internal
32{
33 class crossover_engine;
57
64///
65class individual final : public ultra::individual
66{
67public:
68 // ---- Constructors ----
69 individual() = default;
70 explicit individual(const problem &);
71 explicit individual(const std::vector<gene> &);
72
73 // ---- Capacity ----
74 [[nodiscard]] symbol::category_t categories() const noexcept;
75 [[nodiscard]] bool empty() const noexcept;
76 [[nodiscard]] locus::index_t size() const noexcept;
77
78 // ---- Element access ----
79 [[nodiscard]] const gene &operator[](const locus &) const noexcept;
80 [[nodiscard]] locus start() const noexcept;
81
82 // ---- Recombination operators ----
83 enum crossover_t {one_point, two_points, tree, uniform, dependency,
84 NUM_CROSSOVERS};
85 unsigned mutation(const problem &, double = 1.0);
86
88
89 [[nodiscard]] crossover_t active_crossover_type() const noexcept;
90
91 [[nodiscard]] matrix<unsigned> analyse_importance(
92 const std::vector<locus> &) const;
93
94 // ---- Iterators ----
95 using const_exon_iterator = internal::basic_exon_iterator<true>;
96 using exon_iterator = internal::basic_exon_iterator<false>;
97
98 [[nodiscard]] const_exon_view cexons() const;
99
100 [[nodiscard]] auto begin() const noexcept { return genome_.cbegin(); }
101 [[nodiscard]] auto end() const noexcept { return genome_.cend(); }
102
103 // ---- Misc ----
104 [[nodiscard]] bool operator==(const individual &) const noexcept;
105 [[nodiscard]] bool is_valid() const;
106
107private:
108 template<bool> friend class internal::basic_exon_iterator;
109 friend class internal::crossover_engine;
110
111 // ---- Private member functions ----
112 [[nodiscard]] exon_view exons();
113 [[nodiscard]] hash_t hash() const override;
114 void pack(const locus &, hash_sink &) const;
115
116 // ---- Serialization ----
117 [[nodiscard]] bool load_impl(std::istream &, const symbol_set &) override;
118 [[nodiscard]] bool save_impl(std::ostream &) const override;
119
120 void print_impl(std::ostream &, out::print_format_t) const override;
121
122 // ---- Private data members ----
123 // This is the genome: the entire collection of genes.
124 matrix<gene> genome_ {};
125
126 // Crossover operator used to create this individual. Initially this is set
127 // to a random type.
128 crossover_t active_crossover_type_ {random::sup(NUM_CROSSOVERS)};
129};
130
131
132// ---- Non-member functions ----
133[[nodiscard]] unsigned active_slots(const individual &);
134[[nodiscard]] individual crossover(const problem &,
135 const individual &, const individual &);
136[[nodiscard]] unsigned distance(const individual &, const individual &);
138[[nodiscard]] locus random_locus(const individual &);
139
140} // namespace ultra::gp
141
143
144#endif // include guard
Definition gp/individual.h:65
Definition gp/individual.h:35
Definition gp/individual.h:66
const_exon_view cexons() const
Definition gp/individual.cc:167
locus start() const noexcept
Definition gp/individual.cc:291
locus::index_t size() const noexcept
Definition gp/individual.cc:151
const gene & operator[](const locus &) const noexcept
Definition gp/individual.cc:282
symbol::category_t categories() const noexcept
Definition gp/individual.cc:130
crossover_t active_crossover_type() const noexcept
Definition gp/individual.cc:913
bool operator==(const individual &) const noexcept
Definition gp/individual.cc:304
matrix< unsigned > analyse_importance(const std::vector< locus > &) const
Definition gp/individual.cc:806
unsigned mutation(const problem &, double=1.0)
Definition gp/individual.cc:850
bool empty() const noexcept
Definition gp/individual.cc:138
bool is_valid() const
Definition gp/individual.cc:1008
void apply_decision_vector(const decision_vector &)
Definition gp/individual.cc:440
Definition individual.h:54
Definition symbol_set.h:115
unsigned category_t
Definition symbol.h:55
double distance(F f1, F f2)
Definition fitness.tcc:117
decision_vector extract_decision_vector(const individual &ind)
Definition gp/individual.cc:394
ultra::decision_vector< decision_coordinate > decision_vector
GP-specific decision-vector type used for numerical optimisation.
Definition gp/individual.h:51
print_format_t
Rendering format used to print an individual.
Definition individual.h:29
T sup(T sup)
Definition random.h:104
Definition decision_vector.h:42
Definition gene.h:55
Definition gp/individual.h:45
Definition hash_t.h:34
Definition locus.h:26
std::size_t index_t
Index in the genome.
Definition locus.h:28
Definition problem.h:26