GENEIAL  0.2=/
 All Classes Pages
BaseMutationOperation.h
1 #pragma once
2 
3 #include <geneial/namespaces.h>
4 #include <geneial/core/population/management/BaseManager.h>
5 #include <geneial/core/population/Population.h>
6 #include <geneial/core/operations/choosing/BaseChoosingOperation.h>
7 #include <geneial/core/operations/choosing/ChooseRandom.h>
8 #include <geneial/utility/mixins/Buildable.h>
9 
10 geneial_private_namespace(geneial)
11 {
12 geneial_private_namespace(operation)
13 {
14 geneial_private_namespace(mutation)
15 {
16 using ::geneial::operation::choosing::BaseChoosingOperation;
17 using ::geneial::operation::choosing::ChooseRandom;
18 using ::geneial::population::Population;
19 using ::geneial::population::management::BaseManager;
20 using ::geneial::utility::Buildable;
21 
22 geneial_export_namespace
23 {
24 template<typename FITNESS_TYPE>
25 class BaseMutationOperation : public Buildable<BaseMutationOperation<FITNESS_TYPE>>
26 {
27 protected:
28  std::shared_ptr<const BaseChoosingOperation<FITNESS_TYPE>> _choosingOperation;
29 
30  //Constructor
31  BaseMutationOperation(
32  const std::shared_ptr<const BaseChoosingOperation<FITNESS_TYPE>> &choosingOperation
33  ) :
34  _choosingOperation(choosingOperation)
35  {
36  }
37 
38 public:
39  //Destructor
40  virtual ~BaseMutationOperation()
41  {
42  }
43 
44  typedef typename Population<FITNESS_TYPE>::chromosome_container mutation_result_set;
45  virtual typename Population<FITNESS_TYPE>::chromosome_container doMutate(
46  const typename Population<FITNESS_TYPE>::chromosome_container &mutants, BaseManager<FITNESS_TYPE> &manager) const = 0;
47 
48  BaseChoosingOperation<FITNESS_TYPE> const & getChoosingOperation() const
49  {
50  return *_choosingOperation;
51  }
52 
53  class Builder : public Buildable<BaseMutationOperation<FITNESS_TYPE>>::Builder
54  {
55 
56  protected:
57  std::shared_ptr<BaseChoosingOperation<FITNESS_TYPE>> _choosingOperation;
58 
59  public:
60  Builder() :
61  _choosingOperation(typename ChooseRandom<FITNESS_TYPE>::Builder().create())
62  {
63  }
64 
65  Builder(const std::shared_ptr<BaseChoosingOperation<FITNESS_TYPE>> &choosingOperation) :
66  _choosingOperation(choosingOperation)
67  {
68  }
69 
70  Builder& setChoosingOperation(const std::shared_ptr<BaseChoosingOperation<FITNESS_TYPE> >& choosingOperation)
71  {
72  _choosingOperation = choosingOperation;
73  return *this;
74  }
75  };
76 
77 };
78 
79 } /* geneial_export_namespace */
80 } /* private namespace mutation */
81 } /* private namespace operation */
82 } /* private namespace geneial */
83 
84