3 #include <geneial/core/operations/mutation/MultiValueChromosomeMutationOperation.h>
4 #include <geneial/core/population/builder/ContinousMultiValueChromosomeFactory.h>
5 #include <geneial/core/population/builder/ContinousMultiValueBuilderSettings.h>
6 #include <geneial/utility/Smoothing.h>
7 #include <geneial/utility/mixins/EnableMakeShared.h>
8 #include <geneial/core/population/Population.h>
12 geneial_private_namespace(geneial)
14 geneial_private_namespace(operation)
16 geneial_private_namespace(mutation)
18 using ::geneial::population::chromosome::ContinousMultiValueBuilderSettings;
19 using ::geneial::population::chromosome::ContinousMultiValueChromosomeFactory;
20 using ::geneial::population::Population;
21 using ::geneial::utility::EnableMakeShared;
24 geneial_export_namespace
27 template<
typename VALUE_TYPE,
typename FITNESS_TYPE>
28 class SmoothPeakMutationOperation:
public MultiValueChromosomeMutationOperation<VALUE_TYPE,FITNESS_TYPE>,
29 public EnableMakeShared<SmoothPeakMutationOperation<VALUE_TYPE,FITNESS_TYPE>>
33 unsigned int _maxLeftEps;
35 unsigned int _maxRightEps;
37 FITNESS_TYPE _maxElevation;
40 SmoothPeakMutationOperation(
41 const unsigned int maxLeftEps,
42 const unsigned int maxRightEps,
43 const FITNESS_TYPE maxElevation,
44 const std::shared_ptr<const MultiValueMutationSettings> &settings,
45 const std::shared_ptr<
const BaseChoosingOperation<FITNESS_TYPE>> &choosingOperation,
46 const std::shared_ptr<ContinousMultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>> &builderFactory) :
48 MultiValueChromosomeMutationOperation<VALUE_TYPE,FITNESS_TYPE>(
54 _maxLeftEps(maxLeftEps),
55 _maxRightEps(maxRightEps),
56 _maxElevation(maxElevation)
62 virtual ~SmoothPeakMutationOperation()
70 virtual typename Population<FITNESS_TYPE>::chromosome_container doMutate(
71 const typename Population<FITNESS_TYPE>::chromosome_container &mutants, BaseManager<FITNESS_TYPE> &manager)
const override;
73 FITNESS_TYPE getMaxElevation()
const
78 unsigned int getMaxLeftEps()
const
83 unsigned int getMaxRightEps()
const
89 class Builder :
public MultiValueChromosomeMutationOperation<VALUE_TYPE,FITNESS_TYPE>::Builder
92 unsigned int _maxLeftEps;
94 unsigned int _maxRightEps;
96 FITNESS_TYPE _maxElevation;
99 const constexpr
static unsigned int DEFAULT_MAX_LEFT_EPS = 2;
101 const constexpr
static unsigned int DEFAULT_MAX_RIGHT_EPS = 2;
103 const constexpr
static FITNESS_TYPE DEFAULT_MAX_ELEVATION = 5;
105 Builder(
const std::shared_ptr<ContinousMultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>> &builderFactory) :
106 MultiValueChromosomeMutationOperation<VALUE_TYPE, FITNESS_TYPE>::Builder(builderFactory),
107 _maxLeftEps(DEFAULT_MAX_LEFT_EPS),
108 _maxRightEps(DEFAULT_MAX_RIGHT_EPS),
109 _maxElevation(DEFAULT_MAX_ELEVATION)
113 Builder(
const std::shared_ptr<MultiValueMutationSettings> &settings,
114 const std::shared_ptr<BaseChoosingOperation<FITNESS_TYPE>> &choosingOperation,
115 const std::shared_ptr<ContinousMultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>> &builderFactory) :
116 MultiValueChromosomeMutationOperation<VALUE_TYPE, FITNESS_TYPE>::Builder(settings, choosingOperation,
118 _maxLeftEps(DEFAULT_MAX_LEFT_EPS),
119 _maxRightEps(DEFAULT_MAX_RIGHT_EPS),
120 _maxElevation(DEFAULT_MAX_ELEVATION)
124 Builder& setMaxElevation(FITNESS_TYPE maxElevation)
126 _maxElevation = maxElevation;
130 Builder& setMaxLeftEps(
unsigned int maxLeftEps)
132 _maxLeftEps = maxLeftEps;
136 Builder& setMaxRightEps(
unsigned int maxRightEps)
138 _maxRightEps = maxRightEps;
142 virtual typename BaseMutationOperation<FITNESS_TYPE>::ptr create()
override
146 SmoothPeakMutationOperation<VALUE_TYPE,FITNESS_TYPE>::makeShared(
151 this->_choosingOperation,
152 std::dynamic_pointer_cast<ContinousMultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>>(this->_builderFactory)
169 #include <geneial/core/operations/mutation/SmoothPeakMutationOperation.hpp>