3 #include <geneial/namespaces.h>
4 #include <geneial/core/operations/replacement/BaseReplacementSettings.h>
5 #include <geneial/core/population/management/BaseManager.h>
6 #include <geneial/core/population/Population.h>
8 geneial_private_namespace(geneial)
10 geneial_private_namespace(operation)
12 geneial_private_namespace(replacement)
14 using ::geneial::population::Population;
15 using ::geneial::operation::crossover::BaseCrossoverOperation;
16 using ::geneial::operation::selection::BaseSelectionOperation;
17 using ::geneial::population::management::BaseManager;
18 using ::geneial::utility::Buildable;
20 geneial_export_namespace
22 template<
typename FITNESS_TYPE>
23 class BaseReplacementOperation :
public Buildable<BaseReplacementOperation<FITNESS_TYPE>>
26 std::shared_ptr<const BaseReplacementSettings> _settings;
29 using ptr = std::shared_ptr<BaseReplacementOperation<FITNESS_TYPE>>;
31 using const_ptr = std::shared_ptr<BaseReplacementOperation<FITNESS_TYPE>>;
33 explicit BaseReplacementOperation(
const std::shared_ptr<const BaseReplacementSettings> &settings) :
38 virtual ~BaseReplacementOperation()
42 virtual void doReplace(Population<FITNESS_TYPE> &population,
43 const typename selection::BaseSelectionOperation<FITNESS_TYPE>::selection_result_set &parents,
44 typename coupling::BaseCouplingOperation<FITNESS_TYPE>::offspring_result_set &offspring,
45 BaseManager<FITNESS_TYPE> &manager)
const = 0;
47 const BaseReplacementSettings& getSettings()
const
52 void setSettings(
const BaseReplacementSettings& settings)
57 class Builder :
public Buildable<BaseReplacementOperation<FITNESS_TYPE>>::Builder
60 std::shared_ptr<BaseReplacementSettings> _settings;
63 Builder():_settings(new BaseReplacementSettings)
67 BaseReplacementSettings& getSettings()
72 void setSettings(
const std::shared_ptr<BaseReplacementSettings>& settings)