3 #include <geneial/namespaces.h>
4 #include <geneial/core/operations/coupling/CouplingSettings.h>
5 #include <geneial/core/operations/selection/BaseSelectionOperation.h>
6 #include <geneial/core/operations/crossover/BaseCrossoverOperation.h>
7 #include <geneial/core/population/management/BaseManager.h>
8 #include <geneial/utility/mixins/Buildable.h>
10 geneial_private_namespace(geneial)
12 geneial_private_namespace(operation)
14 geneial_private_namespace(coupling)
16 using ::geneial::population::Population;
17 using ::geneial::operation::crossover::BaseCrossoverOperation;
18 using ::geneial::operation::selection::BaseSelectionOperation;
19 using ::geneial::population::management::BaseManager;
20 using ::geneial::utility::Buildable;
22 geneial_export_namespace
26 template<
typename FITNESS_TYPE>
27 class BaseCouplingOperation :
public Buildable<BaseCouplingOperation<FITNESS_TYPE>>
31 std::shared_ptr<const CouplingSettings> _settings;
34 explicit BaseCouplingOperation(
const std::shared_ptr<const CouplingSettings> &settings) :
40 using offspring_result_set =
typename Population<FITNESS_TYPE>::chromosome_container;
42 virtual ~BaseCouplingOperation()
46 virtual offspring_result_set doCopulate(
47 const typename BaseSelectionOperation<FITNESS_TYPE>::selection_result_set &mating_pool,
48 const BaseCrossoverOperation<FITNESS_TYPE> &crossoverOperation,
49 BaseManager<FITNESS_TYPE> &manager) = 0;
51 CouplingSettings
const & getSettings()
const
56 void setSettings(
const std::shared_ptr<const CouplingSettings> settings)
61 class Builder:
public Buildable<BaseCouplingOperation<FITNESS_TYPE>>::Builder
65 std::shared_ptr<CouplingSettings> _settings;
68 Builder():_settings(std::make_shared<CouplingSettings>())
72 Builder(
const std::shared_ptr<CouplingSettings> &settings):_settings(settings)
76 inline CouplingSettings& getSettings()
81 void setSettings(
const std::shared_ptr<CouplingSettings>& settings)
89 typename offspring_result_set::size_type copyUnlessMaximumReached(
90 offspring_result_set &dest,
91 const typename BaseCrossoverOperation<FITNESS_TYPE>::crossover_result_set &input,
92 const typename BaseCrossoverOperation<FITNESS_TYPE>::crossover_result_set::size_type limit)
const;
102 #include <geneial/core/operations/coupling/BaseCouplingOperation.hpp>