GENEIAL  0.2=/
 All Classes Pages
RouletteWheelSelection.h
1 #pragma once
2 
3 #include <geneial/core/operations/selection/BaseSelectionOperation.h>
4 #include <geneial/utility/mixins/EnableMakeShared.h>
5 
6 #include <map>
7 #include <stdexcept>
8 #include <memory>
9 
10 geneial_private_namespace(geneial)
11 {
12 geneial_private_namespace(operation)
13 {
14 geneial_private_namespace(selection)
15 {
16 using ::geneial::utility::EnableMakeShared;
17 
18 geneial_export_namespace
19 {
20 
21 
25 template<typename FITNESS_TYPE>
26 class RouletteWheelSelection: public BaseSelectionOperation<FITNESS_TYPE>,
27  public virtual EnableMakeShared<RouletteWheelSelection<FITNESS_TYPE>>
28 {
29 protected:
30  RouletteWheelSelection(const std::shared_ptr<BaseSelectionSettings> &settings) :
31  BaseSelectionOperation<FITNESS_TYPE>(settings)
32  {
33  }
34 
35 public:
36 
37  virtual ~RouletteWheelSelection()
38  {
39  }
40 
41  virtual typename BaseSelectionOperation<FITNESS_TYPE>::selection_result_set doSelect(
42  const Population<FITNESS_TYPE> &population, BaseManager<FITNESS_TYPE> &manager) const override;
43 
44  class Builder : public BaseSelectionOperation<FITNESS_TYPE>::Builder
45  {
46 
47  public:
48  Builder() : BaseSelectionOperation<FITNESS_TYPE>::Builder()
49  {
50  }
51 
52  typename BaseSelectionOperation<FITNESS_TYPE>::ptr create() override
53  {
54  return RouletteWheelSelection<FITNESS_TYPE>::makeShared(this->_settings);
55  }
56 
57  };
58 };
59 
60 
61 
62 } /* geneial_export_namespace */
63 } /* private namespace selection */
64 } /* private namespace operation */
65 } /* private namespace geneial */
66 
67 #include <geneial/core/operations/selection/RouletteWheelSelection.hpp>
68