EvolvingObjects
eoRealAtomXover.h
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
 All Classes Namespaces Files Functions Variables Typedefs Friends