## 5 Multiobjective Optimization Approach
### Improved NSGA-II
#### 5.2.3 Algorithm Flow  
The improved NSGA-II algorithm was used to optimize the FPTLIR's energy consumption and mission execution time during flight on- and off-line mission paths. The algorithm flowchart is shown in Figure 8.  
Figure 8: Flowchart of the FPTLIR multiobjective optimization algorithm based on improved NSGA-II.  
The algorithm flow is shown as follows:  
1. Input the parameters of the multiobjective optimization model based on flight energy consumption, including acceleration and velocity constraints, mission interval time constraints, etc. Set algorithm parameters such as iteration number, initial population size, crossover and mutation probabilities, initial temperature, decay coefficient, and final temperature. Initialize the population and calculate objective functions;
2. Calculate fitness values for parental individuals using non-dominated sorting and crowding degree calculation methods before calculating the ASF values;
3. Generate offspring population \(P_{m}\) by performing crossover and random mutation operations on paternal individuals while also calculating the ASF values for offspring individuals;
4. Perform simulated annealing search on the offspring population \(P_{m}\) to compare the parent and offspring ASF values before determining whether to incorporate the new solution set \(P_{n}\) using the Metropolis criterion or to merge with the parent;
5. Use the selection operation to determine whether the termination condition or maximum evolutionary generation limit has been reached before outputting results or returning to Step 2.  
Algorithm 1 lists the pseudocode of the main process.  
```
% Input: Flight energy model parameters and constraints, population size N, % maximum generations T, crossover probability P\({}_{c}\), mutation probability P\({}_{m}\), % initial temperature T\({}_{0}\), cooling rate alpha, final temperature T\({}_{f}\) % Output: Optimized solution set for energy consumption and mission time % Initialize population for i = 1:N  population(i) = initialize_individual(); [objectives(i), constraints(i)] = evaluate(population(i)); end % Begin evolution t = 0; while t < T [fronts, ranks] = fast_nondominated_sort(population); % Fast non-dominated sorting distances = crowding_distance(fronts); % Crowding distance calculation parents = binary_tournament_selection(population, ranks, distances, P\({}_{c}\)); % Selection children = crossover_and_mutation(parents, P\({}_{m}\)); % Crossover and mutation [objectives_children, constraints_children) = evaluate(children); % Evaluate offspring [population, ranks] = merge_and_sort(population, children); % Merge and sort population = elite_selection(population, ranks, distances, N); % Elite selection based on crowding distance population = asf_local_search(population); % Local search with ASF population = simulated_annealing(population, T\({}_{0}\), alpha); % Simulated annealing decision T\({}_{0}\) = alpha * T\({}_{0}\); % Update temperature t = t + 1; % Increment generation counter end % Output the final solution set optimized_set = population(ranks == 1); % Select the non-dominated set
```  
**Algorithm 1** Improved NSGA-II Algorithm