## 3 Materials and Methods
### Methods
#### 3.2.4 Local Search Procedure of EA-ILS Hyper-Heuristic  
The local search procedure (LS-Seq) for the intensification stage of the EA-ILS hyper-heuristic is briefly described in Algorithm 8. It is based on the hidden Markov model principle for constructing effective heuristic sequences [70] and was proposed as an alternative to the VNS [48]. The LS-Seq was designed to eliminate the excessive iterations in the ILS-based hyper-heuristics such as FS-ILS and NR-FS-ILS that carry local search invocation based on the VNS. It maintains two data structures which are _iScore_ and _pScore_. The _iScore_ is for storing the level of influence of a particular local search heuristic to produce the best new solutions. The _pScore_ is for measuring the effectiveness of applying two local search heuristics in succession. The input to the procedure is a perturbed solution thatgoes through hill-climbing intensification and the best solution found at the end of the procedure is returned. \(S_{pert}\), \(S_{bl}\), and \(S^{*}\) respectively represent the perturbed solution, the solution produced after applying a local search heuristic, and the best solution found so far during the intensification stage. The roulette wheel scheme was employed to select the first local search heuristic before the while loop using the vector iScore. However, within the loop, the next local search heuristic to apply is based on two parameters: the matrix pScore and the previously applied local search heuristic captured by its index _prev_. It is important to note that all the entries of the two data structures are initially set to 1.  
```
Input:\(S_{pert}\), the solution from the perturbation stage \(S_{bl}\gets S_{pert}\) \(cur\gets RWS(iScore)\) /*Based on iScore, select the index of the current LLH*/ \(h_{l}\gets L_{H}[cur]\) /*get HyFlex id of the LLH*/ \(S^{*}\gets apply(h_{l},S_{bl})\) /*apply the LLH*/ \(\textbf{while}(S^{*})<e(S_{bl})\) \(S_{bl}\gets S^{*}\) \(prev\gets cur\)/*update the index of the previous local search LLH*/ \(cur\gets RWS(pScore,prev)\)/*select the index of the next LLH*/ \(h_{l}\gets L_{H}[cur]\) \(S^{*}\gets apply(h_{l},S_{bl})\) endwhile Output:\(S_{bl}\), the best solution produced from the LS-Seq procedure
```  
**Algorithm 8**LS-Seq procedure  
Figure 2 illustrates how the data structures of LS-Seq were updated. In the first view, heuristic L0 has only been involved once during the update of the best global solution. L1 and L2 have been involved two times and five times, respectively, hence the vector entries 2, 3, 6. During the call of the LS-Seq procedure, L0, L1, and L2 are applied in the given order, leading to the update of both the iScore vector and the pScore matrix. Specifically, the intersection of L0-L1 was updated to 3 while that of L1-L2 was updated to 8 to strengthen the selection of L1 after the application of L0 and the selection of L2 after the application of L1. Since all the local search heuristics were applied once based on the sequence L0, L1, L2, they all received an increment of 1 in their respective iScore entries to change {2, 3, 6} to {3, 4, 7}. At the end of the third view, only L2 is applied during the current call of LS-Seq, and its iScore value is increased to 9. The iScore vector has the entries {3, 5, 9}, while no update is performed on the pScore matrix because the sequence {L2} is a singleton. Eventually, the local search invocation almost creates a sequence based on the inter-neighborhood strengths discovered over time.