feat(algorithms): add IpopCmaEs (CMA-ES with restart) for multimodal problems

Auger & Hansen 2005 IPOP-CMA-ES: wraps the existing CmaEs in a restart
loop that doubles the population size and re-randomizes the mean
whenever a restart trigger fires. Specifically addresses the failure
mode we observed on Rastrigin (vanilla CMA-ES = 2.3 vs DE = 0).

Restart triggers:
- The whole budget for one inner CmaEs run finishes without improvement
- (More sophisticated triggers — eigenvalue collapse, condition-number
  blow-up, sigma stagnation — are left for future versions; the
  per-run budget trigger captures the bulk of the practical benefit)

Each restart:
- Doubles the population_size (Auger & Hansen 2005)
- Re-randomizes the initial mean to a fresh point in the bounds box
- Resets sigma to the user's initial value

Same Vec<f64> + single-objective constraints as CmaEs. The total
budget is divided across restarts; restart budget grows with
population. Tests verify it beats vanilla CMA-ES on Rastrigin.
This commit is contained in:
2026-05-05 09:51:12 -06:00
parent b78e5ed2fc
commit 60b17f58c9
7 changed files with 298 additions and 12 deletions
+2
View File
@@ -10,6 +10,7 @@ pub mod grea;
pub mod hill_climber;
pub mod hype;
pub mod ibea;
pub mod ipop_cma_es;
pub mod knea;
pub mod moead;
pub mod mopso;
@@ -40,6 +41,7 @@ pub use grea::*;
pub use hill_climber::*;
pub use hype::*;
pub use ibea::*;
pub use ipop_cma_es::*;
pub use knea::*;
pub use moead::*;
pub use mopso::*;