Estimation of Distribution Algorithms using probabilistic models.
use fugue_evo::algorithms::eda::{Umda, UmdaBuilder, UmdaConfig};EDAs replace crossover/mutation with probabilistic model building:
- Select promising individuals
- Build probabilistic model from selected
- Sample new individuals from model
- Repeat
UMDA (Univariate Marginal Distribution Algorithm) assumes variables are independent.
| Method | Type | Description |
|---|---|---|
bounds(bounds) |
MultiBounds |
Search space bounds |
fitness(fit) |
impl Fitness |
Fitness function |
| Method | Type | Default | Description |
|---|---|---|---|
population_size(n) |
usize |
100 | Population size |
selection_size(n) |
usize |
50 | Individuals for model building |
max_generations(n) |
usize |
100 | Max generations |
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)?;For continuous variables:
μᵢ = mean of selected individuals' gene i
σᵢ = std dev of selected individuals' gene i
New individuals sampled from:
xᵢ ~ N(μᵢ, σᵢ²)
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
| Aspect | GA | EDA (UMDA) |
|---|---|---|
| Variation | Crossover + Mutation | Model sampling |
| Interactions | Crossover preserves building blocks | Assumes independence |
| Parameters | Crossover rate, mutation rate | Selection ratio |
- Choosing an Algorithm
- CMA-ES - For non-separable problems