code: @Override
  	public AltererResult<G, C> alter(
  		final Seq<Phenotype<G, C>> population,
  		final long generation
  	) {
  		assert population != null : "Not null is guaranteed from base class.";
  
  		final Random random = RandomRegistry.getRandom();
  		final double p = pow(_probability, 1.0/3.0);
  		final int P = probability.toInt(p);
  
  		final Seq<MutatorResult<Phenotype<G, C>>> result = population
  			.map(pt -> random.nextInt() < P
  				? mutate(pt, generation, p, random)
  				: MutatorResult.of(pt));
  
  		return AltererResult.of(
  			result.map(MutatorResult::getResult).asISeq(),
  			result.stream().mapToInt(MutatorResult::getMutations).sum()
  		);
  	}
docs: Concrete implementation of the alter method. It uses the following
  mutation methods: {@link #mutate(Phenotype, long, double, Random)},
  {@link #mutate(Genotype, double, Random)},
  {@link #mutate(Chromosome, double, Random)}, {@link #mutate(Gene, Random)},
  in this specific order.
  
  @see #mutate(Phenotype, long, double, Random)
  @see #mutate(Genotype, double, Random)
  @see #mutate(Chromosome, double, Random)
  @see #mutate(Gene, Random)