Added LinearRankSelection.
[genetic.git] / src / fitness / fitness.h
index 14b6487f18b8e83708e04c15286988a33ee974ab..a9750341f32271db145a514c42b5d8691a3ae931 100644 (file)
@@ -1,7 +1,10 @@
 #ifndef __FITNESS_FITNESS_H
 #define __FITNESS_FITNESS_H
 
-#include "../chromosome.h"
+#include <map>
+#include <string>
+
+#include "chromosome.h"
 
 namespace genetic {
     /**
@@ -10,28 +13,67 @@ namespace genetic {
      */
     template < typename _Chromosome, typename _Value = double >
     class Fitness {
-        template<typename> friend class Selection ;
+        template<typename> friend class Selection;
     public:
+        /**
+         * Type representing Chromosome Gene
+         */
         typedef typename _Chromosome::GeneType GeneType;
+
+        /**
+         * Value type returned by the Fitness function
+         */
         typedef _Value ValueType;
     protected:
+        /**
+         * Chromosome on which calculations are made
+         */
         _Chromosome chromosome;
 
-        /*
-         * Some calculations here...
+        /**
+         * Calculations should be done here...
+         *
+         * @return Fitness value of the current Chromosome
          */
         virtual _Value do_calculate() = 0;
 
     public:
+        /**
+         * Class constructor
+         */
         Fitness() {}
 
+        /**
+         * Copy constructor
+         */
         Fitness(_Chromosome& _chromosome)
-            : chromosome(_chromosome.get()) {
+            : chromosome(_chromosome) {
         }
 
+        /**
+         * Invokes calculations
+         *
+         * @return Fitness value of the current Chromosome
+         */
         _Value calculate() {
             return this->do_calculate();
         }
+
+        /**
+         * Method used to pass additional arguments needed by the function to
+         * run correctly.
+         */
+        virtual void parseArguments(std::map<string, string>) { }
+
+        /**
+         * Method used to get additional arguments needed by the function to
+         * run correctly
+         *
+         * @return map containing additional arguments, empty if do not use any
+         */
+        virtual std::map<string, string> getArguments() {
+            return std::map<string, string>();
+        }
     };
 }