3 #include <geneial/namespaces.h>
4 #include <geneial/core/operations/choosing/BaseChoosingOperation.h>
6 #include <geneial/utility/mixins/Buildable.h>
7 #include <geneial/utility/mixins/EnableMakeShared.h>
9 geneial_private_namespace(geneial)
11 geneial_private_namespace(operation)
13 geneial_private_namespace(choosing)
15 using ::geneial::population::Population;
16 using ::geneial::utility::EnableMakeShared;
18 geneial_export_namespace
22 template<
typename FITNESS_TYPE>
23 class ChooseRandom:
public BaseChoosingOperation<FITNESS_TYPE>,
24 public EnableMakeShared<ChooseRandom<FITNESS_TYPE>>
29 explicit ChooseRandom(
const double probability=DEFAULT_PROBABILITY) :
30 BaseChoosingOperation<FITNESS_TYPE>(), _probability(probability)
35 const constexpr
static double DEFAULT_PROBABILITY = 0.1;
37 virtual ~ChooseRandom()
45 virtual typename Population<FITNESS_TYPE>::chromosome_container doChoose(
46 const typename Population<FITNESS_TYPE>::chromosome_container &chromosomeInputSet)
const override;
48 double getProbability()
const
53 void setProbability(
double probability)
55 _probability = probability;
58 class Builder:
public BaseChoosingOperation<FITNESS_TYPE>::Builder
65 const constexpr
static double DEFAULT_PROBABILITY = 0.1;
67 Builder() : BaseChoosingOperation<FITNESS_TYPE>::Builder(),
68 _probability(DEFAULT_PROBABILITY)
72 Builder(
const double probability) :
73 BaseChoosingOperation<FITNESS_TYPE>::Builder(),
74 _probability(probability)
78 virtual typename BaseChoosingOperation<FITNESS_TYPE>::ptr create()
override
80 return ChooseRandom<FITNESS_TYPE>::makeShared(this->_probability);
83 double getProbability()
const
88 Builder& setProbability(
double probability = DEFAULT_PROBABILITY)
90 _probability = probability;
103 #include <geneial/core/operations/choosing/ChooseRandom.hpp>