3 #include <geneial/core/operations/crossover/SmoothedMultiValueChromosomeNPointCrossover.h>
5 geneial_private_namespace(geneial)
7 geneial_private_namespace(operation)
9 geneial_private_namespace(crossover)
11 using ::geneial::utility::Smoothing;
13 geneial_export_namespace
16 template<
typename VALUE_TYPE,
typename FITNESS_TYPE>
17 typename BaseCrossoverOperation<FITNESS_TYPE>::crossover_result_set SmoothedMultiValueChromosomeNPointCrossover<
18 VALUE_TYPE, FITNESS_TYPE>::doMultiValueCrossover(
19 const typename MultiValueChromosome<VALUE_TYPE, FITNESS_TYPE>::const_ptr &mommy,
20 const typename MultiValueChromosome<VALUE_TYPE, FITNESS_TYPE>::const_ptr &daddy)
const
26 auto result = MultiValueChromosomeNPointCrossover<VALUE_TYPE, FITNESS_TYPE>::doMultiValueCrossover(mommy, daddy);
28 const auto &builderSettings =
29 (
static_cast<const ContinousMultiValueBuilderSettings<VALUE_TYPE, FITNESS_TYPE>&
>(
30 this->getBuilderFactory().getSettings()));
32 const auto eps = builderSettings.getEps();
33 const auto min = builderSettings.getRandomMin();
34 const auto max = builderSettings.getRandomMax();
35 const auto hasStart = builderSettings.hasStart();
36 const auto startValue = builderSettings.getStartValue();
38 for (
const auto& chromosome : result)
40 Smoothing::restoreSmoothness<VALUE_TYPE, FITNESS_TYPE>(
41 std::dynamic_pointer_cast<MultiValueChromosome<VALUE_TYPE, FITNESS_TYPE> >(chromosome), eps, min, max, hasStart, startValue);