# Multi-objective EA

`Evolutionary.NSGA2`

— TypeNon-dominated Sorting Genetic Algorithm (NSGA-II) for Multi-objective Optimization

The constructor takes following keyword arguments:

`populationSize`

: The size of the population`crossoverRate`

: The fraction of the population at the next generation, that is created by the crossover function`mutationRate`

: Probability of chromosome to be mutated`selection`

: Selection function (default:`tournament`

)`crossover`

: Crossover function (default:`SBX`

)`mutation`

: Mutation function (default:`PLM`

)`metrics`

is a collection of convergence metrics.

## Description

Multi-objective optimization is an area of multiple criteria decision making that is concerned with mathematical optimization problems involving more than one objective function to be optimized simultaneously. Evolutionary algorithms are popular approaches to generating Pareto optimal solutions to a multi-objective optimization problem by appling Pareto-based ranking schemes, such as the Non-dominated Sorting Genetic Algorithm-II (NSGA-II)^{[1]}.

## Auxiliary Functions

`Evolutionary.nondominatedsort!`

— Function`nondominatedsort!(R, F)`

Calculate fronts for fitness values `F`

, and store ranks of the individuals into `R`

.

`Evolutionary.dominate`

— Function`dominate(p, q)`

Returns `1`

if `p`

is dominated by `q`

, `-1`

if otherwise, and `0`

if dominance cannot be determined.

`Evolutionary.dominations`

— Functiondominations(P::AbstractVector)

Returns a domination matrix of all elements in the input collection `P`

.

`Evolutionary.crowding_distance!`

— Function`crowding_distance!((C, F, fronts)`

Calculate crowding distance for individuals and save the results into `C`

given the fitness values `F`

and collection of `fronts`

.

## References

- 1Deb, K. et al., "A fast and elitist multiobjective genetic algorithm: NSGA-II". IEEE Transactions on Evolutionary Computation, 2002.