## 2 Metaphorless Optimization Algorithms
### Java Algorithm  
The Java optimization algorithm [12] was introduced with the purpose of optimizing both unconstrained and constrained problems. Jaya (a Sanskrit term meaning 'victory') stands out as a metaphorless algorithm, representing an unprecedented and unique feature in the field of population-based metaheuristic algorithms. Due to its simplicity and efficiency, the Java algorithm has garnered growing interest and has emerged as a viable alternative to other widely recognized metaheuristic algorithms such as PSO [21] in various scientific and engineering disciplines (see [22; 23]). The process of updating the population in Jaya in order to optimize a given objective function entails adjusting current solutions by directing the search toward more favorable regions within the solution space while simultaneously moving away from potential solutions with worse fitness. Considering the parameters associated with the given problem, encompassing the number of decision variables \(numVar\), a variable index \(v\) ranging from \(1\) to \(numVar\), the population size \(popSize\), a population index \(p\) varying from \(1\) to \(popSize\), and the iteration index \(i\) ranging from \(1\) to \(maxIter\), the value of the \(v\)-th variable for the \(p\)-th population candidate at the \(i\)-th iteration is represented as \(X_{p,x,i}\), and the updated value \(X_{p,v,i}^{new}\) is determined based on the following equation:  
\[X_{p,v,i}^{new}=X_{p,v,i}+r_{1,v,i}\big{(}X_{best,v,i}-\big{|}X_{p,v,i}\big{|} \big{)}-r_{2,v,i}\big{(}X_{worst,v,i}-\big{|}X_{p,v,i}\big{|}\big{)}, \tag{1}\]  
where \(X_{best,v,i}\) and \(X_{worst,v,i}\) denote the population candidates with the best and worst fitness values, while \(r_{1,v,i}\) and \(r_{2,v,i}\) represent uniformly distributed random numbers within \([0,1]\). The pseudocode for the Java algorithm is delineated in Algorithm 1. The general framework of the computational procedure of this algorithm can be succinctly expressed with the following steps: initialization, where the initial set of potential solutions is generated; the main loop, where the refinement of the candidate solutions is performed using the Java Equation (1), accompanied by the selection of the best candidate solution between the current and updated candidates until the termination criterion is satisfied; reporting of the best solution identified at the end of the algorithm. ```
1:/* Initialization */
2:Initialize \(numVar\), \(popSize\) and \(maxIter\);
3:\(X\leftarrow\textsc{Generate\_initial\_population}()\);
4: Evaluate fitness value \(f(X)\);
5:\(i\gets 1\);
6:/* Main loop */
7:while\(i\leq maxIter\)do
8: Determine \(X_{best,v,i}\) and \(X_{worst,v,i}\);
9:for\(p\gets 1,popSize\)do
10:for\(v\gets 1,numVar\)do
11: Update population \(X_{p,v,i}^{new}\) by Equation (1);
12:\(\textsc{Check\_boundary\_integrity}(X_{p,v,i}^{new})\);
13:endfor
14: Evaluate fitness value \(f(X_{p,v,i}^{new})\);
15:\(\textsc{Greedy\_selection}(X_{p,v,i},X_{p,v,i}^{new})\);
16:endfor
17:\(i\gets i+1\);
18:endwhile
19: Output the best solution found and terminate. ```  
**Algorithm 1** Jaya pseudocode  
The initial population of candidate solutions is arbitrarily positioned within the specific constraints of the optimization problem, employing random numbers uniformly distributedin \([0,1]\). A detailed description of the procedure used is presented in Algorithm 2. The lower bound (\(LB\)) and upper bound (\(UB\)) parameters determine the size of the search space and the boundaries for each decision variable. These parameters are specific to the characteristics of the optimization problem under consideration. ```
1:functionGenerate_initial_population()
2:for\(p\gets 1\),\(popSize\)do
3:for\(v\gets 1\),\(numVar\)do
4:\(X_{p,v}\gets LB_{v}+rand()\times(UB_{v}-LB_{v})\).