3 #include <geneial/namespaces.h>
4 #include <geneial/core/operations/crossover/MultiValueChromosomeNPointCrossover.h>
5 #include <geneial/core/population/builder/ContinousMultiValueChromosomeFactory.h>
6 #include <geneial/utility/mixins/EnableMakeShared.h>
7 #include <geneial/utility/Smoothing.h>
12 geneial_private_namespace(geneial)
14 geneial_private_namespace(operation)
16 geneial_private_namespace(crossover)
18 using ::geneial::population::Population;
19 using ::geneial::population::chromosome::MultiValueChromosome;
20 using ::geneial::operation::coupling::BaseCouplingOperation;
21 using ::geneial::utility::Random;
22 using ::geneial::population::chromosome::ContinousMultiValueBuilderSettings;
23 using ::geneial::population::chromosome::ContinousMultiValueChromosomeFactory;
24 using ::geneial::utility::EnableMakeShared;
27 geneial_export_namespace
32 template<
typename VALUE_TYPE,
typename FITNESS_TYPE>
33 class SmoothedMultiValueChromosomeNPointCrossover:
public MultiValueChromosomeNPointCrossover<VALUE_TYPE, FITNESS_TYPE>,
34 public virtual EnableMakeShared<SmoothedMultiValueChromosomeNPointCrossover<VALUE_TYPE,FITNESS_TYPE>>
38 SmoothedMultiValueChromosomeNPointCrossover(
39 const std::shared_ptr<const MultiValueChromosomeNPointCrossoverSettings> &crossoverSettings,
40 const std::shared_ptr<ContinousMultiValueChromosomeFactory<VALUE_TYPE,FITNESS_TYPE>> &builderFactory
42 MultiValueChromosomeNPointCrossover<VALUE_TYPE, FITNESS_TYPE>(crossoverSettings, builderFactory)
47 using EnableMakeShared<SmoothedMultiValueChromosomeNPointCrossover<VALUE_TYPE,FITNESS_TYPE>>::makeShared;
48 virtual ~SmoothedMultiValueChromosomeNPointCrossover()
52 virtual bool isSymmetric()
const override
57 virtual typename BaseCrossoverOperation<FITNESS_TYPE>::crossover_result_set doMultiValueCrossover(
58 const typename MultiValueChromosome<VALUE_TYPE, FITNESS_TYPE>::const_ptr &mommy,
59 const typename MultiValueChromosome<VALUE_TYPE, FITNESS_TYPE>::const_ptr &daddy)
const override;
62 class Builder :
public MultiValueChromosomeNPointCrossover<VALUE_TYPE,FITNESS_TYPE>::Builder
66 Builder(
const std::shared_ptr<MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>> & builderFactory) :
67 MultiValueChromosomeNPointCrossover<VALUE_TYPE, FITNESS_TYPE>::Builder(builderFactory)
71 virtual typename BaseCrossoverOperation<FITNESS_TYPE>::ptr create()
override
73 if(! this->_builderFactory )
75 throw new std::runtime_error(
"Must set a Chromosome Factory to build MultiValueCrossover");
79 SmoothedMultiValueChromosomeNPointCrossover::makeShared(
80 this->_crossoverSettings,
81 std::dynamic_pointer_cast<ContinousMultiValueChromosomeFactory<VALUE_TYPE,FITNESS_TYPE>>
82 (this->_builderFactory)
94 #include <geneial/core/operations/crossover/SmoothedMultiValueChromosomeNPointCrossover.hpp>