35 void crossover(std::shared_ptr<T> ind1, std::shared_ptr<T> ind2,
40 const double alpha = 0.5;
42 for(
size_t i = 0; i < ind1->genes_m.size(); i++) {
44 double ming = std::min(ind1->genes_m[i], ind2->genes_m[i]);
45 double maxg = std::max(ind1->genes_m[i], ind2->genes_m[i]);
46 double gamma1 = (1 + 2 * alpha) *
47 static_cast<double>(rand() / (RAND_MAX + 1.0)) - alpha;
48 double gamma2 = (1 + 2 * alpha) *
49 static_cast<double>(rand() / (RAND_MAX + 1.0)) - alpha;
50 ind1->genes_m[i] = (1 - gamma1) * ming + gamma1 * maxg;
51 ind2->genes_m[i] = (1 - gamma2) * ming + gamma2 * maxg;