GENEIAL  0.2=/
 All Classes Pages
RandomCouplingOperation.h
1 #pragma once
2 
3 #include <geneial/namespaces.h>
4 #include <geneial/core/operations/coupling/BaseCouplingOperation.h>
5 #include <geneial/utility/mixins/EnableMakeShared.h>
6 
7 geneial_private_namespace(geneial)
8 {
9 geneial_private_namespace(operation)
10 {
11 geneial_private_namespace(coupling)
12 {
13 using ::geneial::population::Population;
14 using ::geneial::operation::crossover::BaseCrossoverOperation;
15 using ::geneial::operation::selection::BaseSelectionOperation;
16 using ::geneial::population::management::BaseManager;
17 using ::geneial::utility::EnableMakeShared;
18 
19 geneial_export_namespace
20 {
21 
25 template<typename FITNESS_TYPE>
26 class RandomCouplingOperation: public BaseCouplingOperation<FITNESS_TYPE>,
27  public virtual EnableMakeShared<RandomCouplingOperation<FITNESS_TYPE>>
28 {
29 protected:
30  explicit RandomCouplingOperation(const std::shared_ptr<const CouplingSettings> &settings) :
31  BaseCouplingOperation<FITNESS_TYPE>(settings)
32  {
33  }
34 
35 public:
36  virtual ~RandomCouplingOperation()
37  {
38  }
39 
40  virtual typename BaseCouplingOperation<FITNESS_TYPE>::offspring_result_set doCopulate(
41  const typename BaseSelectionOperation<FITNESS_TYPE>::selection_result_set &mating_pool,
42  const BaseCrossoverOperation<FITNESS_TYPE> &crossoverOperation, BaseManager<FITNESS_TYPE> &manager) override;
43 
44  class Builder : public BaseCouplingOperation<FITNESS_TYPE>::Builder
45  {
46  public:
47  virtual typename BaseCouplingOperation<FITNESS_TYPE>::ptr create() override
48  {
49  return RandomCouplingOperation::makeShared(this->_settings);
50  }
51  };
52 
53 };
54 
55 } /* geneial_export_namespace */
56 } /* private namespace coupling */
57 } /* private namespace operation */
58 } /* private namespace geneial */
59 
60 #include <geneial/core/operations/coupling/RandomCouplingOperation.hpp>
61