feat(algorithms): add DifferentialEvolution (DE/rand/1/bin)

Optional v1 algorithm requested by the user (spec §12.4):

- Vec<f64> decisions only.
- Single-objective only — panics with a clear message otherwise.
- Standard DE/rand/1/bin: for each target i, sample distinct r1, r2, r3;
  mutant = x[r1] + F * (x[r2] - x[r3]); apply binomial crossover with at
  least one forced index; greedy replacement on direction-correct
  comparison.
- Bounds taken from the embedded RealBounds (mutants are clamped to the
  per-variable range so the trial vector stays feasible).
- Seed-deterministic; tests verify reproducibility, that DE improves on
  the initial random population for a sphere problem, and that
  multi-objective use panics.
This commit is contained in:
2026-05-04 19:25:29 -06:00
parent 33a927d86d
commit a1bb49d74e
3 changed files with 240 additions and 1 deletions
+2
View File
@@ -1,9 +1,11 @@
//! Built-in reference optimizers.
pub mod differential_evolution;
pub mod nsga2;
pub mod paes;
pub mod random_search;
pub use differential_evolution::*;
pub use nsga2::*;
pub use paes::*;
pub use random_search::*;