GENEIAL  0.2=/
 All Classes Pages
BaseCrossoverOperation.h
1 #pragma once
2 
3 #include <geneial/namespaces.h>
4 #include <geneial/core/population/chromosome/BaseChromosome.h>
5 #include <geneial/core/population/Population.h>
6 #include <geneial/utility/mixins/Buildable.h>
7 
8 #include <memory>
9 
10 geneial_private_namespace(geneial)
11 {
12 geneial_private_namespace(operation)
13 {
14 geneial_private_namespace(crossover)
15 {
16 using ::geneial::population::Population;
17 using ::geneial::utility::Buildable;
18 
19 geneial_export_namespace
20 {
21 
22 template<typename FITNESS_TYPE>
23 class BaseCrossoverOperation : public Buildable<BaseCrossoverOperation<FITNESS_TYPE>>
24 {
25 
26 protected:
27 
28  BaseCrossoverOperation()
29  {
30  }
31 
32 public:
33 
34  using crossover_result_set = typename Population<FITNESS_TYPE>::chromosome_container ;
35 
36  virtual ~BaseCrossoverOperation()
37  {
38  }
39 
40  virtual crossover_result_set
41  doCrossover(const typename BaseChromosome<FITNESS_TYPE>::const_ptr &mommy, const typename BaseChromosome<FITNESS_TYPE>::const_ptr &daddy) const = 0;
42 
43  //Is the order of mommy for and daddy for doCrossover() relevant?, true if yes.
44  //TODO(bewo): Think about encoding this property via inheritance?
45  virtual bool isSymmetric() const = 0;
46 
47  class Builder : public Buildable<BaseCrossoverOperation<FITNESS_TYPE>>::Builder
48  {
49  };
50 
51 };
52 
53 } /* geneial_export_namespace */
54 } /* private namespace crossover */
55 } /* private namespace operation */
56 } /* private namespace geneial */
57