panga
Population.h
1 //-------------------------------------------------------------------------------------------------------
2 // Copyright (C) Taylor Woll and panga contributors. All rights reserved.
3 // Licensed under the MIT license. See LICENSE.txt file in the project root for
4 // full license information.
5 //-------------------------------------------------------------------------------------------------------
6 
7 #ifndef POPULATION_H__
8 #define POPULATION_H__
9 
10 #include <vector>
11 
12 namespace panga {
13 
14 class BitVector;
15 class Genome;
16 class Individual;
17 class RandomWrapper;
18 
19 using FitnessFunction = double (*)(Individual*, void*);
20 
29 class Population {
30  public:
31  Population() = delete;
32  explicit Population(const Genome& genome);
33  Population(const Population& rhs) = delete;
34  Population(Population&& rhs) = default;
35  Population& operator=(const Population& rhs) = delete;
36  ~Population() = default;
37 
41  size_t Size() const;
42 
48  void Resize(size_t size, RandomWrapper* random);
49 
56  void Initialize(const std::vector<BitVector>& initial_population);
57 
62  void InitializePartialSums();
63 
70  void Sort();
71 
76  void Replace(size_t index, const Individual& individual);
77 
82  const Individual& GetBestIndividual() const;
83 
90  const Individual& GetIndividual(size_t index) const;
91 
99  Individual& GetIndividualWritable(size_t index);
100 
104  double GetMinimumScore() const;
105 
109  double GetAverageScore() const;
110 
114  double GetScoreStandardDeviation() const;
115 
123  double GetPopulationDiversity() const;
124 
128  const Individual& UniformSelect(RandomWrapper* random) const;
129 
138  const Individual& RouletteWheelSelect(RandomWrapper* random) const;
139 
144  const Individual& TournamentSelect(size_t tournament_size,
145  RandomWrapper* random) const;
146 
150  const Individual& RankSelect() const;
151 
156  void Evaluate(FitnessFunction fitness_function, void* user_data);
157 
158  private:
159  const Genome& genome_;
160  std::vector<Individual> individuals_;
161  std::vector<double> partial_sums_;
162  std::vector<size_t> sorted_indices_;
163  bool is_sorted_ = false;
164 };
165 
166 } // namespace panga
167 
168 #endif // POPULATION_H__
panga::Population::GetIndividualWritable
Individual & GetIndividualWritable(size_t index)
Definition: Population.cc:103
panga::Population::RankSelect
const Individual & RankSelect() const
Definition: Population.cc:252
panga::Population::Size
size_t Size() const
Definition: Population.cc:18
panga::Population::GetScoreStandardDeviation
double GetScoreStandardDeviation() const
Definition: Population.cc:122
panga::Population::RouletteWheelSelect
const Individual & RouletteWheelSelect(RandomWrapper *random) const
Definition: Population.cc:200
panga::Population::GetIndividual
const Individual & GetIndividual(size_t index) const
Definition: Population.cc:93
panga::Population::UniformSelect
const Individual & UniformSelect(RandomWrapper *random) const
Definition: Population.cc:193
panga::Population::Evaluate
void Evaluate(FitnessFunction fitness_function, void *user_data)
Definition: Population.cc:164
panga::Population::GetBestIndividual
const Individual & GetBestIndividual() const
Definition: Population.cc:88
panga::Population::Replace
void Replace(size_t index, const Individual &individual)
Definition: Population.cc:81
panga::Population::GetAverageScore
double GetAverageScore() const
Definition: Population.cc:112
panga::Population::Resize
void Resize(size_t size, RandomWrapper *random)
Definition: Population.cc:20
panga::Population
Definition: Population.h:29
panga::Population::TournamentSelect
const Individual & TournamentSelect(size_t tournament_size, RandomWrapper *random) const
Definition: Population.cc:222
panga::Genome
Definition: Genome.h:31
panga::RandomWrapper
Definition: RandomWrapper.h:20
panga::Individual
Definition: Individual.h:20
panga::Population::Initialize
void Initialize(const std::vector< BitVector > &initial_population)
Definition: Population.cc:32
panga::Population::GetPopulationDiversity
double GetPopulationDiversity() const
Definition: Population.cc:137
panga::Population::Sort
void Sort()
Definition: Population.cc:61
panga::Population::InitializePartialSums
void InitializePartialSums()
Definition: Population.cc:42
panga::Population::GetMinimumScore
double GetMinimumScore() const
Definition: Population.cc:108