3 #include <geneial/namespaces.h>
4 #include <geneial/core/operations/selection/BaseSelectionSettings.h>
5 #include <geneial/core/population/management/BaseManager.h>
6 #include <geneial/core/population/Population.h>
7 #include <geneial/utility/mixins/Buildable.h>
9 geneial_private_namespace(geneial)
11 geneial_private_namespace(operation)
13 geneial_private_namespace(selection)
15 using ::geneial::population::Population;
16 using ::geneial::population::management::BaseManager;
17 using ::geneial::utility::Buildable;
19 geneial_export_namespace
25 template<
typename FITNESS_TYPE>
26 class BaseSelectionOperation :
public Buildable<BaseSelectionOperation<FITNESS_TYPE>>
29 const std::shared_ptr<BaseSelectionSettings> _settings;
33 BaseSelectionOperation(
const std::shared_ptr<BaseSelectionSettings> &settings) :
39 using selection_result_set =
typename Population<FITNESS_TYPE>::chromosome_container;
41 virtual ~BaseSelectionOperation()
45 virtual selection_result_set doSelect(
const Population<FITNESS_TYPE> &population,
46 BaseManager<FITNESS_TYPE> &manager)
const = 0;
49 const BaseSelectionSettings& getSettings()
const
54 void setSettings(
const std::shared_ptr<BaseSelectionSettings> &settings)
59 class Builder: Buildable<BaseSelectionOperation<FITNESS_TYPE>>::Builder
62 std::shared_ptr<BaseSelectionSettings> _settings;
65 _settings(new BaseSelectionSettings)
69 Builder(
const std::shared_ptr<BaseSelectionSettings>&settings) :
74 BaseSelectionSettings& getSettings()