feat(algorithms): add PesaII (Pareto Envelope-based Selection Algorithm II)

Corne, Jerram, Knowles & Oates 2001: divides objective space into a
hyperbox grid and uses per-box population counts to drive selection
toward sparsely-populated regions.

Each generation:
- Maintain an external archive of non-dominated members
- Build a hyperbox grid (`grid_divisions` per axis on the archive's
  current axis ranges); count members per box
- Selection picks two parents by region-based tournament: choose two
  random non-empty boxes and take a uniform-random member from the
  one with fewer occupants
- Variation produces an offspring; insert into archive, dropping
  dominated members and (if archive overflows) the most-crowded
  occupant of the most-occupied box

Tests cover non-empty front on Schaffer N.1, deterministic reruns,
and panic on `archive_size == 0`.
This commit is contained in:
2026-05-05 09:51:11 -06:00
parent 283d7429bb
commit f8fd3880ac
6 changed files with 331 additions and 23 deletions
+2
View File
@@ -13,6 +13,7 @@ pub mod nsga2;
pub mod nsga3;
pub mod paes;
pub(crate) mod parallel_eval;
pub mod pesa2;
pub mod particle_swarm;
pub mod random_search;
pub mod rvea;
@@ -35,6 +36,7 @@ pub use nsga2::*;
pub use nsga3::*;
pub use paes::*;
pub use particle_swarm::*;
pub use pesa2::*;
pub use random_search::*;
pub use rvea::*;
pub use simulated_annealing::*;