GENEIAL  0.2=/
 All Classes Pages
ChooseRandom.hpp
1 #pragma once
2 
3 #include <geneial/namespaces.h>
4 #include <geneial/core/operations/choosing/ChooseRandom.h>
5 #include <geneial/core/population/Population.h>
6 #include <geneial/utility/Random.h>
7 
8 geneial_private_namespace(geneial)
9 {
10 geneial_private_namespace(operation)
11 {
12 geneial_private_namespace(choosing)
13 {
14 using ::geneial::population::Population;
15 using ::geneial::utility::Random;
16 
17 geneial_export_namespace
18 {
19 template<typename FITNESS_TYPE>
20 typename Population<FITNESS_TYPE>::chromosome_container ChooseRandom<FITNESS_TYPE>::doChoose(
21  const typename Population<FITNESS_TYPE>::chromosome_container &chromosomeInputSet) const
22 {
23 
24  typename Population<FITNESS_TYPE>::chromosome_container chromosomeOutputSet;
25 
26  //Reserve upper limit i.e. the input size, so we avoid resizing later.
27  chromosomeOutputSet.reserve(chromosomeInputSet.size());
28 
29  //Iterate over all chromosomes in set and decide whether to keep it or not.
30  for (const auto &chromosome : chromosomeInputSet)
31  {
32  if (Random::decision(this->getProbability()))
33  {
34  chromosomeOutputSet.emplace_back(chromosome);
35  }
36  }
37  return chromosomeOutputSet;
38 }
39 
40 } /* geneial_export_namespace */
41 } /* private namespace choosing */
42 } /* private namespace operation */
43 } /* private namespace geneial */
44