GENEIAL  0.2=/
 All Classes Pages
SimpleCouplingOperation.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 
26 template<typename FITNESS_TYPE>
27 class SimpleCouplingOperation: public BaseCouplingOperation<FITNESS_TYPE>,
28  public virtual EnableMakeShared<SimpleCouplingOperation<FITNESS_TYPE>>
29 {
30 protected:
31  explicit SimpleCouplingOperation( const std::shared_ptr<const CouplingSettings> &settings) :
32  BaseCouplingOperation<FITNESS_TYPE>(settings)
33  {
34  }
35 
36 public:
37  virtual ~SimpleCouplingOperation()
38  {
39  }
40 
41  virtual typename BaseCouplingOperation<FITNESS_TYPE>::offspring_result_set doCopulate(
42  const typename BaseSelectionOperation<FITNESS_TYPE>::selection_result_set &mating_pool,
43  const BaseCrossoverOperation<FITNESS_TYPE> &crossoverOperation, BaseManager<FITNESS_TYPE> &manager) override;
44 
45  class Builder:public BaseCouplingOperation<FITNESS_TYPE>::Builder
46  {
47  public:
48  virtual typename BaseCouplingOperation<FITNESS_TYPE>::ptr create() override
49  {
50  return SimpleCouplingOperation::makeShared(this->_settings);
51  }
52  };
53 
54 };
55 
56 } /* geneial_export_namespace */
57 } /* private namespace coupling */
58 } /* private namespace operation */
59 } /* private namespace geneial */
60 
61 #include <geneial/core/operations/coupling/SimpleCouplingOperation.hpp>
62