GENEIAL  0.2=/
 All Classes Pages
FitnessValueDeltaCriterion.h
1 #pragma once
2 
3 #include <geneial/algorithm/criteria/BaseStoppingCriterion.h>
4 
5 geneial_private_namespace(geneial)
6 {
7 geneial_private_namespace(algorithm)
8 {
9 geneial_private_namespace(stopping_criteria)
10 {
11 using ::geneial::population::management::BaseManager;
12 
13 geneial_export_namespace
14 {
15 
16 template<typename FITNESS_TYPE>
17 class FitnessValueDeltaCriterion: public BaseStoppingCriterion<FITNESS_TYPE>
18 {
19 public:
20  FitnessValueDeltaCriterion(const FITNESS_TYPE desiredFitness, const FITNESS_TYPE delta) :
21  _desiredFitness(desiredFitness), _delta(delta)
22  {
23  assert(_delta <= _desiredFitness);
24  }
25 
26  virtual ~FitnessValueDeltaCriterion()
27  {
28  }
29 
30  virtual bool wasReached(BaseManager<FITNESS_TYPE> &manager)
31  {
32  //TODO (bewo) git rid of infty ) (true delta)
33  return !(manager.getHighestFitness() >= _desiredFitness - _delta);
34  }
35 
36  virtual void print(std::ostream& os) const
37  {
38  os << "FitnessValueDelta (" << _desiredFitness << ")";
39  }
40 
41 private:
42  const FITNESS_TYPE _desiredFitness;
43  const FITNESS_TYPE _delta;
44 };
45 
46 } /* geneial_export_namespace */
47 } /* private namespace stopping_criteria */
48 } /* private namespace algorithm */
49 } /* private namespace geneial */