EvolvingObjects
|
00001 00023 //----------------------------------------------------------------------------- 00024 00031 #ifndef _eoRealAtomXover_H 00032 #define _eoRealAtomXover_H 00033 00034 #include <utils/eoRNG.h> 00035 00036 #include <eoOp.h> 00037 00044 class eoDoubleExchange: public eoBinOp<double> 00045 { 00046 public: 00050 eoDoubleExchange() {} 00051 00053 virtual std::string className() const { return "eoDoubleExchange"; } 00054 00058 bool operator()(double& r1, const double& r2) 00059 { 00060 if (eo::rng.flip()) 00061 if (r1 != r2) // if r1 == r2 you must return false 00062 { 00063 r1 = r2; 00064 return true; 00065 } 00066 return false; 00067 } 00068 00069 }; 00070 00077 class eoDoubleIntermediate: public eoBinOp<double> 00078 { 00079 public: 00083 eoDoubleIntermediate() {} 00084 00086 virtual std::string className() const { return "eoDoubleIntermediate"; } 00087 00091 bool operator()(double& r1, const double& r2) 00092 { 00093 double alpha = eo::rng.uniform(); 00094 r1 = alpha * r2 + (1-alpha) * r1; 00095 return true; 00096 } 00097 00098 }; 00099 00100 #endif