35 for(uint i = 0; i < p1->realValue.size(); i++) {
36 double p1x = p1->realValue[i];
37 double p2x = p2->realValue[i];
40 double low = p1x, high = p2x;
47 if(fabs(high - low) < 1.e-12) {
48 ch->realValue[i] = (high + low) / 2;
53 double min = low - p1->getLBound();
54 if((p1->getUBound() - high) < min)
55 min = p1->getUBound() - high;
58 double beta = 1 + 2 * min / (high - low);
59 double alpha = 2 - 1 / pow(beta, 1. + ni);
61 double u = state_->getRandomizer()->getRandomDouble();
67 if (u <= (1. / alpha)) {
68 beta_dash = pow(alpha * u, 1.0 / (ni + 1.0));
72 beta_dash = pow(1. / (2. - alpha * u), 1.0 / (ni + 1.0));
76 switch (state_->getRandomizer()->getRandomInteger(0, 1)) {
77 case 0: ch->realValue[i] = ((p1->realValue[i] + p2->realValue[i])/2.0) - beta_dash * 0.5 * fabs(p1->realValue[i] - p2->realValue[i]);
79 case 1: ch->realValue[i] = ((p1->realValue[i] + p2->realValue[i])/2.0) + beta_dash * 0.5 * fabs(p1->realValue[i] - p2->realValue[i]);