3 #include <geneial/core/operations/selection/UniformRandomSelection.h>
4 #include <geneial/core/population/chromosome/BaseChromosome.h>
5 #include <geneial/utility/Random.h>
10 geneial_private_namespace(geneial)
12 geneial_private_namespace(operation)
14 geneial_private_namespace(selection)
16 using ::geneial::utility::Random;
18 geneial_export_namespace
23 template<
typename FITNESS_TYPE>
24 typename BaseSelectionOperation<FITNESS_TYPE>::selection_result_set UniformRandomSelection<FITNESS_TYPE>::doSelect(
25 const Population<FITNESS_TYPE> &population, BaseManager<FITNESS_TYPE> &manager)
const
29 typedef typename BaseSelectionOperation<FITNESS_TYPE>::selection_result_set result_set;
30 typedef typename Population<FITNESS_TYPE>::fitnessmap_const_it const_pop_itr;
34 unsigned int left_select = this->getSettings().getNumberOfParents();
37 assert(population.getSize() >= left_select);
39 while (left_select > 0)
42 const bool allowDuplicates =
false;
43 const_pop_itr rnditer;
46 rnditer = population.getFitnessMap().begin();
48 std::advance(rnditer, Random::generate<int>(0, population.getFitnessMap().size() - 1));
50 }
while (allowDuplicates || std::find(result.begin(), result.end(), rnditer->second) != result.end());
54 result.emplace_back(rnditer->second);