00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef _eoDistance_H
00027 #define _eoDistance_H
00028
00029 #include <eoFunctor.h>
00034 template< class EOT >
00035 class eoDistance : public eoBF<const EOT &, const EOT &, double>
00036 {};
00037
00038
00043 template< class EOT >
00044 class eoQuadDistance : public eoDistance<EOT>
00045 {
00046 public:
00047 double operator()(const EOT & _v1, const EOT & _v2)
00048 {
00049 double sum=0.0;
00050 for (unsigned i=0; i<_v1.size(); i++)
00051 {
00052 double r = static_cast<double> (_v1[i]) - static_cast<double> (_v2[i]);
00053 sum += r*r;
00054 }
00055 return sqrt(sum);
00056 }
00057 };
00058
00065 template< class EOT >
00066 class eoHammingDistance : public eoDistance<EOT>
00067 {
00068 public:
00069 double operator()(const EOT & _v1, const EOT & _v2)
00070 {
00071 double sum=0.0;
00072 for (unsigned i=0; i<_v1.size(); i++)
00073 {
00074 double r = static_cast<double> (_v1[i]) - static_cast<double> (_v2[i]);
00075 sum += fabs(r);
00076 }
00077 return sum;
00078 }
00079 };
00080
00081
00082
00083
00084
00085 template< class EOT >
00086 class eoFitnessDistance : public eoDistance<EOT>
00087 {
00088 public:
00089 double operator()(const EOT & _v1, const EOT & _v2)
00090 {
00091 double d = _v1.fitness() - _v2.fitness();
00092 return sqrt(d*d);
00093 }
00094 };
00095
00096
00097
00098 #endif