GENEIAL  0.2=/
 All Classes Pages
ValueSwapMutationOperation.h
1 #pragma once
2 
3 #include <geneial/core/operations/mutation/MultiValueChromosomeMutationOperation.h>
4 #include <geneial/core/population/Population.h>
5 #include <geneial/utility/mixins/EnableMakeShared.h>
6 
7 #include <cassert>
8 
9 geneial_private_namespace(geneial)
10 {
11 geneial_private_namespace(operation)
12 {
13 geneial_private_namespace(mutation)
14 {
15 using ::geneial::population::Population;
16 using ::geneial::utility::EnableMakeShared;
17 
18 geneial_export_namespace
19 {
20 
21 template<typename VALUE_TYPE, typename FITNESS_TYPE>
22 class ValueSwapMutationOperation: public MultiValueChromosomeMutationOperation<VALUE_TYPE,FITNESS_TYPE>,
23  public virtual EnableMakeShared<ValueSwapMutationOperation<VALUE_TYPE,FITNESS_TYPE>>
24 {
25 protected:
26  /*
27  * ValueSwapMutationOperation Swaps two entries of a chromosome
28  */
29  ValueSwapMutationOperation(
30  const std::shared_ptr<const MultiValueMutationSettings> &settings,
31  const std::shared_ptr<const BaseChoosingOperation<FITNESS_TYPE>> &choosingOperation,
32  const std::shared_ptr<MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>> &builderFactory) :
33 
34  MultiValueChromosomeMutationOperation<VALUE_TYPE,FITNESS_TYPE>(
35  settings,
36  choosingOperation,
37  builderFactory
38  )
39  {
40  }
41 public:
42 
43  virtual ~ValueSwapMutationOperation()
44  {
45  }
46 
47  /*
48  * Returns a new chromosome which is a partially mutated version of the old one.
49  * */
50  virtual typename Population<FITNESS_TYPE>::chromosome_container doMutate(
51  const typename Population<FITNESS_TYPE>::chromosome_container &mutants, BaseManager<FITNESS_TYPE> &manager) const override;
52 
53 
54  class Builder : public MultiValueChromosomeMutationOperation<VALUE_TYPE,FITNESS_TYPE>::Builder
55  {
56  public:
57 
58  Builder(const std::shared_ptr<MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>> &builderFactory) :
59  MultiValueChromosomeMutationOperation<VALUE_TYPE, FITNESS_TYPE>::Builder(builderFactory)
60  {
61  }
62 
63  Builder(const std::shared_ptr<MultiValueMutationSettings> &settings,
64  const std::shared_ptr<BaseChoosingOperation<FITNESS_TYPE>> &choosingOperation,
65  const std::shared_ptr<MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>> &builderFactory) :
66  MultiValueChromosomeMutationOperation<VALUE_TYPE, FITNESS_TYPE>::Builder(settings, choosingOperation,
67  builderFactory)
68  {
69  }
70 
71  virtual typename BaseMutationOperation<FITNESS_TYPE>::ptr create() override
72  {
73  return std::move(
74  ValueSwapMutationOperation<VALUE_TYPE, FITNESS_TYPE>::makeShared
75  (
76  this->_settings,
77  this->_choosingOperation,
78  this->_builderFactory
79  )
80  );
81  }
82  };
83 
84 };
85 
86 } /* geneial_export_namespace */
87 } /* private namespace mutation */
88 } /* private namespace operation */
89 } /* private namespace geneial */
90 
91 #include <geneial/core/operations/mutation/ValueSwapMutationOperation.hpp>
92