GENEIAL  0.2=/
 All Classes Pages
BaseReplacementOperation.h
1 #pragma once
2 
3 #include <geneial/namespaces.h>
4 #include <geneial/core/operations/replacement/BaseReplacementSettings.h>
5 #include <geneial/core/population/management/BaseManager.h>
6 #include <geneial/core/population/Population.h>
7 
8 geneial_private_namespace(geneial)
9 {
10 geneial_private_namespace(operation)
11 {
12 geneial_private_namespace(replacement)
13 {
14 using ::geneial::population::Population;
15 using ::geneial::operation::crossover::BaseCrossoverOperation;
16 using ::geneial::operation::selection::BaseSelectionOperation;
17 using ::geneial::population::management::BaseManager;
18 using ::geneial::utility::Buildable;
19 
20 geneial_export_namespace
21 {
22 template<typename FITNESS_TYPE>
23 class BaseReplacementOperation : public Buildable<BaseReplacementOperation<FITNESS_TYPE>>
24 {
25 protected:
26  std::shared_ptr<const BaseReplacementSettings> _settings;
27 
28 public:
29  using ptr = std::shared_ptr<BaseReplacementOperation<FITNESS_TYPE>>;
30 
31  using const_ptr = std::shared_ptr<BaseReplacementOperation<FITNESS_TYPE>>;
32 
33  explicit BaseReplacementOperation(const std::shared_ptr<const BaseReplacementSettings> &settings) :
34  _settings(settings)
35  {
36  }
37 
38  virtual ~BaseReplacementOperation()
39  {
40  }
41 
42  virtual void doReplace(Population<FITNESS_TYPE> &population,
43  const typename selection::BaseSelectionOperation<FITNESS_TYPE>::selection_result_set &parents,
44  typename coupling::BaseCouplingOperation<FITNESS_TYPE>::offspring_result_set &offspring,
45  BaseManager<FITNESS_TYPE> &manager) const = 0;
46 
47  const BaseReplacementSettings& getSettings() const
48  {
49  return *_settings;
50  }
51 
52  void setSettings(const BaseReplacementSettings& settings)
53  {
54  _settings = settings;
55  }
56 
57  class Builder : public Buildable<BaseReplacementOperation<FITNESS_TYPE>>::Builder
58  {
59  protected:
60  std::shared_ptr<BaseReplacementSettings> _settings;
61 
62  public:
63  Builder():_settings(new BaseReplacementSettings)
64  {
65  }
66 
67  BaseReplacementSettings& getSettings()
68  {
69  return *_settings;
70  }
71 
72  void setSettings(const std::shared_ptr<BaseReplacementSettings>& settings)
73  {
74  _settings = settings;
75  }
76  };
77 
78 
79 
80 };
81 
82 } /* geneial_export_namespace */
83 } /* private namespace replacement */
84 } /* private namespace operation */
85 } /* private namespace geneial */
86