3 #include <geneial/core/operations/crossover/MultiValueChromosomeAverageCrossover.h>
5 geneial_private_namespace(geneial)
7 geneial_private_namespace(operation)
9 geneial_private_namespace(crossover)
11 using ::geneial::population::Population;
12 using ::geneial::population::chromosome::MultiValueChromosome;
13 using ::geneial::operation::coupling::BaseCouplingOperation;
15 geneial_export_namespace
20 template<
typename VALUE_TYPE,
typename FITNESS_TYPE>
21 typename BaseCrossoverOperation<FITNESS_TYPE>::crossover_result_set MultiValueChromosomeAverageCrossover<VALUE_TYPE,
22 FITNESS_TYPE>::doMultiValueCrossover(
23 const typename MultiValueChromosome<VALUE_TYPE, FITNESS_TYPE>::const_ptr &mommy,
24 const typename MultiValueChromosome<VALUE_TYPE, FITNESS_TYPE>::const_ptr &daddy)
const
27 typename BaseCouplingOperation<FITNESS_TYPE>::offspring_result_set resultset;
29 auto child_candidate = this->createChildCandidate();
31 const auto &daddy_container = daddy->getContainer();
32 const auto &mommy_container = mommy->getContainer();
34 auto &child_container = child_candidate->getContainer();
36 assert(daddy_container.size() == mommy_container.size());
38 auto mommy_it(mommy_container.cbegin());
39 auto daddy_it(daddy_container.cbegin());
42 for (
unsigned int i = 0; mommy_it != mommy_container.end(); ++i)
44 child_container[i] = ((*mommy_it + *daddy_it) / 2);
50 resultset.emplace_back(std::move(child_candidate));
51 return std::move(resultset);