## 5 Solving Methods
### Mo-Vnssa  
The overall framework of the MO-VNSSA algorithm starts by loading the initial solution of the construction heuristic (Algorithm 2). Then a set of \(Nb\_N\) neighborhood structures is generated. For each selected structure, the algorithm runs the Local Search based on the Simulated Annealing (SA) algorithm for \(Max\_VNS\) iterations. At each iteration the temperature parameter \(T\) is set to its initial value \(T\_Max\). During the search, the temperature \(T\) is decreased by \(\Delta t\) after performing each Local Search move (Insertion, Swap and Insertion\(\rightarrow\)Swap) with equal probabilities for each move. The new generated solutions (\(S^{\prime}\)) are accepted as current solution with a probability \(p\):  
\[p=exp\left(\frac{S-S^{\prime}}{T}\right)\]  
At the beginning, when \(T\) is still higher, the algorithm tends to accepts deteriorating moves. Then, as the temperature \(T\) is decreased, the algorithm becomes very selective on the new generated solutions (\(S^{\prime}\)). This process is repeated for \(Max\_VNS\) iterations and for each neighborhood structure. A shaking of the PI-containers assignments between the trucks with the same destination is performed after \(Max\_Shake\) iterations. At each iteration of the Simulated Annealing, a random solution is generated in the current neighborhood structure, the generated solution (\(S^{\prime}\)) is accepted with the probability \(p\) as the current solution (\(S\)). Then, if \(S^{\prime}<S_{BEST}\), \(S^{\prime}\) is considered as the current best solution found. The inner SA loop, which is repeated for \(Max\_VNS\) iterations, stops once \(T\leq\epsilon\). This process is repeated for each neighborhood structure. The algorithm stops after exploring all the neighborhood structures.  
Figure 3: Neighborhood operators in Multi-Objective Variable Neighborhood Search hybridized with Simulated Annealing (MO-VNSSA) and Multi-Objective Variable Neighborhood Search hybridized with Tight Search (MO-VNSSTS): (**a**) Insertion (**b**) Swap (**c**) Insertion\(\rightarrow\)Swap.  
```
1:Input: Initial solution \(S_{0}\) generated by the heuristic (\(H_{0}\))
2:Set: Max_VNS, Nb_N, Max_Shake
3:Set: \(T\), \(At\), \(T\_Max\) // SA parameters
4:Set: \(S_{BEST}=S_{0}\) // Best solution
5:Set: \(S=S_{0}\) // Current solution
6:Generate a set of Nb_N neighborhood structures
7:for each neighborhood structure do
8:for each Max_VNS iterations do
9:\(T=T\_Max\) // Reset \(T\)
10:while\(T>\epsilon\)do // \(\epsilon\) is very small float \(\epsilon=1\times 10^{-5}\)
11: Perform one of the LS moves on trucks' sequence: Insertion/Swap/Insertion\(\rightarrow\)Swap in the selected neighborhood
12: Calculate the objective function of the new solution \(S^{\prime}\)
13:\(r=Rand[0,1]\) // r is random float in \([0,1]\)
14:if\(r<Exp((S-S^{\prime})/T)\)then
15:\(S=S^{\prime}\)
16:if\(S_{BEST}>S^{\prime}\)then
17:\(S_{BEST}=S^{\prime}\)
18:else
19:\(T=T-\Delta t\) // Reduce \(T\)
20:endif
21:else
22: Cancel the Local Search move
23:\(T=T-\Delta t\)
24:endif
25:endwhile
26:endfor
27: Shake the PI-containers assignments between the trucks with the same destination after each Max_Shake iterations
28:endfor
29:Return :\(S_{BEST}\)
```  
**Algorithm 2** Overview of the hybrid MO-VNSSA algorithm