GENEIAL  0.2=/
 All Classes Pages
FitnessEvaluator.h
1 #pragma once
2 
3 #include <geneial/core/population/chromosome/BaseChromosome.h>
4 
5 #include <memory>
6 
7 //Forward Declaration for BaseChromosome (due to circular inclusion)
8 geneial_private_namespace(geneial)
9 {
10 geneial_private_namespace(population)
11 {
12 geneial_private_namespace(chromosome)
13 {
14 geneial_export_namespace
15 {
16 template<typename FITNESS_TYPE>
17 class BaseChromosome;
18 }
19 }
20 }
21 }
22 
23 geneial_private_namespace(geneial)
24 {
25 using ::geneial::population::chromosome::BaseChromosome;
26 
27 geneial_export_namespace
28 {
29 
30 //TODO (bewo) Allow a lambda function as fitness evaluator?
31 
32 template<typename FITNESS_TYPE>
33 class FitnessEvaluator : public std::enable_shared_from_this<FitnessEvaluator<FITNESS_TYPE>>
34 {
35 public:
36  using ptr = std::shared_ptr<FitnessEvaluator<FITNESS_TYPE>>;
37 
38  using const_ptr = std::shared_ptr<const FitnessEvaluator<FITNESS_TYPE>>;
39 
40  ptr getPtr()
41  {
42  return this->shared_from_this();
43  }
44 
45  const_ptr getConstPtr()
46  {
47  return this->shared_from_this();
48  }
49 
50 
51  FitnessEvaluator()
52  {
53  }
54 
55  virtual ~FitnessEvaluator()
56  {
57  }
58 
59  virtual std::unique_ptr<Fitness<FITNESS_TYPE>> evaluate(
60  const BaseChromosome<FITNESS_TYPE>& chromosome) const = 0;
61 };
62 
63 } /* geneial_export_namespace*/
64 } /* private namespace geneial */