13#if !defined(ULTRA_GP_INDIVIDUAL_H)
14#define ULTRA_GP_INDIVIDUAL_H
21#include "utility/matrix.h"
22#include "utility/misc.h"
33 class crossover_engine;
47 std::size_t arg_index;
69 individual() =
default;
70 explicit individual(
const problem &);
71 explicit individual(
const std::vector<gene> &);
75 [[nodiscard]]
bool empty()
const noexcept;
83 enum crossover_t {one_point, two_points, tree, uniform, dependency,
92 const std::vector<locus> &)
const;
95 using const_exon_iterator = internal::basic_exon_iterator<true>;
96 using exon_iterator = internal::basic_exon_iterator<false>;
100 [[nodiscard]]
auto begin()
const noexcept {
return genome_.cbegin(); }
101 [[nodiscard]]
auto end()
const noexcept {
return genome_.cend(); }
104 [[nodiscard]]
bool operator==(
const individual &)
const noexcept;
105 [[nodiscard]]
bool is_valid()
const;
108 template<
bool>
friend class internal::basic_exon_iterator;
109 friend class internal::crossover_engine;
113 [[nodiscard]]
hash_t hash()
const override;
114 void pack(
const locus &, hash_sink &)
const;
117 [[nodiscard]]
bool load_impl(std::istream &,
const symbol_set &)
override;
118 [[nodiscard]]
bool save_impl(std::ostream &)
const override;
124 matrix<gene> genome_ {};
128 crossover_t active_crossover_type_ {
random::sup(NUM_CROSSOVERS)};
133[[nodiscard]]
unsigned active_slots(
const individual &);
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 gp/individual.h:45
std::size_t index_t
Index in the genome.
Definition locus.h:28