## 3 Optimization Based on ESS-NSGA-III Algorithm  
### ESS-NSGA-III Algorithmic Framework  
The reference point-based NSGA-III algorithm, a classical multi-objective optimization approach, excels in optimizing three or more objectives, offering advantages in computational speed, convergence, and diversity performance [20]. However, its performance requires improvement when applied to train operation optimization problems involving multiple decision variables [21]. As illustrated in Figure 3, the proposed methodology for solving the speed profile optimization problem for the section operations of railway catenary maintenance vehicles using the ESS-NSGA-III algorithm consists of the following sequential steps:  
1. Initialize the optimization process by inputting basic data, including the operational route parameters, vehicle specifications, and algorithm configuration parameters. 2. Generate an initial population \(P_{t}\) of size \(N_{P}\) by randomly creating feasible running schemes \(X\) based on the input data. Ensure that all generated solutions satisfy the specified constraints, then perform non-dominated sorting to classify the population. 3. Evaluate the population \(P_{t}\) by calculating the objective function values for each individual. Determine the ideal point \(z^{*}\) by identifying the minimum values across all objectives. Generate \(N_{P}\) reference points uniformly distributed across the four-dimensional objective space. 4. Adjust the mating selection probability using shift-based density estimation (SDE) to enhance the population diversity and convergence properties. 5. Perform selection, crossover, and mutation operations on the current population \(P_{t}\) to produce an offspring population \(Q_{t}\) of size \(N_{P}\). Then, merge \(P_{t}\) and \(Q_{t}\) to form a new combined population \(R_{t}\) with a size of \(2N_{P}\). During the generation of \(Q_{t}\), validate each running scheme against the operational constraints. If any individual violates the constraints, regenerate it until all individuals in \(Q_{t}\) are feasible. 6. To construct the new population \(S_{t}\), non-dominated sorting is applied to \(R_{t}\). The population \(S_{t}\) comprises the first \(L\) non-dominated layers, denoted as \(F_{1}\) to \(F_{L}\). These layers are selected such that the cumulative number of individuals in the first \((L-1)\) layers, \(\left|S_{t}\right|_{L-1}\) is fewer than \(N_{P}\), while the total number of individuals in the first \(L\) layers, \(\left|S_{t}\right|_{L}\) meets or exceeds \(N_{P}\). 7. If \(S_{t}\) contains more than \(N_{P}\) individuals, all members from the first \((L-1)\) non-dominated layers are included in the offspring population \(P_{t+1}\). The remaining individuals required to reach \(N_{P}\) are chosen from the \(L\)-th non-dominated layer \(F_{L}\). On the other hand, if the number of individuals in \(\left|S_{t}\right|_{L}\) exactly equals \(N_{P}\), the offspring population \(P_{t+1}\) is set as \(S_{t}\). Subsequently, the iteration count \(I_{t}\) is incremented by one, and the process advances to Step 10. * Normalize the objective space by projecting the population individuals onto the hyperplane that contains the reference points. Each individual in \(S_{t}\) is then associated with the reference point exhibiting the smallest dynamic convergence distance, and the number of individuals linked to each reference point is determined. * Next, compute the niche count \(\rho_{j}\) for each reference point, defined as the count of individuals associated with that reference point across the current and the preceding \((L-1)\) non-dominated layers. Reference points are selected in ascending order based on their niche counts. Individuals associated with these reference points are sequentially added from the \(F_{L}\) layer to the offspring population \(P_{t+1}\) until the population size reaches \(N_{P}\). Finally, the iteration count \(I_{t}\) is incremented by one. * Check whether the number of iterations \(I_{t}\) has reached the maximum number of iterations \(I_{t\max}\).