2.2.2. Mutation

In contrast to DE/rand/1/bin, the "current to *p*best/1" mutation strategy is used in SHADE:

$$
\sigma\_{i,G} = \mathbf{x}\_{i,G} + F\_i \times \left(\mathbf{x}\_{\text{pbest},G} - \mathbf{x}\_{i,G}\right) + F\_i \times \left(\mathbf{x}\_{r1,G} - \mathbf{x}\_{r2,G}\right) \tag{4}
$$

$$p\_i = rand[p\_{\min}, 0.2] \tag{5}$$

$$p\_{\rm min} = \frac{2}{\rm NP} \tag{6}$$

where, *<sup>x</sup>i*,*G* is the given individual, and *<sup>x</sup>pbest*,*<sup>G</sup>* is an individual selected from the best *NP* × *pi* (*pi* ∈ [0, 1]) individuals randomly in the current population. Vector *<sup>x</sup>r*1,*G* is an individual selected from the current population randomly, and *<sup>x</sup>r*2,*G* is an individual selected from a combination of the external archive *A* and the current population randomly. Index *r1* - *r2* - *i*. *Fi* is a scaling factor, *rand* [] is a uniform random distribution and *NP* is the size of population. The *<sup>v</sup>i*,*G* is the mutated vector and *G* is the index of the current generation. The greed of the "current-to-*p*best/1" mutation strategy depends on the control parameter *pi*, which is calculated as shown in Equations (5) and (6). It balances exploration and exploitation capabilities (a small value of *p* is more greedy). The scaling factor *Fi* is generated using the following formula:

$$F\_i = randc\_i(\mathbf{M}\_{\mathbf{F},ri}, 0.1) \tag{7}$$

where *randci* () is the Cauchy distribution, and *MF*,*ri* is randomly selected from historical memory *MF* (index *ri* is a uniformly distributed random value from [1, *H*]). If *Fi* > 1, let *Fi* = 1. If *Fi* ≤ 0, Equation (7) is repeated to attempt to generate a valid value.

The boundary handling of SHADE is identical to that of DE, as shown in Equation (2).
