3 #include <geneial/namespaces.h>
4 #include <geneial/core/operations/coupling/BaseCouplingOperation.h>
5 #include <geneial/utility/mixins/EnableMakeShared.h>
7 geneial_private_namespace(geneial)
9 geneial_private_namespace(operation)
11 geneial_private_namespace(coupling)
13 using ::geneial::population::Population;
14 using ::geneial::operation::crossover::BaseCrossoverOperation;
15 using ::geneial::operation::selection::BaseSelectionOperation;
16 using ::geneial::population::management::BaseManager;
17 using ::geneial::utility::EnableMakeShared;
19 geneial_export_namespace
25 template<
typename FITNESS_TYPE>
26 class LambdaCouplingAdapter:
public BaseCouplingOperation<FITNESS_TYPE>,
27 public virtual EnableMakeShared<LambdaCouplingAdapter<FITNESS_TYPE>>
30 using offspring_result_set =
typename BaseCouplingOperation<FITNESS_TYPE>::offspring_result_set;
31 using selection_result_set =
typename BaseSelectionOperation<FITNESS_TYPE>::selection_result_set;
32 using function_type =
typename std::function<offspring_result_set(
33 const selection_result_set&,
34 const BaseCrossoverOperation<FITNESS_TYPE> &crossoverOperation,
35 BaseManager<FITNESS_TYPE> &manager
38 virtual ~LambdaCouplingAdapter()
42 virtual offspring_result_set doCopulate(
const selection_result_set &mating_pool,
43 const BaseCrossoverOperation<FITNESS_TYPE> &crossoverOperation, BaseManager<FITNESS_TYPE> &manager)
override
45 return _lmbda(mating_pool, crossoverOperation, manager);
48 class Builder:
public BaseCouplingOperation<FITNESS_TYPE>::Builder
50 function_type _function;
53 Builder(function_type func) :
54 BaseCouplingOperation<FITNESS_TYPE>::Builder(), _function(func)
58 virtual typename BaseCouplingOperation<FITNESS_TYPE>::ptr create()
override
60 return LambdaCouplingAdapter<FITNESS_TYPE>::makeShared(_function);
63 const function_type& getFunction()
const
68 Builder& setFunction(
const function_type&
function)
77 explicit LambdaCouplingAdapter(
const function_type lmbda) :
78 BaseCouplingOperation<FITNESS_TYPE>(std::make_shared<CouplingSettings>()), _lmbda(lmbda)
88 #include <geneial/core/operations/coupling/RandomCouplingOperation.hpp>