1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//! # IBEA – Indicator-Based Evolutionary Algorithm
//!
//! Implementation of
//! **Eckart Zitzler & Simon Künzli,
//! “Indicator-Based Evolutionary Algorithm for Multiobjective Optimization,”
//! EMO 2004, LNCS 3248, Springer.**
//!
//! IBEA assigns fitness directly from a pairwise **quality indicator** (e.g., hypervolume, ε-indicator).
//! Given κ>0, it builds a matrix `M[i,j] = -exp(-I(i,j)/κ)` (with `M[i,i]=0`) and sets
//! the fitness as `F[j] = Σ_i M[i,j]`. Environmental selection iteratively removes the individual
//! with the **smallest** `F` and updates the remaining fitness by subtracting the removed row of `M`.
//!
//! In *moors*, IBEA is composed from reusable operators:
//! * **Selection:** [`RankAndScoringSelection`] (uses only survival score)
//! * **Survival:** [`IbeaHyperVolumeSurvivalOperator`] (indicator-driven; hypervolume singleton by default)
//! * **Crossover / Mutation / Sampling:** user-provided via the builder.
//!
//! The default configuration keeps a single population (no external archive).
use Array1;
use crate::;
define_algorithm_and_builder!;