public static void evolve(RealVariable v,double distributionIndex){
  double u=PRNG.nextDouble();
  double x=v.getValue();
  double lb=v.getLowerBound();
  double ub=v.getUpperBound();
  double dx=ub - lb;
  double delta;
  if (u < 0.5) {
    double bl=(x - lb) / dx;
    double b=2 * u + (1 - 2 * u) * (Math.pow(1 - bl,(distributionIndex + 1)));
    delta=Math.pow(b,(1.0 / (distributionIndex + 1))) - 1.0;
  }
 else {
    double bu=(ub - x) / dx;
    double b=2 * (1 - u) + 2 * (u - 0.5) * (Math.pow(1 - bu,(distributionIndex + 1)));
    delta=1.0 - Math.pow(b,(1.0 / (distributionIndex + 1)));
  }
  x=x + delta * dx;
  if (x < lb) {
    x=lb;
  }
 else   if (x > ub) {
    x=ub;
  }
  v.setValue(x);
}

public static void evolve ( RealVariable v , double distributionIndex ) { double u = PRNG . nextDouble ( ) ; double x = v . getValue ( ) ; double lb = v . getLowerBound ( ) ; double ub = v . getUpperBound ( ) ; double dx = ub - lb ; double delta ; if ( u < 0.5 ) { double bl = ( x - lb ) / dx ; double b = 2 * u + ( 1 - 2 * u ) * ( Math . pow ( 1 - bl , ( distributionIndex + 1 ) ) ) ; delta = Math . pow ( b , ( 1.0 / ( distributionIndex + 1 ) ) ) - 1.0 ; } else { double bu = ( ub - x ) / dx ; double b = 2 * ( 1 - u ) + 2 * ( u - 0.5 ) * ( Math . pow ( 1 - bu , ( distributionIndex + 1 ) ) ) ; delta = 1.0 - Math . pow ( b , ( 1.0 / ( distributionIndex + 1 ) ) ) ; } x = x + delta * dx ; if ( x < lb ) { x = lb ; } else if ( x > ub ) { x = ub ; } v . setValue ( x ) ; }
mutates the specified variable using polynomial mutation .
