3 #include <geneial/namespaces.h>
4 #include <geneial/core/population/management/BaseManager.h>
5 #include <geneial/core/population/Population.h>
6 #include <geneial/core/operations/choosing/BaseChoosingOperation.h>
7 #include <geneial/core/operations/choosing/ChooseRandom.h>
8 #include <geneial/utility/mixins/Buildable.h>
10 geneial_private_namespace(geneial)
12 geneial_private_namespace(operation)
14 geneial_private_namespace(mutation)
16 using ::geneial::operation::choosing::BaseChoosingOperation;
17 using ::geneial::operation::choosing::ChooseRandom;
18 using ::geneial::population::Population;
19 using ::geneial::population::management::BaseManager;
20 using ::geneial::utility::Buildable;
22 geneial_export_namespace
24 template<
typename FITNESS_TYPE>
25 class BaseMutationOperation :
public Buildable<BaseMutationOperation<FITNESS_TYPE>>
28 std::shared_ptr<const BaseChoosingOperation<FITNESS_TYPE>> _choosingOperation;
31 BaseMutationOperation(
32 const std::shared_ptr<
const BaseChoosingOperation<FITNESS_TYPE>> &choosingOperation
34 _choosingOperation(choosingOperation)
40 virtual ~BaseMutationOperation()
44 typedef typename Population<FITNESS_TYPE>::chromosome_container mutation_result_set;
45 virtual typename Population<FITNESS_TYPE>::chromosome_container doMutate(
46 const typename Population<FITNESS_TYPE>::chromosome_container &mutants, BaseManager<FITNESS_TYPE> &manager)
const = 0;
48 BaseChoosingOperation<FITNESS_TYPE>
const & getChoosingOperation()
const
50 return *_choosingOperation;
53 class Builder :
public Buildable<BaseMutationOperation<FITNESS_TYPE>>::Builder
57 std::shared_ptr<BaseChoosingOperation<FITNESS_TYPE>> _choosingOperation;
61 _choosingOperation(typename ChooseRandom<FITNESS_TYPE>::Builder().create())
65 Builder(
const std::shared_ptr<BaseChoosingOperation<FITNESS_TYPE>> &choosingOperation) :
66 _choosingOperation(choosingOperation)
70 Builder& setChoosingOperation(
const std::shared_ptr<BaseChoosingOperation<FITNESS_TYPE> >& choosingOperation)
72 _choosingOperation = choosingOperation;