26 #include "boost/smart_ptr.hpp"
32 void crossover(boost::shared_ptr<T> ind1, boost::shared_ptr<T> ind2,
35 double nu_c = args->getArg<
double>(
"simbin-crossover-nu", 2.0,
false);
37 for(std::size_t i = 0; i < ind1->genes_m.size(); i++) {
39 double ui = (double) rand() / (RAND_MAX + 1.0);
42 beta_qi =
pow(2 * ui, 1.0/(nu_c + 1.0));
44 beta_qi =
pow(1.0/(2 * (1.0 - ui)), 1.0/(nu_c + 1.0));
47 double ming =
std::min(ind1->genes_m[i], ind2->genes_m[i]);
48 double maxg =
std::max(ind1->genes_m[i], ind2->genes_m[i]);
50 ind1->genes_m[i] = 0.5 * ((1 + beta_qi) * ming + (1 - beta_qi) * maxg);
51 ind2->genes_m[i] = 0.5 * ((1 - beta_qi) * ming + (1 + beta_qi) * maxg);
Tps< T > pow(const Tps< T > &x, int y)
Integer power.
T::PETE_Expr_t::PETE_Return_t max(const PETE_Expr< T > &expr, NDIndex< D > &loc)
T::PETE_Expr_t::PETE_Return_t min(const PETE_Expr< T > &expr, NDIndex< D > &loc)
boost::shared_ptr< CmdArguments > CmdArguments_t
void crossover(boost::shared_ptr< T > ind1, boost::shared_ptr< T > ind2, CmdArguments_t args)