Mutation Operators Reference

Mutation operators add random variation to genomes.

Module

use fugue_evo::operators::mutation::{
    PolynomialMutation, GaussianMutation, BitFlipMutation
};

Polynomial Mutation

For real-valued genomes. Bounded perturbations.

let mutation = PolynomialMutation::new(eta);
let mutation = PolynomialMutation::new(eta).with_probability(0.1);
ParameterTypeRangeDescription
etaf641-100+Distribution index
probabilityf640-1Per-gene mutation probability

Distribution index effects:

  • Low eta (1-5): Large mutations
  • Medium eta (15-25): Balanced
  • High eta (50+): Small mutations

Default probability: 1/n (one gene on average)

Gaussian Mutation

Adds Gaussian noise to genes.

let mutation = GaussianMutation::new(sigma);
let mutation = GaussianMutation::new(sigma).with_probability(0.1);
ParameterTypeDescription
sigmaf64Standard deviation of noise
probabilityf64Per-gene mutation probability

Note: May violate bounds. Use with BoundedMutationOperator or clamp manually.

Bit-Flip Mutation

For binary genomes. Flips each bit with probability.

let mutation = BitFlipMutation::new(probability);
ParameterTypeDescription
probabilityf64Per-bit flip probability

Typical values: 0.01-0.05 (1-5% per bit)

Swap Mutation

For permutations. Swaps two random positions.

let mutation = SwapMutation::new(probability);

Inversion Mutation

For permutations. Reverses a random segment.

let mutation = InversionMutation::new(probability);
Before: [1, 2, 3, 4, 5, 6]
              ↓ reverse [2,5]
After:  [1, 5, 4, 3, 2, 6]

Insertion Mutation

For permutations. Moves element to new position.

let mutation = InsertionMutation::new(probability);

Mutation Probability Guidelines

GenomeOperatorTypical Probability
RealVectorPolynomial1/n or 0.1
RealVectorGaussian1/n or 0.1
BitStringBitFlip0.01-0.05
PermutationSwap0.1-0.3
PermutationInversion0.1-0.3

Usage

SimpleGABuilder::<RealVector, f64, _, _, _, _, _>::new()
    .mutation(PolynomialMutation::new(20.0).with_probability(0.1))
    // ...

Bounded Mutation

For mutations respecting bounds:

// Polynomial automatically respects bounds when used with SimpleGA

// Manual bounded mutation
mutation.mutate_bounded(&mut genome, &bounds, &mut rng);

See Also