## 3 Materials and Methods
### Proposed Adaptive Large Neighborhood Search
#### 3.2.1 Initial Solution
```
Input:_served customers, unserved customers, routes customer_to_added_new_route \(\leftarrow\)[ ] customer_cost \(\leftarrow\)[ ] for each unserved customer in unserved customers do for route in routes do for node in route do if node is Customer then \(before\_node\)\(\leftarrow\) Find before node \(distance\)\(\leftarrow\) Calculate distance from \(before\_node\) to \(unserved\_customer\) \(cost\)\(\leftarrow\)\(node\_earliest\_start\_time\_to\_service\)\(\times\) distance if not payload capacity violation then Append(\(node\), \(cost\), \(position\)) to customer_cost endif endif endfor endfor if customer_cost!=[ ] then Append every customer in customer_cost at position else Append\(unserved\_customer\) to customer_to_added_new_route endif endfor while\(customer\_to\_added\_new\_route\)!=[ ] do \(new\_route\)\(\leftarrow\)[ ]  Append every customer in customer_to_added_new_route while payload-capacity violation endwhile Update\(served\) customers and unserved customers
```

**Algorithm 8**Best-Customer Insertion

```
Input:_served customers, unserved customers, routes customer_to_added_new_route \(\leftarrow\  
2. **Time-Window-Greedy-Customer Insertion:** Following the time window constraints, the proposed operator inserts each unserved customer into the first available position in the routes. The insertion decision is made by evaluating the latest start time to service (\(l_{i}\)) value of customer \(i\) and the travel time \(\left(t_{ij}\right)\) between customers \(i\) and \(j\). A feasible insertion is determined based on the condition \(\left(l_{i}+t_{ij}<l_{j}\right)\). Thus, instead of only considering the latest start time to service value, the travel time is also considered to obtain a suitable time window. The pseudocode is given in Algorithm 9. 3. **Time-Window-Feasible-Customer Insertion:** The proposed operator differs from the Time-Window-Greedy-Customer Insertion by first reordering the unserved customers based on their latest start time to service value. After sorting, the operator evaluates all feasible insertion positions across the available routes. The insertion process ensures that the updated route remains feasible in terms of both time window constraints and vehicle load capacity. The pseudocode is given in Algorithm 10. ```
Input:\(\mathit{served\ customers}\), unserved customers, routes \(\mathit{customer\_to\_added\_new\_route}\leftarrow\left[\ \right]\) \(\mathit{unserved\_customers}\leftarrow\mathbf{Sort}\) unserved customers by latest start time to service for each unserved_customer in unserved_customersdo forroute in routesdo if\(\mathit{best\_position}==\left[\ \right]\)then Append\(\mathit{unserved\_customer}\) to\(\mathit{customer\_to\_added\_new\_route}\) else Insert unserved_customer to\(\mathit{best\_position}\) endif endfor endfor while\(\mathit{customer\_to\_added\_new\_route}\leftarrow\left[\ \right]\)do new_route \(\leftarrow\left[\ \right]\)  Append\(\mathit{customer\_to\_added\_new\_route}\) while payload capacity violation endwhile Update\(\mathit{served\ customers}\) and unserved customers
```
**Algorithm 10**Time-Window-Feasible-Customer Insertion  
3. **Time-Window-Feasible-Customer Insertion:** The proposed operator differs from the Time-Window-Greedy-Customer Insertion by first reordering the unserved customers based on their latest start time to service value. After sorting, the operator evaluates all feasible insertion positions across the available routes. The insertion process ensures that the updated route remains feasible in terms of both time window constraints and vehicle load capacity. The pseudocode is given in Algorithm 10.