GENEIAL  0.2=/
 All Classes Pages
ReplaceRandomOperation.h
1 #pragma once
2 
3 #include <geneial/core/operations/replacement/BaseReplacementOperation.h>
4 #include <geneial/utility/mixins/EnableMakeShared.h>
5 
6 
7 geneial_private_namespace(geneial)
8 {
9 geneial_private_namespace(operation)
10 {
11 geneial_private_namespace(replacement)
12 {
13 using ::geneial::operation::coupling::BaseCouplingOperation;
14 using ::geneial::operation::selection::BaseSelectionOperation;
15 using ::geneial::utility::EnableMakeShared;
16 
17 geneial_export_namespace
18 {
19 
23 template<typename FITNESS_TYPE>
24 class ReplaceRandomOperation: public BaseReplacementOperation<FITNESS_TYPE>,
25  public EnableMakeShared<ReplaceRandomOperation<FITNESS_TYPE>>
26 {
27 private:
28  unsigned int getAmountToReplace(const Population<FITNESS_TYPE> &population,
29  const typename coupling::BaseCouplingOperation<FITNESS_TYPE>::offspring_result_set &offspring) const;
30 
31 protected:
32  explicit ReplaceRandomOperation(const std::shared_ptr<const BaseReplacementSettings> &settings) :
33  BaseReplacementOperation<FITNESS_TYPE>(settings)
34  {
35  }
36 
37 public:
38 
39  virtual ~ReplaceRandomOperation()
40  {
41  }
42 
43  void doReplace(Population<FITNESS_TYPE> &population,
44  const typename BaseSelectionOperation<FITNESS_TYPE>::selection_result_set &parents,
45  typename BaseCouplingOperation<FITNESS_TYPE>::offspring_result_set &offspring,
46  BaseManager<FITNESS_TYPE> &manager) const override;
47 
48  class Builder : public BaseReplacementOperation<FITNESS_TYPE>::Builder
49  {
50  public:
51  Builder():BaseReplacementOperation<FITNESS_TYPE>::Builder()
52  {
53  }
54  typename BaseReplacementOperation<FITNESS_TYPE>::ptr create() override
55  {
56  return std::move(
57  ReplaceRandomOperation<FITNESS_TYPE>::makeShared(this->_settings)
58  );
59  }
60  };
61 };
62 
63 } /* geneial_export_namespace */
64 } /* private namespace replacement */
65 } /* private namespace operation */
66 } /* private namespace geneial */
67 
68 #include <geneial/core/operations/replacement/ReplaceRandomOperation.hpp>
69