Gaussian Mutation
Gaussian mutation: the default real-coded mutation operator. Each coordinate i is, with probability perGeneRate, perturbed by adding a zero-mean normal increment whose standard deviation is sigmaFactor * range[i], where range[i] is the width of input i's defined range. Coordinates with a non-positive range (no room to move) are left unchanged. The returned point is a new array; the supplied point is not modified. The result is not clamped or rounded; the solver does that via ksl.simopt.problem.ProblemDefinition.toInputMap.
This operator scales the perturbation per coordinate using the problem's input ranges, so it needs a ProblemDefinition at construction. The per-coordinate scaling is what makes the operator self-sufficient and independently testable.
This operator's per-gene gating compounds with the solver's per-individual mutationRate: the solver applies this operator to an offspring only with probability mutationRate, and the operator then mutates each coordinate only with probability perGeneRate. The effective per-gene, per-generation mutation probability is therefore about mutationRate * perGeneRate — roughly 1% at the defaults (0.1 each), not 10%.
Parameters
the problem definition providing per-input ranges
the probability that an individual coordinate is mutated. Must be in 0,1. The default is defaultPerGeneRate.
the fraction of an input's range used as the perturbation standard deviation. Must be greater than 0. The default is defaultSigmaFactor.