Crossover Operators Reference

Crossover operators combine two parents to create offspring.

Module

use fugue_evo::operators::crossover::{
    SbxCrossover, UniformCrossover, OnePointCrossover, TwoPointCrossover
};

SBX (Simulated Binary Crossover)

For real-valued genomes. Simulates single-point crossover behavior.

let crossover = SbxCrossover::new(eta);
ParameterTypeRangeDescription
etaf641-100+Distribution index

Distribution index effects:

  • Low eta (1-5): Large spread, more exploration
  • Medium eta (15-25): Balanced
  • High eta (50+): Children near parents

Example:

let crossover = SbxCrossover::new(20.0);

Uniform Crossover

Each gene from random parent with 50% probability.

let crossover = UniformCrossover::new();
// or with custom probability
let crossover = UniformCrossover::with_probability(0.6);

Works with: RealVector, BitString

One-Point Crossover

Single crossover point, swap tails.

let crossover = OnePointCrossover::new();
Parent 1: A A A | B B B
Parent 2: 1 1 1 | 2 2 2
                ↓
Child 1:  A A A | 2 2 2
Child 2:  1 1 1 | B B B

Works with: RealVector, BitString

Two-Point Crossover

Two crossover points, swap middle segment.

let crossover = TwoPointCrossover::new();
Parent 1: A A | B B B | C C
Parent 2: 1 1 | 2 2 2 | 3 3
              ↓
Child 1:  A A | 2 2 2 | C C
Child 2:  1 1 | B B B | 3 3

Order Crossover (OX)

For permutations. Preserves relative ordering.

let crossover = OrderCrossover::new();

Preserves: Relative order of elements not in copied segment.

PMX (Partially Mapped Crossover)

For permutations. Preserves absolute positions.

let crossover = PmxCrossover::new();

Preserves: Absolute positions where possible.

Crossover Result

All crossover operators return:

pub struct CrossoverResult<G> {
    child1: Option<G>,
    child2: Option<G>,
}

impl<G> CrossoverResult<G> {
    pub fn genome(self) -> Option<(G, G)>;
    pub fn first(self) -> Option<G>;
    pub fn second(self) -> Option<G>;
}

Usage

SimpleGABuilder::<RealVector, f64, _, _, _, _, _>::new()
    .crossover(SbxCrossover::new(20.0))
    // ...

Comparison

OperatorGenome TypeExplorationPreserves
SBXRealVectorControllableValue ranges
UniformAnyHighNothing specific
One-PointSequenceMediumSegments
Two-PointSequenceMediumSegments
OXPermutationMediumRelative order
PMXPermutationMediumPositions

See Also