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