Loading...
Searching...
No Matches
genetic_algorithm.h
Go to the documentation of this file.
1// SPDX-License-Identifier: AGPL-3.0-only
2// Copyright (C) 2026 Artificial Intelligence Techniques, S.L. and Roberto López González
3
4#pragma once
5
7
8namespace opennn
9{
10
11class GeneticAlgorithm final : public InputSelection
12{
13
14public:
15
16 explicit GeneticAlgorithm(Training* = nullptr);
17 Index get_individuals_number() const { return population.rows(); }
18
19 Index get_genes_number() const { return original_input_indices.size(); }
20
22 const string& get_initialization_method() const noexcept { return initialization_method; }
23 void set_initialization_method(const string&);
24
25 Index get_minimum_inputs_number() const override { return minimum_inputs_number; }
26 Index get_maximum_inputs_number() const override { return maximum_inputs_number; }
27
28 void set_minimum_inputs_number(const Index new_minimum) { minimum_inputs_number = new_minimum; }
29 void set_maximum_inputs_number(const Index);
30
31 void set_individuals_number(const Index new_individuals_number = 4);
32
33 void set_mutation_rate(const float rate) { mutation_rate = clamp(rate, 0.0f, 1.0f); }
34
35 void set_elitism_size(const Index size) { elitism_size = clamp<Index>(size, 0, get_individuals_number()); }
36
38
39 void from_JSON(const JsonDocument&) override;
40
41 void to_JSON(JsonWriter&) const override;
42
43private:
44
45 void initialize_population();
46 void initialize_population_random();
47 void initialize_population_correlations();
48 void evaluate_population();
49 void assign_fitness();
50 void perform_selection();
51 VectorB crossover(const VectorB&, const VectorB&) const;
52 void perform_crossover();
53 void perform_mutation();
54 vector<Index> get_selected_indices() const;
55
56 vector<Index> genes_to_variable_indices(const VectorB&) const;
57
58 Tensor<VectorR, 1> individual_parameters;
59
60 vector<Index> original_input_indices;
61 vector<Index> original_target_indices;
62
63 MatrixB population;
64
65 VectorR training_errors;
66
67 VectorR validation_errors;
68
69 VectorR fitness;
70
71 VectorB selected;
72
73 Index minimum_inputs_number = 1;
74 Index maximum_inputs_number = 0;
75
76 float mutation_rate = 0.05f;
77
78 Index elitism_size = 10;
79
80 string initialization_method = "Random";
81};
82
83}
void set_mutation_rate(const float rate)
Definition genetic_algorithm.h:33
GeneticAlgorithm(Training *=nullptr)
Index get_individuals_number() const
Definition genetic_algorithm.h:17
Index get_maximum_inputs_number() const override
Definition genetic_algorithm.h:26
void set_minimum_inputs_number(const Index new_minimum)
Definition genetic_algorithm.h:28
Index get_genes_number() const
Definition genetic_algorithm.h:19
void to_JSON(JsonWriter &) const override
void set_individuals_number(const Index new_individuals_number=4)
const string & get_initialization_method() const noexcept
Definition genetic_algorithm.h:22
void from_JSON(const JsonDocument &) override
void set_initialization_method(const string &)
void set_maximum_inputs_number(const Index)
void set_elitism_size(const Index size)
Definition genetic_algorithm.h:35
Index get_minimum_inputs_number() const override
Definition genetic_algorithm.h:25
InputSelectionResult perform_input_selection() override
InputSelection(Training *=nullptr)
Definition json.h:75
Definition json.h:92
Definition training.h:13
Definition configuration.h:10
Eigen::Matrix< float, Eigen::Dynamic, 1 > VectorR
Definition opennn_types.h:335
Eigen::Matrix< bool, Eigen::Dynamic, 1 > VectorB
Definition opennn_types.h:337
Eigen::Matrix< bool, Eigen::Dynamic, Eigen::Dynamic, Layout > MatrixB
Definition opennn_types.h:333
Definition input_selection.h:63