feat(algorithms): add OnePlusOneEs (1+1)-ES with Rechenberg's one-fifth rule

Rechenberg 1973's elemental evolution strategy: one parent, one child
each generation, accept the child if it is no worse, and adapt the
mutation step size by tracking the success rate. If more than 1/5 of
recent moves were accepted the search is too cautious — multiply σ by
`step_increase` (typical 1.22). Below 1/5 — divide by the same factor.
At 1/5 — leave it alone. The success window has length `adaptation_period`.

Single-objective only. Vec<f64> only. Generic Gaussian step bounded by
the embedded `RealBounds`.

Why ship it: it's the smallest possible self-adapting evolution strategy
and a useful pedagogical / baseline endpoint. Pairs well as the budget
floor ("give me anything cheaper than CMA-ES").
This commit is contained in:
2026-05-05 09:51:12 -06:00
parent 5a0475c678
commit 7d8a29df2b
3 changed files with 214 additions and 1 deletions
+2
View File
@@ -15,6 +15,7 @@ pub mod moead;
pub mod mopso;
pub mod nsga2;
pub mod nsga3;
pub mod one_plus_one_es;
pub mod paes;
pub(crate) mod parallel_eval;
pub mod pesa2;
@@ -43,6 +44,7 @@ pub use moead::*;
pub use mopso::*;
pub use nsga2::*;
pub use nsga3::*;
pub use one_plus_one_es::*;
pub use paes::*;
pub use particle_swarm::*;
pub use pesa2::*;