@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 var random = RandomRegistry.random();
		final double p = pow(_probability, 1.0/3.0);
		final int P = Probabilities.toInt(p);

		final Seq<MutatorResult<Phenotype<G, C>>> result = population
			.map(pt -> random.nextInt() < P
				? mutate(pt, generation, p, random)
				: new MutatorResult<>(pt, 0));

		return new AltererResult<>(
			result.map(MutatorResult::result).asISeq(),
			result.stream().mapToInt(MutatorResult::mutations).sum()
		);
	}
Concrete implementation of the alter method. It uses the following
mutation methods: {@link #mutate(Phenotype, long, double, RandomGenerator)},
{@link #mutate(Genotype, double, RandomGenerator)},
{@link #mutate(Chromosome, double, RandomGenerator)},
{@link #mutate(Gene, RandomGenerator)},
in this specific order.

@see #mutate(Phenotype, long, double, RandomGenerator)
@see #mutate(Genotype, double, RandomGenerator)
@see #mutate(Chromosome, double, RandomGenerator)
@see #mutate(Gene, RandomGenerator)
jenetics/src/main/java/io/jenetics/Mutator.java