7 #ifndef GENETICALGORITHM_H__
8 #define GENETICALGORITHM_H__
13 #include "Population.h"
14 #include "RandomWrapper.h"
21 using FitnessFunction = double (*)(Individual*,
void*);
259 bool GetCrossoverIgnoreGeneBoundaries()
const;
273 bool GetAllowSameParentCouples()
const;
280 size_t GetTournamentSize()
const;
287 size_t GetKPointCrossoverPointCount()
const;
294 double self_adaptive_mutation_diversity_floor);
295 double GetSelfAdaptiveMutationDiversityFloor()
const;
302 double self_adaptive_mutation_aggressive_rate);
303 double GetSelfAdaptiveMutationAggressiveRate()
const;
310 size_t GetProportionalMutationBitCount()
const;
321 size_t GetTotalGenerations()
const;
334 double GetMutationRate()
const;
345 double GetCrossoverRate()
const;
372 size_t GetEliteCount()
const;
381 size_t GetMutatedEliteCount()
const;
387 double GetMutatedEliteMutationRate()
const;
411 void* GetUserData()
const;
420 FitnessFunction GetFitnessFunction()
const;
427 size_t GetPopulationSize()
const;
518 std::pair<const Individual&, const Individual&>
SelectParents(
552 static constexpr
double DefaultMutationRate = 0.0005;
553 static constexpr
double DefaultCrossoverRate = 0.9;
554 static constexpr
double DefaultMutatedEliteMutationRate = 0.33;
555 static constexpr
double DefaultSelfAdaptiveMutationDiversityFloor = 0.0002;
556 static constexpr
double DefaultSelfAdaptiveMutationAggressiveRate = 0.1;
557 static constexpr
size_t DefaultTournamentSize = 2;
558 static constexpr
size_t DefaultKPointCrossoverCount = 3;
559 static constexpr
size_t DefaultProportionalMutationBitCount = 1;
562 std::vector<Population> populations_;
565 void* user_data_ =
nullptr;
566 FitnessFunction fitness_function_ =
nullptr;
568 size_t population_size_ = 0;
569 size_t total_generations_ = 0;
570 size_t current_generation_ = 0;
572 size_t elite_count_ = 0;
573 size_t mutated_elite_count_ = 0;
575 double mutation_rate_ = DefaultMutationRate;
576 double crossover_rate_ = DefaultCrossoverRate;
577 double mutated_elite_mutation_rate_ = DefaultMutatedEliteMutationRate;
579 size_t tournament_size_ = DefaultTournamentSize;
580 size_t k_point_crossover_point_count_ = DefaultKPointCrossoverCount;
581 double self_adaptive_mutation_diversity_floor_ =
582 DefaultSelfAdaptiveMutationDiversityFloor;
583 double self_adaptive_mutation_aggressive_rate_ =
584 DefaultSelfAdaptiveMutationAggressiveRate;
585 size_t proportional_mutation_bit_count_ = DefaultProportionalMutationBitCount;
592 bool crossover_ignore_gene_boundaries_ =
true;
593 bool allow_same_parent_couples_ =
true;
594 bool is_initial_population_evaluated_ =
false;
599 #endif // GENETICALGORITHM_H__
size_t GetCurrentGeneration() const
Definition: GeneticAlgorithm.cc:137
void SetFitnessFunction(FitnessFunction fitness_function)
Definition: GeneticAlgorithm.cc:59
Population & GetLastGenerationPopulation()
Definition: GeneticAlgorithm.cc:219
void SetAllowSameParentCouples(bool allow_same_parent_couples)
Definition: GeneticAlgorithm.cc:128
void SetKPointCrossoverPointCount(size_t k_point_crossover_point_count)
Definition: GeneticAlgorithm.cc:147
CrossoverType
Definition: GeneticAlgorithm.h:34
std::pair< const Individual &, const Individual & > SelectParents(const Population &population)
Definition: GeneticAlgorithm.cc:412
const Population & GetPopulation() const
Definition: GeneticAlgorithm.cc:226
const Individual & SelectOne(const Population &population)
Definition: GeneticAlgorithm.cc:394
void SetUserData(void *user_data)
Definition: GeneticAlgorithm.cc:91
Genome & GetGenome()
Definition: GeneticAlgorithm.cc:22
void Mutate(Individual *individual, double mutation_percentage)
Definition: GeneticAlgorithm.cc:377
SelectorType
Definition: GeneticAlgorithm.h:110
void SetCrossoverType(CrossoverType crossover_type)
Definition: GeneticAlgorithm.cc:95
void SetSelfAdaptiveMutationDiversityFloor(double self_adaptive_mutation_diversity_floor)
Definition: GeneticAlgorithm.cc:156
Definition: Population.h:29
MutatorType
Definition: GeneticAlgorithm.h:88
void SetMutationRateSchedule(MutationRateSchedule mutation_rate_schedule)
Definition: GeneticAlgorithm.cc:81
void SetTournamentSize(size_t tournament_size)
Definition: GeneticAlgorithm.cc:141
void SetSelectorType(SelectorType selector_type)
Definition: GeneticAlgorithm.cc:111
Definition: RandomWrapper.h:20
Population & GetCurrentPopulation()
Definition: GeneticAlgorithm.cc:212
void SetCrossoverRate(double crossover_rate)
Definition: GeneticAlgorithm.cc:39
void SetProportionalMutationBitCount(size_t proportional_mutation_bit_count)
Definition: GeneticAlgorithm.cc:176
void SetSelfAdaptiveMutationAggressiveRate(double self_adaptive_mutation_aggressive_rate)
Definition: GeneticAlgorithm.cc:166
void SetMutatorType(MutatorType mutator_type)
Definition: GeneticAlgorithm.cc:103
void SetCrossoverIgnoreGeneBoundaries(bool crossover_ignore_gene_boundaries)
Definition: GeneticAlgorithm.cc:119
Definition: Individual.h:20
void Run()
Definition: GeneticAlgorithm.cc:304
void Initialize()
Definition: GeneticAlgorithm.cc:194
void InitializeSelector(Population *population)
Definition: GeneticAlgorithm.cc:388
void Crossover(const Individual &parent1, const Individual &parent2, Individual *offspring)
Definition: GeneticAlgorithm.cc:351
void SetMutatedEliteMutationRate(double mutated_elite_mutation_rate)
Definition: GeneticAlgorithm.cc:24
double GetCurrentMutationRate()
Definition: GeneticAlgorithm.cc:310
void SetInitialPopulation(const std::vector< BitVector > &initial_population)
Definition: GeneticAlgorithm.cc:185
void SetMutatedEliteCount(size_t mutated_elite_count)
Definition: GeneticAlgorithm.cc:77
void SetEliteCount(size_t elite_count)
Definition: GeneticAlgorithm.cc:69
Definition: GeneticAlgorithm.h:23
void SetMutationRate(double mutation_rate)
Definition: GeneticAlgorithm.cc:33
void SetTotalGenerations(size_t total_generations)
Definition: GeneticAlgorithm.cc:51
void Step()
Definition: GeneticAlgorithm.cc:233
void SetPopulationSize(size_t population_size)
Definition: GeneticAlgorithm.cc:45
MutationRateSchedule
Definition: GeneticAlgorithm.h:169