Math Audio Differential Evolution
This crate provides a pure Rust implementation of Differential Evolution (DE) global optimization algorithm with advanced features including L-SHADE.
Features
- Pure Rust Implementation: No external dependencies for core optimization
- Multiple DE Strategies: Various mutation and crossover strategies
- L-SHADE: Linear population size reduction for faster convergence
- External Archive: Maintains diversity by storing discarded solutions
- Current-to-pbest/1: SHADE mutation strategy for balanced exploration
- Constraint Handling: Linear and nonlinear constraint support
- Adaptive Parameters: Self-adjusting F and CR parameters (SHADE-style)
- Evaluation Recording: Track optimization progress and convergence
- Visualization Tools: Plot test functions and optimization traces
Optimization Strategies
Mutation Strategies
DE/rand/1:x_trial = x_r1 + F * (x_r2 - x_r3)DE/best/1:x_trial = x_best + F * (x_r1 - x_r2)DE/current-to-best/1: Combines current and best vectorsDE/rand/2: Uses five random vectors for mutationDE/current-to-pbest/1: Blends current with top-p% individual (SHADE)
L-SHADE Strategy
L-SHADE combines three key improvements:
- Linear Population Reduction: Starts with large population (18×dim), reduces to minimum (4)
- External Archive: Stores discarded solutions for diversity
- Current-to-pbest/1: Selects pbest from top p% of population
use ;
let bounds = vec!; // 10D problem
let lshade_config = LShadeConfig ;
let config = new
.maxiter
.strategy
.lshade
.seed
.build
.expect;
let result = differential_evolution.expect;
Crossover Strategies
- Binomial: Random parameter-wise crossover
- Exponential: Sequential parameter crossover
Usage
use ;
use Array1;
// Example objective function (Rosenbrock)
let objective = ;
// Define bounds for 2D problem
let bounds = vec!;
let config = new
.strategy
.maxiter
.popsize
.mutation
.recombination
.seed
.build
.expect;
let result = differential_evolution
.expect;
println!;
println!;
Constraint Support
Linear Constraints
use ;
use ;
// Linear constraint: x1 + x2 <= 1.0
let constraint = LinearConstraintHelper ;
// Apply to configuration with penalty weight
let mut config = default;
constraint.apply_to; // penalty weight
Nonlinear Constraints
let nonlinear_constraint = ;
Visualization
The crate includes a plot_functions binary for visualizing test functions and optimization traces:
# Plot test functions as contour plots
# Show optimization traces from CSV files
Integration
This crate is part of the Math Audio ecosystem:
- Used by
autoeqfor filter parameter optimization - Integrates with
math-audio-testfunctionsfor validation - Works with
math-audio-iir-firfor audio filter optimization
Examples
The crate includes several example programs demonstrating different DE capabilities:
basic_de: Simple unconstrained optimizationlinear_constraints: Linear constraint handlingnonlinear_constraints: Complex constraint optimization
Performance Tips
- Use L-SHADE for high-dimensional problems (>10 dimensions)
- Start with default LShadeConfig and tune p if needed
- Lower p values (0.05-0.1) favor exploitation
- Higher p values (0.15-0.25) favor exploration
References
License
GPL-3.0-or-later