EDA/UMDA Reference

Estimation of Distribution Algorithms using probabilistic models.

Module

use fugue_evo::algorithms::eda::{Umda, UmdaBuilder, UmdaConfig};

Overview

EDAs replace crossover/mutation with probabilistic model building:

  1. Select promising individuals
  2. Build probabilistic model from selected
  3. Sample new individuals from model
  4. Repeat

UMDA (Univariate Marginal Distribution Algorithm) assumes variables are independent.

Builder API

Required Configuration

MethodTypeDescription
bounds(bounds)MultiBoundsSearch space bounds
fitness(fit)impl FitnessFitness function

Optional Configuration

MethodTypeDefaultDescription
population_size(n)usize100Population size
selection_size(n)usize50Individuals for model building
max_generations(n)usize100Max generations

Usage

Basic Example

use fugue_evo::prelude::*;

let result = UmdaBuilder::<RealVector, f64, _>::new()
    .population_size(100)
    .selection_size(30)  // Top 30% for model
    .bounds(MultiBounds::symmetric(5.12, 10))
    .fitness(Sphere::new(10))
    .max_generations(200)
    .build()?
    .run(&mut rng)?;

Algorithm Details

Model Building (Univariate)

For continuous variables:

μᵢ = mean of selected individuals' gene i
σᵢ = std dev of selected individuals' gene i

Sampling

New individuals sampled from:

xᵢ ~ N(μᵢ, σᵢ²)

When to Use

Good for:

  • Separable problems (variables independent)
  • Problems where crossover is disruptive
  • Understanding variable distributions

Not good for:

  • Non-separable problems (use CMA-ES instead)
  • Problems with variable interactions

Comparison with GA

AspectGAEDA (UMDA)
VariationCrossover + MutationModel sampling
InteractionsCrossover preserves building blocksAssumes independence
ParametersCrossover rate, mutation rateSelection ratio

See Also