The algorithm is implemented based on [3][benchmark][data] . A benchmark of the algorithm against the original C code can be found The algorithm follows the general outline of a genetic algorithm with a modifed mating and survival selection. In NSGA-II, first, individuals are selected frontwise. By doing so, there will be the situation
where a front needs to be splitted because not all indidividuals are allowed to survive. In this splitting front, solutions are selected based on crowding distance.

The crowding distance is basically the Manhatten Distance in the objective space. However, the extreme points are desired to be kept every generation and, therefore, get assigned a crowding distance of infinity.

Furthermore, to increase some selection preasure NSGA-II uses a binary tournament mating selection. Each individual is first compared by rank and then by crowding distance. There also exists a variant in the original C code where instead of using the rank the domination criterium between two solutions is used.

This object defines the mating selection to be used.
In an evolutionary algorithm each generation parents need to be selected to produce new offsprings using
different recombination and mutation operators. Different strategies for selecting parents are possible e.g.
selecting them just randomly, only in the neighbourhood, using a tournament selection to introduce some seletion
pressure, …

The crossover has the purpose of create offsprings during the evolution. After the mating selection
the parents are passed to the crossover operator which will dependent on the implementation create
a different number of offsprings.

Some genetic algorithms rely only on the mutation operation. However, it has shown that increases
the performance to perform a mutation after creating the offsprings through crossover as well.
Usually the mutation operator needs to be initialized with a probability to be executed.
Having a high probability of mutation will most of the time increase the diversity in the population.

eliminate_duplicatesbool

The genetic algorithm implementation has a built in feature that eliminates duplicates after merging
the parent and the offspring population. If there are duplicates with respect to the current
population or in the offsprings itself they are removed and the mating process is repeated to
fill up the offsprings until the desired number of unique offsprings is met.

n_offspringsint (default: None)

Number of offspring that are created through mating. By default n_offsprings=None which
sets the number of offsprings equal to the population size. By setting n_offsprings=1 a, so called,
steady-state version of an algorithm can be achieved.