Survival
The general theory of pymoode’s survival operators is presented throughout this section, although code details should be better addressed in their corresponding section.
Single-objective
In single-objective DE, to decide if a trial vector \(u_i\) should become a member of the next generation, it is compared to the corresponding target vector \(x_i\) using a greedy criterion [3]. If \(u_i\) outperforms \(x_i\), it proceeds to the next generation and \(x_i\) is removed.
Until version 0.2.4, the one-to-one comparison in DE was performed using pymoo’s ImprovementReplacement class. Now the user can parse its own survival operator to single-objective DE via the survival argument. It is recommended that the new operator is inherited from pymoode.survival.replacement.BaseReplacement.

Multi-objective algorithms
The one-to-one comparison might be inadequate in multi-objective problems and is usually replaced by other survival strategies.
GDE3 [6] and NSDE are two multi-objective variants of DE using Nondominated Sorting and crowding metrics [5] in the survival stage. They share the same reproduction operators, although different in their survival strategies.
Whereas NSDE uses a full (µ+λ) survival strategy, which combines the parent population with offspring, GDE3 has a one-to-one comparison between each member in the parent population and its corresponding trial vector before truncating the population into the original size. In this one-to-one comparison, one of the individuals of each pair might be removed in advance from the combined population before (µ+λ) survival if dominated by the other.

Many-objective algorithms
As GDE3 and NSDE have been originally designed using NSGA-II [5] Rank and Crowding survival, they perform poorly in problems with more than two objectives. However, simple modifications from a user perspective can solve this issue. Let us in pymoode denote problems with more than two objectives as many-objective problems.
NSDE-R [8] combines the survival operator of NSGA-III [9] [10] with the reproduction operators of DE [3], which leads to great performance in many-objective problems. GDE3-MNN is a variant of GDE3 proposed by Kukkonen and Deb [7] that replaces original crowding distances of Rank and Crowding survival with an M-Nearest Neighbors based crowding metric with recursive elimination and re-calculation. It has improved a lot the performance of GDE3 in many-objective problems.
