feat(algorithms): add EpsilonMoea (ε-dominance MOEA, Deb et al. 2003)

Replaces strict Pareto dominance with ε-dominance: A ε-dominates B when
`floor(A_i / ε) ≤ floor(B_i / ε)` for every objective and strictly
less in at least one (minimization frame). The result is a regular
discretization of objective space — at most one archive member per
ε-box — so the front spreads out automatically and the archive size
self-limits without truncation tricks.

Steady-state design: each generation samples one parent from the main
population and one from the ε-archive, applies variation, evaluates
the child, and offers it to both archives. Every member's
ε-coordinates and the box-tie rules are precomputed each insertion.

Tests: produces a front on Schaffer N.1 with reasonable spread,
deterministic reruns, panic on `epsilon[i] <= 0.0` and on
`epsilon.len() != objectives.len()`.
This commit is contained in:
2026-05-05 09:51:11 -06:00
parent f8fd3880ac
commit 4fa8250c24
3 changed files with 358 additions and 1 deletions
+2
View File
@@ -3,6 +3,7 @@
pub mod ant_colony_tsp;
pub mod cma_es;
pub mod differential_evolution;
pub mod epsilon_moea;
pub mod genetic_algorithm;
pub mod hill_climber;
pub mod hype;
@@ -26,6 +27,7 @@ pub mod umda;
pub use ant_colony_tsp::*;
pub use cma_es::*;
pub use differential_evolution::*;
pub use epsilon_moea::*;
pub use genetic_algorithm::*;
pub use hill_climber::*;
pub use hype::*;