00001 00020 #ifndef _CROSS_H 00021 00022 #define _CROSS_H 1 00023 00024 #include "domain.h" 00025 #include "individual.h" 00026 #include "random.h" 00027 #include "signal.h" 00028 00029 #include "icross.h" 00030 00031 namespace realea { 00038 class CrossBLX : public ICrossBinary { 00039 public: 00045 CrossBLX(double alpha); 00046 00050 virtual ~CrossBLX(void); 00051 00052 void reset(void) {} 00056 virtual void operator()(const tChromosomeReal &mom, tFitness fit_mom, const tChromosomeReal &dad, tFitness fit_dad, tChromosomeReal &child); 00057 00058 00059 private: 00060 double m_alpha; 00061 }; 00062 00071 class CrossPBLX : public ICrossBinary { 00072 public: 00079 CrossPBLX(double alpha); 00080 00084 virtual ~CrossPBLX(void); 00085 00086 void reset(void) {} 00090 virtual void operator()(const tChromosomeReal &mom, tFitness fit_mom, const tChromosomeReal &dad, tFitness fit_dad, tChromosomeReal &child); 00091 00092 private: 00093 double m_alpha; 00094 double m_dim_ini; 00095 double m_dim_fin; 00096 }; 00097 00098 00099 namespace internal { 00105 class CrossBinary : public IReset { 00106 public: 00107 CrossBinary(ICrossBinaryPtr cross); 00108 void operator()(tIndividualReal *mom, tIndividualReal *dad, tChromosomeReal &child); 00109 virtual void operator()(const tChromosomeReal &mom, tFitness fit_mom, const tChromosomeReal &dad, tFitness fit_dad, tChromosomeReal &child); 00110 virtual ~CrossBinary(void); 00111 private: 00112 ICrossBinaryPtr m_cross; 00113 }; 00114 00115 typedef CrossBinary* CrossBinaryPtr; 00116 } 00117 00118 } 00119 00120 #endif