GENEIAL  0.2=/
 All Classes Pages
MultiValueChromosomeMutationOperation.h
1 #pragma once
2 
3 #include <geneial/core/operations/mutation/BaseMutationOperation.h>
4 #include <geneial/core/population/chromosome/MultiValueChromosome.h>
5 #include <geneial/core/population/builder/MultiValueChromosomeFactory.h>
6 #include <geneial/core/operations/mutation/MultiValueMutationSettings.h>
7 
8 geneial_private_namespace(geneial)
9 {
10 geneial_private_namespace(operation)
11 {
12 geneial_private_namespace(mutation)
13 {
14 using ::geneial::population::chromosome::MultiValueChromosome;
15 using ::geneial::population::chromosome::MultiValueChromosomeFactory;
16 
17 geneial_export_namespace
18 {
19 //The purpose of this class is to provide heirs the MVCFactory and to encapsulate high level mvc specific operations
20 template<typename VALUE_TYPE, typename FITNESS_TYPE>
21 class MultiValueChromosomeMutationOperation : public BaseMutationOperation<FITNESS_TYPE>
22 {
23 
24 protected:
25  std::shared_ptr<const MultiValueMutationSettings> _settings;
26 
27  std::shared_ptr<MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>> _builderFactory;
28 
29  MultiValueChromosomeMutationOperation(
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  BaseMutationOperation<FITNESS_TYPE>(choosingOperation),
35  _settings(settings),
36  _builderFactory(builderFactory)
37  {
38  }
39 
40 public:
41 
42  virtual ~MultiValueChromosomeMutationOperation()
43  {
44  }
45 
46  inline MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE> & getBuilderFactory() const
47  {
48  return *_builderFactory;
49  }
50 
51  inline const MultiValueMutationSettings& getSettings() const
52  {
53  return *_settings;
54  }
55 
56  class Builder : public BaseMutationOperation<FITNESS_TYPE>::Builder
57  {
58  protected:
59  std::shared_ptr<MultiValueMutationSettings> _settings;
60  std::shared_ptr<MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>> _builderFactory;
61 
62  public:
63  Builder(const std::shared_ptr<MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>> &builderFactory):
64  BaseMutationOperation<FITNESS_TYPE>::Builder(),
65  _settings(std::make_shared<MultiValueMutationSettings>()),
66  _builderFactory(builderFactory)
67  {}
68 
69  Builder(
70  const std::shared_ptr<MultiValueMutationSettings> &settings,
71  const std::shared_ptr<BaseChoosingOperation<FITNESS_TYPE>> &choosingOperation,
72  const std::shared_ptr<MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE>> &builderFactory):
73  BaseMutationOperation<FITNESS_TYPE>::Builder(choosingOperation),
74  _settings(settings),
75  _builderFactory(builderFactory)
76  {}
77 
78  const std::shared_ptr<MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE> >& getBuilderFactory() const
79  {
80  return _builderFactory;
81  }
82 
83  void setBuilderFactory(
84  const std::shared_ptr<MultiValueChromosomeFactory<VALUE_TYPE, FITNESS_TYPE> >& builderFactory)
85  {
86  _builderFactory = builderFactory;
87  }
88 
89  MultiValueMutationSettings& getSettings()
90  {
91  return *_settings;
92  }
93 
94  void setSettings(const std::shared_ptr<MultiValueMutationSettings>& settings)
95  {
96  _settings = settings;
97  }
98  };
99 
100 };
101 
102 } /* geneial_export_namespace */
103 } /* private namespace mutation */
104 } /* private namespace operation */
105 } /* private namespace geneial */
106