## 3 Review of PSO, DE, and DEPSO
### Differential Evolution  
The DE algorithm proposed by [PERSON] and [PERSON] [49, 50] is one of the most representative evolutionary algorithms, which, due to its ease of implementation, effectiveness, and robustness, has been widely used in the solution of several complex optimization problems [51, 52]. This algorithm makes use of a population \(P\) constituted from \(NP\) individuals or parameter vectors:  
\[P_{t}=\{X_{1,t},X_{2,t},\ldots,X_{i,t}\},\ \ i=1,\ldots,NP \tag{21}\]  
where \(t\) refers to the current iteration and each individual \(X_{i,t}=\{x_{i,t}^{1},x_{2,t}^{2},\ldots,x_{i,t}^{D}\}\) has \(D\) dimensions. At the beginning of the execution of this algorithm, the population is initialized randomly within the search space of the problem.  
The DE algorithm consists mainly of three operators: mutation, crossover, and selection. These operators allow the algorithm to perform the search for the global optimum.  
Mutation, crossover, and selection are applied consecutively to each individual \(X_{i,t}\) of the population \(P_{t}\) in each of the \(t\) iterations until a certain stopping criterion is satisfied. Within the mutation, in each iteration and for each individual, a mutated vector \(V_{i,t}\) is generated by means of the information of the current population \(P_{t}\) and the application of a mutation scheme. In the standard version of the DE algorithm, the mutated vector is generated following the DE/rand/1 mutation scheme, described as follows:  
\[V_{i,t}=X_{r1,t}+F\cdot(X_{r2,t}-X_{r3,t}) \tag{22}\]  
where the indices \(r_{1},r_{2}\), and \(r_{3}\) are randomly selected within the range \([1,NP]\) such that they are different from each other and different from the index \(i\). \(F>0\) is the scaling factor and is one of the parameters of the algorithm. The value of parameter \(F\) is typically within the interval \([0,1]\).  
The next stage within the DE algorithm consists of the crossover, in which a test vector \(U_{i,t}\) is generated; that is, once the mutated vector \(V_{i,t}\) is generated for the individual \(X_{i,t}\), the information crossover between the vector \(X_{i,t}\) and the vector \(V_{i,t}\) is performed. This crossover operation is performed consistently following the binomial crossover:  
\[U_{i,t}^{j}=\begin{cases}V_{i,t}^{j}&\text{if }rand[0,1]<Cr\text{ or }j=j_{\text{rand}}\\ X_{i,t}^{j}&\text{otherwise}\end{cases} \tag{23}\]  
where \(rand[0,1]\) is a number uniformly selected within the interval \([0,1]\) and \(j_{\text{rand}}\) is an index corresponding to a variable that is uniformly selected in the interval \([1,D]\). Here, \(Cr\in[0,1]\) is known as the crossover probability, and like \(F\), it is another parameter of the algorithm.  
Once the corresponding test vector \(U_{i,t}\) is generated for the individual \(X_{i,t}\), a selection procedure is carried out from which the population for iteration \(t+1\) is constructed. The standard way to perform this selection procedure consists of comparing the fit value of the test vector \(U_{i,t}\) against the fit value of the individual \(X_{i,t}\), always keeping the individual with the best fit value. This procedure is performed as follows:  
\[X_{i,t+1}=\begin{cases}U_{i,t}&\text{if }f(U_{i,t})<f(X_{i,t})\\ X_{i,t}&\text{otherwise}\end{cases} \tag{24}\]