feat(algorithms): add IBEA (Indicator-Based Evolutionary Algorithm)

Zitzler & Künzli 2004 IBEA: replaces Pareto-rank + crowding fitness
with a single scalar fitness derived from a binary quality indicator
(here, the additive ε-indicator). Loses no information at three or
more objectives the way crowding distance does.

Algorithm:
- For every (i, j) pair compute I(i, j) = max_k (f_k(i) - f_k(j)) on
  minimization-oriented objectives.
- Fitness F(i) = -Σ_{j≠i} exp(-I(j, i) / κ).
- Each generation: combine parents + offspring, iteratively remove the
  lowest-F member (cleanly recomputing the contribution of the dropped
  member from each surviving member's fitness) until population_size
  remain.
- Parent selection: binary tournament on F (higher wins).

Bounds-aware operators recommended (SBX + PolyMut).
Tests: produces a non-empty front on Schaffer N.1, deterministic
reruns, panic on `population_size == 0`.
This commit is contained in:
2026-05-05 09:51:11 -06:00
parent d16e0379a3
commit 7213bdd148
3 changed files with 334 additions and 2 deletions
+2
View File
@@ -4,6 +4,7 @@ pub mod cma_es;
pub mod differential_evolution;
pub mod genetic_algorithm;
pub mod hill_climber;
pub mod ibea;
pub mod moead;
pub mod mopso;
pub mod nsga2;
@@ -20,6 +21,7 @@ pub use cma_es::*;
pub use differential_evolution::*;
pub use genetic_algorithm::*;
pub use hill_climber::*;
pub use ibea::*;
pub use moead::*;
pub use mopso::*;
pub use nsga2::*;