GENEIAL  0.2=/
 All Classes Pages
SteadyStateAlgorithm.h
1 #pragma once
2 
3 #include <geneial/namespaces.h>
4 #include <geneial/algorithm/BaseGeneticAlgorithm.h>
5 
6 #include <geneial/core/operations/replacement/ReplaceWorstOperation.h>
7 #include <geneial/core/operations/mutation/UniformMutationOperation.h>
8 #include <geneial/core/operations/choosing/ChooseRandom.h>
9 #include <geneial/algorithm/criteria/MaxGenerationCriterion.h>
10 #include <geneial/core/operations/selection/RouletteWheelSelection.h>
11 #include <geneial/core/operations/coupling/RandomCouplingOperation.h>
12 
13 #include <geneial/core/population/builder/MultiValueChromosomeFactory.h>
14 #include <geneial/core/operations/crossover/MultiValueChromosomeNPointCrossover.h>
15 
16 #include <geneial/utility/mixins/EnableMakeShared.h>
17 
18 geneial_private_namespace(geneial)
19 {
20 geneial_private_namespace(algorithm)
21 {
22 using ::geneial::operation::selection::BaseSelectionOperation;
23 using ::geneial::operation::coupling::BaseCouplingOperation;
24 using ::geneial::operation::crossover::BaseCrossoverOperation;
25 using ::geneial::operation::replacement::BaseReplacementOperation;
26 using ::geneial::operation::mutation::BaseMutationOperation;
27 using ::geneial::population::chromosome::BaseChromosomeFactory;
28 using ::geneial::algorithm::stopping_criteria::BaseStoppingCriterion;
29 
30 using ::geneial::population::management::ScopedEvent;
31 using ::geneial::utility::EnableMakeShared;
32 
33 
34 geneial_export_namespace
35 {
36 
37 template<typename FITNESS_TYPE>
38 class SteadyStateAlgorithm: public BaseGeneticAlgorithm<FITNESS_TYPE>,
39  public virtual EnableMakeShared<SteadyStateAlgorithm<FITNESS_TYPE>>
40 {
41 protected:
42  SteadyStateAlgorithm(
43  std::shared_ptr<BaseStoppingCriterion<FITNESS_TYPE>> stoppingCriterion,
44  std::shared_ptr<BaseSelectionOperation<FITNESS_TYPE>> selectionOperation,
45  std::shared_ptr<BaseCouplingOperation<FITNESS_TYPE>> couplingOperation,
46  std::shared_ptr<BaseCrossoverOperation<FITNESS_TYPE>> crossoverOperation,
47  std::shared_ptr<BaseReplacementOperation<FITNESS_TYPE>> replacementOperation,
48  std::shared_ptr<BaseMutationOperation<FITNESS_TYPE>> mutationOperation,
49  std::shared_ptr<BaseChromosomeFactory<FITNESS_TYPE>> chromosomeFactory) :
50  BaseGeneticAlgorithm<FITNESS_TYPE>(stoppingCriterion,
51  selectionOperation,
52  couplingOperation,
53  crossoverOperation,
54  replacementOperation,
55  mutationOperation,
56  chromosomeFactory)
57  {
58  }
59 
60 public:
61  class Builder;
62 
63  virtual void solve() override;
64 
65  virtual ~SteadyStateAlgorithm()
66  {
67  }
68 };
69 
70 template<typename FITNESS_TYPE>
71 class SteadyStateAlgorithm<FITNESS_TYPE>::Builder : public BaseGeneticAlgorithm<FITNESS_TYPE>::Builder{
72 
73 public:
74  virtual std::shared_ptr<BaseStoppingCriterion<FITNESS_TYPE>> getDefaultStoppingCriterion() const;
75 
76  virtual std::shared_ptr<BaseSelectionOperation<FITNESS_TYPE>> getDefaultSelectionOperation() const;
77 
78  virtual std::shared_ptr<BaseCouplingOperation<FITNESS_TYPE>> getDefaultCouplingOperation() const;
79 
80  virtual std::shared_ptr<BaseCrossoverOperation<FITNESS_TYPE>> getDefaultCrossoverOperation() const;
81 
82  virtual std::shared_ptr<BaseReplacementOperation<FITNESS_TYPE>> getDefaultReplacementOperation() const;
83 
84  virtual std::shared_ptr<BaseMutationOperation<FITNESS_TYPE>> getDefaultMutationOperation() const;
85 
86  virtual std::shared_ptr<BaseGeneticAlgorithm<FITNESS_TYPE>> create() override;
87 
88 };
89 
90 
91 
92 } /* geneial_export_namespace */
93 } /* private namespace algorithm */
94 } /* private namespace geneial */
95 
96 
97 #include <geneial/algorithm/SteadyStateAlgorithm.hpp>
98 #include <geneial/algorithm/SteadyStateAlgorithmBuilder.hpp>