GENEIAL  0.2=/
 All Classes Pages
PermutationChromosomeFactory.h
1 #pragma once
2 
3 #include <geneial/namespaces.h>
4 #include <geneial/core/population/builder/MultiValueChromosomeFactory.h>
5 #include <geneial/core/population/builder/PermutationBuilderSettings.h>
6 #include <geneial/utility/mixins/EnableMakeShared.h>
7 
8 geneial_private_namespace(geneial)
9 {
10 geneial_private_namespace(population)
11 {
12 geneial_private_namespace(chromosome)
13 {
14 using ::geneial::utility::EnableMakeShared;
15 
16 geneial_export_namespace
17 {
18 
19 template<typename VALUE_TYPE, typename FITNESS_TYPE>
20 class PermutationChromosomeFactory: public MultiValueChromosomeFactory<VALUE_TYPE,FITNESS_TYPE>,
21  public virtual EnableMakeShared<PermutationChromosomeFactory<VALUE_TYPE,FITNESS_TYPE>>
22 {
23 private:
24  const PermutationBuilderSettings<VALUE_TYPE, FITNESS_TYPE> &_settings;
25 
26 public:
27 
28  class Builder : public BaseChromosomeFactory<FITNESS_TYPE>::Builder //NOTE (bewo): Do not inherit from MVC builder. (keep it simple)
29  {
30 
31  PermutationBuilderSettings<VALUE_TYPE, FITNESS_TYPE> _settings;
32 
33  public:
34 
35  PermutationBuilderSettings<VALUE_TYPE,FITNESS_TYPE>& getSettings()
36  {
37  return _settings;
38  }
39 
40  Builder(const typename FitnessEvaluator<FITNESS_TYPE>::ptr &fitnessEvaluator): _settings(fitnessEvaluator)
41  {
42  }
43 
44  virtual typename BaseChromosomeFactory<FITNESS_TYPE>::ptr create() override
45  {
46  return std::move(EnableMakeShared<PermutationChromosomeFactory<VALUE_TYPE,FITNESS_TYPE>>::makeShared(_settings));
47  }
48 
49  };
50 
51 
52 protected:
53  explicit PermutationChromosomeFactory(const PermutationBuilderSettings<VALUE_TYPE, FITNESS_TYPE> &settings) :
54  MultiValueChromosomeFactory<VALUE_TYPE,FITNESS_TYPE>(settings), _settings(settings)
55  {
56  }
57 
58  typename BaseChromosome<FITNESS_TYPE>::ptr doCreateChromosome(
59  typename BaseChromosomeFactory<FITNESS_TYPE>::PopulateBehavior populateValues
60  ) override;
61 };
62 
63 } /* geneial_export_namespace */
64 } /* private namespace chromosome */
65 } /* private namespace population */
66 } /* private namespace geneial */
67 
68 #include <geneial/core/population/builder/PermutationChromosomeFactory.hpp>
69