3 #include <geneial/namespaces.h>
4 #include <geneial/core/operations/crossover/MultiValueChromosomeCrossoverOperation.h>
5 #include <geneial/utility/mixins/EnableMakeShared.h>
9 geneial_private_namespace(geneial)
11 geneial_private_namespace(operation)
13 geneial_private_namespace(crossover)
15 using ::geneial::population::Population;
16 using ::geneial::population::chromosome::MultiValueChromosome;
17 using ::geneial::utility::EnableMakeShared;
19 geneial_export_namespace
22 template<
typename VALUE_TYPE,
typename FITNESS_TYPE>
23 class MultiValuePermutationCrossover:
public MultiValueChromosomeCrossoverOperation<VALUE_TYPE,FITNESS_TYPE>,
24 public virtual EnableMakeShared<MultiValuePermutationCrossover<VALUE_TYPE,FITNESS_TYPE>>
27 MultiValuePermutationCrossover(
28 const std::shared_ptr<MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>> &builderFactory
29 ) : MultiValueChromosomeCrossoverOperation<VALUE_TYPE,FITNESS_TYPE>(builderFactory)
33 virtual ~MultiValuePermutationCrossover()
37 bool isSymmetric()
const override
65 virtual typename BaseCrossoverOperation<FITNESS_TYPE>::crossover_result_set doMultiValueCrossover(
66 const typename MultiValueChromosome<VALUE_TYPE, FITNESS_TYPE>::const_ptr &mommy,
67 const typename MultiValueChromosome<VALUE_TYPE, FITNESS_TYPE>::const_ptr &daddy)
const override;
70 class Builder :
public MultiValueChromosomeCrossoverOperation<VALUE_TYPE,FITNESS_TYPE>::Builder
73 Builder(
const std::shared_ptr<MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>> & builderFactory) :
74 MultiValueChromosomeCrossoverOperation<VALUE_TYPE, FITNESS_TYPE>::Builder(builderFactory)
79 virtual typename BaseCrossoverOperation<FITNESS_TYPE>::ptr create()
override
81 if(! this->_builderFactory )
83 throw new std::runtime_error(
"Must set a Chromosome Factory to build MultiValueCrossover");
86 return MultiValuePermutationCrossover<VALUE_TYPE, FITNESS_TYPE>::makeShared(this->_builderFactory);
96 #include <geneial/core/operations/crossover/MultiValuePermutationCrossover.hpp>