GENEIAL  0.2=/
 All Classes Pages
BestChromosomeObserver.h
1 #pragma once
2 
3 #include <geneial/algorithm/observer/AlgorithmObserver.h>
4 
5 #include <set>
6 
7 geneial_private_namespace(geneial)
8 {
9 geneial_private_namespace(algorithm)
10 {
11 using ::geneial::population::management::BaseManager;
12 
13 geneial_export_namespace
14 {
15 
16 
17 template<typename FITNESS_TYPE>
18 class BestChromosomeObserver: public AlgorithmObserver<FITNESS_TYPE>
19 {
20 public:
21  BestChromosomeObserver() :
22  _foundBest(false)
23  {
24  this->addSubscribedEvent(AlgorithmObserver<FITNESS_TYPE>::AFTER_GENERATION);
25  }
26  virtual ~BestChromosomeObserver()
27  {
28  }
29 
30  virtual void updateAfterGeneration(BaseManager<FITNESS_TYPE> &manager) override
31  {
32  const FITNESS_TYPE lastBest = manager.getHighestFitness();
33  if (lastBest > _best || !_foundBest)
34  {
35  _best = lastBest;
36  _foundBest = true;
37  updateNewBestChromosome(manager);
38 
39  }
40  }
41 
42  virtual void updateNewBestChromosome(BaseManager<FITNESS_TYPE> &manager)
43  {
44  }
45 
46 private:
47  FITNESS_TYPE _best;
48 
49  bool _foundBest;
50 };
51 
52 
53 } /* geneial_export_namespace */
54 } /* private namespace algorithm */
55 } /* private namespace geneial */
56