# Supplier Replacement Model in a One-Level Assembly System under Lead-Time Uncertainty
## 5 Experimental results  
The GA was coded in C++ and numerical experiments were performed on an Intel Core i5-2520M processor at 2.50 GHz clock-speed and with 4 GB of memory. The linear model in Equations (13)-(14) is solved by a commercial solver (CPLEX 12.6). The solution approach was tested on a randomly-generated instance set (\(I\)). We created 10 instance families as a function of component numbers \([10,20,\ldots,100]\), and 100 test instances were generated for each family. The input data for each instance was: unit component holding cost; unit finished product backlogging cost; additional purchasing cost per component per purchasing policy; and cumulative distribution function of lead times per component per purchasing policy. After some preliminary tests, parameter values were assigned as follows: population size (\(size_{pop}\)) to 100, maximum number of generations (\(Nb_{max}\)) to 1000, maximum number of iterations without improvement (\(nbIterMax_{NoImprovement}\)) to 50, probability of crossover (\(p_{co}\)) to 90% and probability of mutation (\(p_{m}\)) to 10%. The convergence and performance of the proposed algorithms were studied. The results were also compared with the bounds presented in the previous section. In Tables 3-6, the first column gives the number of components (suppliers) for each instance family, the second column gives the average number of iterations where the best solution was found and the third column gives the average gap between the best solution (\(best_{sol_{0}}\)) in the initial population and the best solution (\(best_{sol_{1000}}\)) found by the algorithm after 1000 generations (\(gap=\frac{best_{sol_{0}}-best_{sol_{1000}}}{best_{sol_{1000}}}\times 100\)). The next column provides the average gap between the best solution (\(best_{sol_{1000}}\)) found by the algorithm after 1000 generations and the best solution (\(best_{sol*}\)) among all versions of GA (\(gap*=\frac{best_{sol_{1000}}-best_{sol*}}{best_{sol*}}\times 100\)), i.e., the best known solution (BKS). Finally, the last column reports the average time to execute the algorithm. Table 3 reports the results of the genetic algorithm denoted as GA, i.e., without the complementary procedures described above (a heuristic to form the initial population and the perturbation procedure). It shows that even if there is a considerable improvement in the initial population, the gap between the solutions obtained and the BKS is still very large. The average gap on all the instances is 87.06%. Table 4 presents the results of the genetic algorithm noted \(GA_{P}\), i.e., with the perturbation procedure. There is only a very slight improvement, as the total average gap is no less than 86.14%. Table 5 demonstrates excellent performances of the genetic algorithm noted \(GA_{H}\). This algorithm includes the heuristic to design an initial population. It dramatically improves the quality of the solutions, as the total average gap to the BKS on all instances is reduced to only 3.92%. Finally, almost all the BKS were obtained with \(GA_{H+P}\) (Table 6), which achieves a total average gap of 0.67%. Tables 3-6 also show that even on the largest instances, the mean execution time of the \(GA_{H+P}\) is less than 1.6 seconds. \begin{table}
\begin{tabular}{c c c c c} \hline \hline
**Instance** & **Average Number** & **Mean Gap** & **Mean Gap \({}^{*}\)** & **CPU Time** \\
**Family** & **of Iterations** & **(\%)** & **from BKS (\%)** & **(s)** \\ \hline
10 & 115.50 & 66.33 & 3.93 & 0.32 \\
20 & 279.74 & 72.60 & 0.06 & 0.43 \\
30 & 422.37 & 72.65 & 0.00 & 0.53 \\
40 & 295.50 & 83.01 & 0.00 & 0.60 \\
50 & 609.03 & 75.06 & 0.03 & 0.63 \\
60 & 716.57 & 77.94 & 0.10 & 0.73 \\
70 & 781.95 & 80.60 & 0.18 & 0.83 \\
80 & 835.20 & 75.93 & 0.44 & 0.92 \\
90 & 892.58 & 76.28 & 0.64 & 1.01 \\
100 & 904.72 & 75.70 & 1.28 & 1.19 \\ \hline \hline \end{tabular}
\end{table} 
Table 6: Results obtained by \(GA_{H+P}\).