2.2.1. NSGA II

NSGA II [23] is an elitist multi-objective optimization algorithm that initializes by a random population and assigns a fitness value for each member of the population. After generating the offspring using crossover and mutation operators, a binary selection operator, based on fitness and crowding distance, is applied to the parent and offspring population for elitist selection. Crowding distance defines the distance of an individual to its neighbors and large crowding distance results in higher diversity, calculating the crowding distance begins by assigning distance to zero for each individual. Next, individuals are sorted based on objective function. After assigning infinite value to the boundaries (*I*(*d*1) = <sup>∞</sup>, *I*(*dn*) = <sup>∞</sup>), crowding distance of the *m*th objective function of the *k*th individual in front *Fi*for *k* = 2 to (*n* − 1) is calculated by Equation (1).

$$I(d\_k) = I(d\_k) = \frac{I(k+1) \cdot m - I(k-1) \cdot m}{f\_m^{\max} - f\_m^{\min}} \tag{1}$$

The algorithm preserves the best individuals from parent and offspring and continues until the stopping criteria is met. The elitism process is shown in Figure 4.

**Figure 4.** Elitism process of NSGA II.
