Finished Roulette Selection.
[genetic.git] / src / fitness / fitness.h
1 #ifndef __FITNESS_FITNESS_H
2 #define __FITNESS_FITNESS_H
3
4 #include "../chromosome.h"
5
6 namespace genetic {
7     /**
8      * Base Fitness template class. It should be a base class for any custom
9      * fitness functions.
10      */
11     template < typename _Chromosome, typename _Value = double >
12     class Fitness {
13         template<typename> friend class Selection ;
14     public:
15         typedef typename _Chromosome::GeneType GeneType;
16         typedef _Value ValueType;
17     protected:
18         _Chromosome chromosome;
19
20         /*
21          * Some calculations here...
22          */
23         virtual _Value do_calculate() = 0;
24
25     public:
26         Fitness() {}
27
28         Fitness(_Chromosome& _chromosome)
29             : chromosome(_chromosome.get()) {
30         }
31
32         _Value calculate() {
33             return this->do_calculate();
34         }
35     };
36 }
37
38 #endif /* __FITNESS_FITNESS_H */