GENEIAL  0.2=/
 All Classes Pages
ChooseRandom.h
1 #pragma once
2 
3 #include <geneial/namespaces.h>
4 #include <geneial/core/operations/choosing/BaseChoosingOperation.h>
5 
6 #include <geneial/utility/mixins/Buildable.h>
7 #include <geneial/utility/mixins/EnableMakeShared.h>
8 
9 geneial_private_namespace(geneial)
10 {
11 geneial_private_namespace(operation)
12 {
13 geneial_private_namespace(choosing)
14 {
15 using ::geneial::population::Population;
16 using ::geneial::utility::EnableMakeShared;
17 
18 geneial_export_namespace
19 {
20 
21 
22 template<typename FITNESS_TYPE>
23 class ChooseRandom: public BaseChoosingOperation<FITNESS_TYPE>,
24  public EnableMakeShared<ChooseRandom<FITNESS_TYPE>>
25 {
26 private:
27  double _probability;
28 protected:
29  explicit ChooseRandom(const double probability=DEFAULT_PROBABILITY) :
30  BaseChoosingOperation<FITNESS_TYPE>(), _probability(probability)
31  {
32  }
33 
34 public:
35  const constexpr static double DEFAULT_PROBABILITY = 0.1;
36 
37  virtual ~ChooseRandom()
38  {
39  }
40 
45  virtual typename Population<FITNESS_TYPE>::chromosome_container doChoose(
46  const typename Population<FITNESS_TYPE>::chromosome_container &chromosomeInputSet) const override;
47 
48  double getProbability() const
49  {
50  return _probability;
51  }
52 
53  void setProbability(double probability)
54  {
55  _probability = probability;
56  }
57 
58  class Builder: public BaseChoosingOperation<FITNESS_TYPE>::Builder
59  {
60 
61  protected:
62  double _probability;
63 
64  public:
65  const constexpr static double DEFAULT_PROBABILITY = 0.1;
66 
67  Builder() : BaseChoosingOperation<FITNESS_TYPE>::Builder(),
68  _probability(DEFAULT_PROBABILITY)
69  {
70  }
71 
72  Builder(const double probability) :
73  BaseChoosingOperation<FITNESS_TYPE>::Builder(),
74  _probability(probability)
75  {
76  }
77 
78  virtual typename BaseChoosingOperation<FITNESS_TYPE>::ptr create() override
79  {
80  return ChooseRandom<FITNESS_TYPE>::makeShared(this->_probability);
81  }
82 
83  double getProbability() const
84  {
85  return _probability;
86  }
87 
88  Builder& setProbability(double probability = DEFAULT_PROBABILITY)
89  {
90  _probability = probability;
91  return *this;
92  }
93  };
94 
95 };
96 
97 } /* geneial_export_namespace */
98 } /* private namespace choosing */
99 } /* private namespace operation */
100 } /* private namespace geneial */
101 
102 
103 #include <geneial/core/operations/choosing/ChooseRandom.hpp>
104