Finished Roulette Selection.
[genetic.git] / src / fitness / fitness.h
diff --git a/src/fitness/fitness.h b/src/fitness/fitness.h
new file mode 100644 (file)
index 0000000..14b6487
--- /dev/null
@@ -0,0 +1,38 @@
+#ifndef __FITNESS_FITNESS_H
+#define __FITNESS_FITNESS_H
+
+#include "../chromosome.h"
+
+namespace genetic {
+    /**
+     * Base Fitness template class. It should be a base class for any custom
+     * fitness functions.
+     */
+    template < typename _Chromosome, typename _Value = double >
+    class Fitness {
+        template<typename> friend class Selection ;
+    public:
+        typedef typename _Chromosome::GeneType GeneType;
+        typedef _Value ValueType;
+    protected:
+        _Chromosome chromosome;
+
+        /*
+         * Some calculations here...
+         */
+        virtual _Value do_calculate() = 0;
+
+    public:
+        Fitness() {}
+
+        Fitness(_Chromosome& _chromosome)
+            : chromosome(_chromosome.get()) {
+        }
+
+        _Value calculate() {
+            return this->do_calculate();
+        }
+    };
+}
+
+#endif /* __FITNESS_FITNESS_H */