## 4 Multi-Objective Evolutionary Algorithm for the PP Problem
### Flow Chart  
The flow chart of the proposed MOEA is as follows:  
1. Initialize the population (_POP_). 2. Evaluate each individual in population (_POP_). 3. Store non-dominated individuals that have been found into the repository (_REP_). 4. The objective space that has been found is divided into grid regions, and the individuals of the repository (_REP_) are located in the corresponding grids. 5. **While** the number of iterations does not reach the preset maximum **DO** 1. Generate an empty population (_NEWPOP_): _NEWPOP_ = \(\phi\) 2. **For**\(i=1\) to _NP_**DO**(%% _NP_ is the number of chromosomes or individuals)(%% For individual \(POP[i]\), use refiner operators (safety, shortest, mutation, smoothness, shortness, and position update) to produce six new children. They are evaluated, and then, feasible individuals are placed in children population (_NEWPOP_). The feasible solution is one solution that lies on a valid search space. In this article, the feasible solution is one path that does not cross obstacles, but it can touch the boundaries of obstacles. If the new chromosome is an infeasible solution, replace the individual \(POP[i]\) with \(REP[h]\). \(REP[h]\) is an individual repository and is chosen as follows: The more individuals in the grid, the lower the fitness values of these grids. This aims to decrease the possibility of selecting a grid with too many individuals. Then, based on the fitness values, roulette wheel selection is used to select the grid. Once a grid has been selected, we randomly consider an individual within this grid as \(REP[h]\). The remainder operators are run for \(POP[i]\) in sequence. After the last operator (position update) has been used for the individual \(POP[i]\), if the generated children (\(co\)) are a feasible solution, replace \(POP[i]\) with \(co\). 1. \(co=\textit{ClearanceOperator}\) (\(POP[i]\)) 2. **If** IsInfeasibleSolution(\(co\)) **do** \[POP[i]=REP[h]\]  else \(NEWPOP=NEWPOP+co\) 3. Run the process (ii) with the remainder operators for \(POP[i]\) in sequence 4. **If** IsFeasibleSolution(\(co\)) **do** \[POP[i]=co\] 5. Update the contents of the repository (\(REP\)): \(REP=REP\cup POP\cup NEWPOP\). Meanwhile, eliminate the dominating individuals in the repository (\(REP\)). Then, divide the found objective space into grid regions in step (4). Due to the limited capacity of the repository, when it is full, we remove individual \(REP[j]\) from the repository (\(REP\)) in turn until the number of individuals in the repository does not exceed the capacity of the repository. The following technique is used to select the individual \(REP[j]\): The more individuals in the grid, the higher the fitness values of these grids. The aim is to increase the possibility of selecting a grid with too many individuals. Then, based on the fitness values, roulette wheel selection is used to select the grid. Once a grid has been selected, we randomly consider an individual within this grid as \(REP[j]\). 6. Increment the loop counter. In the proposed algorithm, each individual is a path and the path consists of a number of sequential segments. Therefore, the feasibility of individual is determined by the feasibility of the path. As we can see, the algorithm starts from initialization steps 1-4. Once the initialization steps have been finished, the algorithm iterates (considering the maximum number of iterations) and attempts to find the best solutions by repeating step 5. At the beginning of each iteration, an empty children population (\(NEWPOP\)) is generated, and a family of operators is applied to each individual \(POP[i]\). The new individuals are produced and feasible solutions of them are inserted into the children population (\(NEWPOP\)). Then, the repository (\(REP\)) is updated (\(REP=REP\cup POP\cup NEWPOP\)). In this update, the dominated solutions are discarded, and the non-dominated solutions are stored until the maximum allowed capacity of repository (\(REP\)) is reached.