3 #include <geneial/core/operations/selection/BaseSelectionOperation.h>
4 #include <geneial/core/operations/selection/FitnessProportionalSelectionSettings.h>
5 #include <geneial/utility/mixins/EnableMakeShared.h>
10 geneial_private_namespace(geneial)
12 geneial_private_namespace(operation)
14 geneial_private_namespace(selection)
16 using ::geneial::utility::EnableMakeShared;
18 geneial_export_namespace
24 template<
typename FITNESS_TYPE>
25 class FitnessProportionalSelection:
public BaseSelectionOperation<FITNESS_TYPE>,
26 public virtual EnableMakeShared<FitnessProportionalSelection<FITNESS_TYPE>>
30 const std::shared_ptr<FitnessProportionalSelectionSettings> _settings;
33 FitnessProportionalSelection(
const std::shared_ptr<FitnessProportionalSelectionSettings>& settings) :
34 BaseSelectionOperation<FITNESS_TYPE>(settings), _settings(settings)
40 virtual ~FitnessProportionalSelection()
44 virtual typename BaseSelectionOperation<FITNESS_TYPE>::selection_result_set doSelect(
45 const Population<FITNESS_TYPE> &population, BaseManager<FITNESS_TYPE> &manager)
const override;
48 class Builder :
public BaseSelectionOperation<FITNESS_TYPE>::Builder
52 Builder() : BaseSelectionOperation<FITNESS_TYPE>::Builder(std::make_shared<FitnessProportionalSelectionSettings>())
56 FitnessProportionalSelectionSettings& getSettings()
58 return *std::dynamic_pointer_cast<FitnessProportionalSelectionSettings>(this->_settings);
61 typename BaseSelectionOperation<FITNESS_TYPE>::ptr create()
override
63 auto settings = std::dynamic_pointer_cast<FitnessProportionalSelectionSettings>(this->_settings);
64 return FitnessProportionalSelection<FITNESS_TYPE>::makeShared(settings);
76 #include <geneial/core/operations/selection/FitnessProportionalSelection.hpp>