GENEIAL  0.2=/
 All Classes Pages
BaseStoppingCriterion.h
1 #pragma once
2 
3 #include <geneial/namespaces.h>
4 #include <geneial/core/population/management/BaseManager.h>
5 
6 
7 geneial_private_namespace(geneial)
8 {
9 geneial_private_namespace(algorithm)
10 {
11 geneial_private_namespace(stopping_criteria)
12 {
13 using ::geneial::utility::Printable;
14 using ::geneial::population::management::BaseManager;
15 
16 geneial_export_namespace
17 {
18 
19 
20 template<typename FITNESS_TYPE>
21 class BaseStoppingCriterion: public Printable, public std::enable_shared_from_this<BaseStoppingCriterion<FITNESS_TYPE> >
22 {
23 public:
24 
25  using ptr = std::shared_ptr<BaseStoppingCriterion<FITNESS_TYPE>>;
26  using const_ptr =std::shared_ptr<const BaseStoppingCriterion<FITNESS_TYPE>>;
27 
28  virtual ~BaseStoppingCriterion()
29  {
30  }
31 
32  virtual void print(std::ostream& os) const = 0;
33 
34  //Should return true, if criterion was met. Can use manager to compute population information.
35  //NOTE(bewo): This function must be free of any side-effects and might be called multiple times for the same generation!
36  virtual bool wasReached(BaseManager<FITNESS_TYPE> &manager) = 0;
37 };
38 
39 } /* geneial_export_namespace */
40 } /* private namespace stopping_criteria */
41 } /* private namespace algorithm */
42 } /* private namespace geneial */