diff --git a/ParadisEO-GPU/src/problems/eval/OneMaxIncrEval.h b/ParadisEO-GPU/src/problems/eval/OneMaxIncrEval.h index cae6e4121..9aded1889 100644 --- a/ParadisEO-GPU/src/problems/eval/OneMaxIncrEval.h +++ b/ParadisEO-GPU/src/problems/eval/OneMaxIncrEval.h @@ -31,3 +31,60 @@ ParadisEO WebSite : http://paradiseo.gforge.inria.fr Contact: paradiseo-help@lists.gforge.inria.fr */ + +#ifndef __OneMaxIncrEval_H +#define __OneMaxIncrEval_H + +#include + +/** + * Incremental Evaluation of OneMax + */ + +template +class OneMaxIncrEval: public moCudaEvalFunc { + + public: + + typedef typename Neighbor::EOT EOT; + typedef typename EOT::Fitness Fitness; + + /** + * Constructor + */ + + OneMaxIncrEval() { + } + + /** + * Destructor + */ + + ~OneMaxIncrEval() { + } + + /** + * Incremental evaluation of the solution(function inline can be called from host or device) + * @param _bitVector the solution to evaluate + * @param _fitness the fitness of the current solution + * @param _index the index of solution neighbor + */ + + inline __host__ __device__ Fitness operator() (EOT & _bitVector,Fitness _fitness, unsigned int * _index) { + + Fitness tmp; + + if (_bitVector[_index[0]] == 0) + + tmp= _fitness+1; + + else + + tmp= _fitness-1; + + return tmp; + + } +}; + +#endif