protected MutatorResult<Genotype<G>> mutate(
		final Genotype<G> genotype,
		final double p,
		final RandomGenerator random
	) {
		final int P = Probabilities.toInt(p);
		final ISeq<MutatorResult<Chromosome<G>>> result = genotype.stream()
			.map(gt -> random.nextInt() < P
				? mutate(gt, p, random)
				: new MutatorResult<>(gt, 0))
			.collect(ISeq.toISeq());

		return new MutatorResult<>(
			Genotype.of(result.map(MutatorResult::result)),
			result.stream().mapToInt(MutatorResult::mutations).sum()
		);
	}
Mutates the given genotype.

@see #mutate(Chromosome, double, RandomGenerator)
@see #mutate(Gene, RandomGenerator)

@param genotype the genotype to mutate
@param p the mutation probability for the underlying genetic objects
@param random the random engine used for the genotype mutation
@return the mutation result
jenetics/src/main/java/io/jenetics/Mutator.java