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 MultiValueChromosomeAverageCrossover:
public MultiValueChromosomeCrossoverOperation<VALUE_TYPE,FITNESS_TYPE>,
24 public virtual EnableMakeShared<MultiValueChromosomeAverageCrossover<VALUE_TYPE,FITNESS_TYPE>>
27 MultiValueChromosomeAverageCrossover(
28 const std::shared_ptr<MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>> &builderFactory
29 ) : MultiValueChromosomeCrossoverOperation<VALUE_TYPE,FITNESS_TYPE>(builderFactory)
33 virtual ~MultiValueChromosomeAverageCrossover()
37 bool isSymmetric()
const override
66 virtual typename BaseCrossoverOperation<FITNESS_TYPE>::crossover_result_set doMultiValueCrossover(
67 const typename MultiValueChromosome<VALUE_TYPE, FITNESS_TYPE>::const_ptr &mommy,
68 const typename MultiValueChromosome<VALUE_TYPE, FITNESS_TYPE>::const_ptr &daddy)
const override;
71 class Builder :
public MultiValueChromosomeCrossoverOperation<VALUE_TYPE,FITNESS_TYPE>::Builder
74 Builder(
const std::shared_ptr<MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>> & builderFactory) :
75 MultiValueChromosomeCrossoverOperation<VALUE_TYPE, FITNESS_TYPE>::Builder(builderFactory)
80 virtual typename BaseCrossoverOperation<FITNESS_TYPE>::ptr create()
override
82 if(! this->_builderFactory )
84 throw new std::runtime_error(
"Must set a Chromosome Factory to build MultiValueCrossover");
87 return MultiValueChromosomeAverageCrossover<VALUE_TYPE, FITNESS_TYPE>::makeShared(this->_builderFactory);
97 #include <geneial/core/operations/crossover/MultiValueChromosomeAverageCrossover.hpp>