GENEIAL  0.2=/
 All Classes Pages
BaseManager.hpp
1 #pragma once
2 
3 #include <geneial/core/population/management/BaseManager.h>
4 #include <geneial/core/population/Population.h>
5 
6 #include <iterator>
7 
8 geneial_private_namespace(geneial)
9 {
10 geneial_private_namespace(population)
11 {
12 geneial_private_namespace(management)
13 {
14 
15 geneial_export_namespace
16 {
17 
22 template<typename FITNESS_TYPE>
23 void BaseManager<FITNESS_TYPE>::replenishPopulation()
24 {
25  const int difference = _population.getSize() - _populationSettings.getMaxChromosomes();
26 
27  //if there are less chromosomes than required fill up:
28  while (_population.getSize() < _populationSettings.getMaxChromosomes())
29  {
30  //build new chromosome
31  const typename BaseChromosome<FITNESS_TYPE>::ptr newChromosome(_chromosomeFactory->createChromosome());
32  _population.insertChromosome(newChromosome);
33  }
34 
35  EventValueData<unsigned int>::create(*this->getBookkeeper(),"REPLENISH_AMOUNT",difference);
36 }
37 
38 template<typename FITNESS_TYPE>
39 void BaseManager<FITNESS_TYPE>::replacePopulation(
40  typename Population<FITNESS_TYPE>::chromosome_container replacementPopulation)
41 {
42  _population.replacePopulation(replacementPopulation);
43 }
44 
45 template<typename FITNESS_TYPE>
46 typename BaseChromosome<FITNESS_TYPE>::ptr BaseManager<FITNESS_TYPE>::getHighestFitnessChromosome() const
47 {
48  return _population.getFitnessMap().rbegin()->second;
49 }
50 
51 template<typename FITNESS_TYPE>
52 FITNESS_TYPE BaseManager<FITNESS_TYPE>::getHighestFitness() const
53 {
54  return _population.getFitnessMap().rbegin()->first;
55 }
56 
57 template<typename FITNESS_TYPE>
58 typename BaseChromosome<FITNESS_TYPE>::ptr BaseManager<FITNESS_TYPE>::getLowestFitnessChromosome() const
59 {
60  return _population.getFitnessMap().begin()->second;
61 }
62 
63 template<typename FITNESS_TYPE>
64 FITNESS_TYPE BaseManager<FITNESS_TYPE>::getLowestFitness() const
65 {
66  return _population.getFitnessMap().begin()->first;
67 }
68 
69 } /* geneial_export_namespace */
70 } /* private namespace management */
71 } /* private namespace population */
72 } /* private namespace geneial */
73 
74