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 LambdaChoosingAdapter:
public BaseChoosingOperation<FITNESS_TYPE>,
24 public EnableMakeShared<LambdaChoosingAdapter<FITNESS_TYPE>>
27 using input_set =
typename Population<FITNESS_TYPE>::chromosome_container;
28 using output_set =
typename Population<FITNESS_TYPE>::chromosome_container;
29 using function_type =
typename std::function<output_set(const input_set&)>;
31 virtual ~LambdaChoosingAdapter()
35 virtual output_set doChoose(
const input_set&chromosomeInputSet)
const override
37 return _function(chromosomeInputSet);
40 class Builder:
public BaseChoosingOperation<FITNESS_TYPE>::Builder
43 function_type _function;
45 const constexpr
static double DEFAULT_PROBABILITY = 0.1;
47 Builder(function_type func) :
48 BaseChoosingOperation<FITNESS_TYPE>::Builder(), _function(func)
52 virtual typename BaseChoosingOperation<FITNESS_TYPE>::ptr create()
override
54 return LambdaChoosingAdapter<FITNESS_TYPE>::makeShared(_function);
57 const function_type& getFunction()
const
62 Builder& setFunction(
const function_type&
function)
69 function_type _function;
71 explicit LambdaChoosingAdapter(
const function_type&
function) :
72 BaseChoosingOperation<FITNESS_TYPE>(),
84 #include <geneial/core/operations/choosing/ChooseRandom.hpp>