5.2. Parameter Settings
The main parameters of our simulated annealing implementation were the cooling factor
and the number of iterations
I, which were executed at each temperature. Based on the recommendations from the SA literature [
69,
70], we used the following values for these parameters:
and
.
Our VNS algorithm was configured by setting the values of parameters
,
, and
, which define the minimum and maximum size of the neighborhood, and the parameter
, which controls switching to the next neighborhood. We conducted some experiments to find good settings for the VNS parameters. We examined the performance of SA-VNS on a training dataset consisting of five problem instances of size 100 and five instances of size 200. These instances were generated randomly using the same procedure as described in
Section 5.1. Certainly, the training sample was disjoint from the set of instances used in the main experiments. We did not include large instances (e.g., with
) in the training dataset. This decision was motivated by two reasons. First, our comparison of the SA-VNS algorithm with state-of-the-art methods was limited to instances containing at most 200 activities. Second, incorporating large-scale instances into the parameter tuning of SA-VNS would require substantial computational resources. Our parameter sensitivity analysis was based on a simple procedure. We tested a number of predefined values of one parameter while fixing the other VNS parameters at reasonable values, which were chosen during preliminary experimentation. For each parameter setting and each instance, we performed 10 independent runs of SA-VNS and computed the average objective function value over these runs. The time limit per run was set to 5 s for
and 20 s for
. The experimental results show that VNS is robust in finding good solutions for a rather wide range of parameter values. Our first step in parameter tuning was to select a good value for
. We ran SA-VNS with
(note that
cannot exceed
). Good quality solutions were obtained for
. A slightly better performance was observed for
. SA-VNS with
obtained the best average values for 7 (out of 10) instances. Results of this kind for other values of
were worse: 0, 3, and 4 instances for
,
, and
, respectively. We thus fixed
at
. Next, we examined the following values of the parameter
:
, and
(we remind that
). The results were incredibly similar for the
values between
and
. The algorithm with
performed equally well for instances with
and marginally worse for instances with
. We decided to fix
at
. Furthermore, we evaluated the effect of the parameter
on the performance of SA-VNS. We experimented with the following values for
:
, and 50. The results have shown that SA-VNS is not sensitive to the values of
in the range 1 to 20. The performance of SA-VNS started to deteriorate at
. Based on these findings, we pretty arbitrarily set
to 5. In the next experiment, we assessed the influence of the parameter
on the quality of solutions. We ran SA-VNS with
. We found that the algorithm is fairly robust for
values in the range 3 to 20. The performance of SA-VNS decreased for
and
. Its performance rapidly declined for
. Based upon these results, we set
to 5, which is the middle element in the list
, and 20.
To finish configuring our SA and VNS hybrid, we needed to set the CPU quota parameter
. This parameter serves for dividing the processor time resources between the SA and VNS algorithms (see
Section 2). To choose a proper value of
, we ran SA-VNS on the same set of instances as before. We varied
from 0 to 1 in increments of
. For each FLMP instance in the training set, the accuracy of solutions produced by SA-VNS was measured using the difference between the average objective function value over 10 runs and the value of the best solution obtained from all runs of SA-VNS for all values of
. Let us denote by
this difference averaged over all instances in the set. In
Figure 3,
is plotted as a function of
. We note that the pure VNS algorithm is obtained by setting
to 0, and the pure multi-start SA algorithm is activated by setting
to 1. As shown in
Figure 3, we see that the pure VNS is the least efficient SA-VNS configuration. However, the pure multi-start SA is not the best choice either. We observe that reasonable values of the parameter
fall in the interval
. With these results, we fixed
to
, thus giving
of the time limit to each of the two components of the hybrid algorithm.
5.3. Numerical Results
We now provide computational comparisons between our hybrid heuristic and state-of-the-art algorithms for the FLMP. One such algorithm is the insertion-based simulated annealing algorithm of Lin et al. [
29]. These authors use the name ISA to refer to this algorithm. We decided to keep this name. Lin et al. [
29] also proposed an insertion-based genetic algorithm (IGA) for solving the FLMP. According to the computational experiments in [
29], both algorithms, ISA and IGA, performed equally well. For comparison purposes, we implemented the ISA algorithm. During the implementation, we strictly followed the description provided in [
29], particularly the pseudocode presented in Tables I and III of that paper. Both the SA-VNS and ISA algorithms were executed on the same hardware under single-threaded settings. We note that our SA-VNS algorithm and IGA can be indirectly compared by confronting the results of this section with those presented by Lin et al. [
29]. The comparison also includes the imperialist competitive algorithm of Khanmirza et al. [
30].
By running SA-VNS and ISA on the same hardware platform (Intel Core i5-6200U CPU), we ensured the consistency of the computational conditions. For large-scale problem instances, the ISA algorithm was observed to require substantially longer runtimes to converge to a reasonable solution. Therefore, while a fixed maximum CPU time was imposed on our method, ISA was allowed to run until its own termination criterion was met, which in many cases exceeded the imposed time limit. This choice was made to avoid penalizing ISA due to premature termination and to provide a conservative and fair comparison.
The results of solving the benchmark FLMP instances from the literature are reported in
Table 3. They were obtained by running each of the three algorithms 30 times per instance. The second column of the table gives the number of activities. The next nine columns contain the results of the ICA, ISA, and SA-VNS algorithms. The value of the best solution out of 30 runs is denoted by
, and the average value of 30 solutions found by an algorithm is denoted by
. Columns labeled “Time” show the average running time (in seconds) to the best solution in a run of an algorithm. The results of the ICA (Columns 3–5 of
Table 3) are taken from the paper of Khanmirza et al. [
30]. These authors ran ICA on a computer with an Intel Core i7 (3.70 GHz) processor. (Intel Corporation, Santa Clara, CA, USA) However, they provided only an Intel Core brand modifier i7, and not the full processor name. Therefore, the comparison of SA-VNS and ICA is somewhat complicated. The single-thread rating of our PC (Intel Core i5-6200U, 2.30 GHz (Intel Corporation, Santa Clara, CA, USA)) is 1575 (for example, these data are available from
https://www.cpubenchmark.net/singleCompare.php (accessed on 7 January 2026)). One might expect that the single-thread performance of the computer used by Khanmirza et al. [
30] is comparable with, or better than, our laptop’s CPU. If so, our system would have no speed advantage over the computer used in [
30]. In any case, since an exact comparison is not possible, the reported running times are provided in
Table 3 solely for reference.
We see from
Table 3 that all the algorithms performed well on the benchmark problems. They easily achieved the best result in all runs for each problem instance (except ICA for
austin’96, for which
). It can also be observed that SA-VNS took much less time than ISA for the five larger instances. The overall conclusion from the experiment is that the benchmark FLMP instances were incredibly easy to solve.
Table 4 and
Table 5 summarize the results of SA-VNS and ISA on the randomly generated problem instances of a size up to
. The first column of the tables contains the names of the instances. The first number within the name denotes the number of activities. The second column shows the density of the input DSM. The
values in
Table 4 are obtained from 10 independent runs of ISA (Column 3) and SA-VNS (Column 5). We also provide, for each algorithm, the success rate (denoted as SR), which is the fraction of times the algorithm outputs a solution of value
(Columns 4 and 6 in
Table 4).
Table 5 shows the
value, the standard deviation of the objective function values,
, and the average running time (in seconds) to the best solution in a run for ISA (Columns 3–5) and for SA-VNS (Columns 6–8). Boldface is used to highlight those cases where SA-VNS obtained better
(
Table 4) or better
(
Table 5) values than ISA. We can observe from the tables that our algorithm demonstrates a good performance. Compared with ISA regarding
, SA-VNS outperformed in 13 cases and tied in the remaining 22 cases. Notably, SA-VNS achieved a perfect success rate of 10/10 for a larger number of instances than ISA (31 vs. 14). From
Table 5, we can see that the dominance of SA-VNS is even more pronounced regarding the mean performance. It produced better average results than ISA for 21 problem instances, including all instances of size 100 and more. We notice that for
and the four instances with
, both algorithms found the best solution in each of the 10 runs. For illustration purposes, as shown in
Figure 4, we show the plots of the objective function value versus the run number for the two problem instances used in the experiment:
fp-150-2 and
fp-200-5. As can be seen, SA-VNS consistently yielded better quality solutions than the ISA algorithm. The results in
Table 5 also indicate that the SA-VNS algorithm outperformed ISA with generally smaller standard deviations of the objective values.
Comparing the running times, we observe the overwhelming superiority of SA-VNS.
Figure 5 shows the convergence speed comparison between the two algorithms for a couple of problem instances:
fp-60-8 and
fp-100-1. We see that SA-VNS identifies the best solution particularly quickly, whereas ISA needs a much longer time to do so. For instances with
, the average time taken by ISA and SA-VNS is
s and
s, respectively. The speed-up factor of 288 on this subset of instances was achieved.
When the size of the FLMP increases beyond 200 activities, the execution time of the ISA algorithm becomes unreasonably long. Therefore, we did not try to include ISA in our experiments with problem instances of a size greater than 200. Instead, for the sake of comparison, we ran SA and VNS algorithms on these instances. The results are presented in
Table 6 and
Table 7. Their first column identifies the problem instance. The labels of the columns for each algorithm (SA, VNS, and SA-VNS) have the same meaning as those for the algorithms in
Table 4 and
Table 5. The bottom row of each table shows the results averaged over all 25 instances. The best value of
in
Table 6 and
in
Table 7 for each instance is highlighted in bold. From the tables, we can see that SA-VNS outperformed the other two algorithms. Both SA-VNS and VNS were able to produce the best solution for 12 problem instances. However, SA-VNS achieved the best average result for 20 instances, whereas VNS performed this for one instance only (as highlighted in
Table 7). Inspecting
Table 6, one can see that the success rate of the algorithms for most instances (in the case of SA, for all of them) was 1. This suggests that the FLMP instances containing 250 or more activities were quite difficult for the algorithms involved in our experiments. We also observe that the SA algorithm found the best solution and the best average cost solution for 2 and 4 instances, respectively. It can be concluded that both SA-VNS and SA have the ability to obtain better average results than VNS. Moreover, SA and SA-VNS exhibited much smaller standard deviation values compared with those obtained from VNS. Another observation is that all three algorithms are comparable with respect to computation time. This is illustrated by the plots in
Figure 6, which show the average computation time as a function of the number of activities. For larger problem instances, the VNS algorithm is only slightly slower than SA and SA-VNS. Overall, we can conclude from the tables that the combination of the variable neighborhood search method with the simulated annealing technique resulted in a promising framework for solving the FLMP.
To ensure a more accurate assessment of the results, we applied the Wilcoxon signed-rank test for each pair of algorithms. The pairwise comparison results are summarized in
Table 8. The column labeled OFV indicates which objective function values were compared: best solution values (
in
Table 6) in the first row for each pair of algorithms and average solution values (
in
Table 7) in the second row. The next three columns report the number of instances on which the first algorithm in the pair found a better (#wins), an equally good (#ties), or an inferior (#losses) solution when compared with the second algorithm. The penultimate column of the table shows the
p-values obtained using the Wilcoxon test. For the last column, we used a standard significance level of
to declare whether a significant difference existed or not. The value “Yes” means that the results of the first algorithm were better than those of the second algorithm, while the value “No” means that there was no statistical difference between the results of the two algorithms. A quick inspection of
Table 8 shows that our SA-VNS hybrid technique was superior to the SA and VNS algorithms. The latter, in particular, exhibited poor performance regarding the average objective function value. These conclusions echo the findings in
Section 5.2 (see
Figure 3). We also applied the Friedman test followed by the Nemenyi post hoc test at a significance level of
. The computed Friedman statistics were
and
for the results reported in
Table 6 and
Table 7, respectively, both of which exceeded the critical value of
. Therefore, we conclude that the objective values obtained by the compared algorithms were statistically significantly different. The Nemenyi post hoc test further confirmed statistically significant pairwise differences between SA, VNS, and SA-VNS. Specifically, the ranking from best to worst was SA-VNS, VNS, and SA for the best objective values, and SA-VNS, SA, and VNS for the average objective values.
As shown in
Figure 7, we illustrated the performance of SA-VNS on a couple of FLMP instances,
fp-200-1 and
fp-500-2, from our testbed. In each iteration of SA-VNS, the SA algorithm was first applied. Let us assume that the objective function value achieved by SA is denoted by
. In the second stage of the iteration, the SA solution can be improved by executing the VNS algorithm. We denote the objective function value of the resulting solution by
(thus, the objective function value achieved by SA-VNS equals the minimum of
when it has taken over all SA-VNS iterations).
Figure 7 depicts the plots of
versus the SA-VNS iteration number. The average values of
are 3.29 and 7.05 for
fp-200-1 and
fp-500-2, respectively. They are calculated over 22 SA-VNS iterations for
fp-200-1 and 39 SA-VNS iterations for
fp-500-2. The SA-VNS algorithm found the best solution for
fp-200-1 in Iteration No. 9 and the best solution for
fp-500-2 in Iteration No. 19. The corresponding values of
in the figure are designated by a dot enclosed in a circle.
The two key components of the VNS algorithm are the shaking and local search mechanisms. To assess the contribution of each component, we conducted an additional experiment. In one variant of the SA-VNS algorithm, the shaking procedure was removed; instead, each VNS iteration started from a randomly generated permutation (we refer to this variant as SA-VNS-v1). In another variant, we replaced our fast local search technique (described in Algorithm 8) with a straightforward local search implementation, in which the objective function values of the examined solutions were computed directly using Equation (
1). In this version, denoted SA-VNS-v2, the shaking mechanism was retained.
We compared the original algorithm and its two variants on a set of FLMP instances containing between 150 and 300 activities. The experimental results are reported in
Table 9 and
Figure 8. The results indicate that SA-VNS-v1 and SA-VNS-v2 achieved the same
values as SA-VNS for only 7 and 6 out of 20 instances, respectively; for the remaining instances, they failed to match the performance of SA-VNS. An examination of the
values shows that SA-VNS consistently outperformed SA-VNS-v1 on average, while SA-VNS-v1, in turn, outperformed SA-VNS-v2 across all problem instances in the dataset. Part (a) of
Figure 8 shows that SA-VNS-v2 exhibited a larger standard deviation of objective function values compared with SA-VNS and SA-VNS-v1, whereas the latter two algorithms are comparable regarding this metric. As shown in part (b) of
Figure 8, all three algorithms required very similar computation times. Overall, these results demonstrate that SA-VNS significantly outperforms its variants SA-VNS-v1 and SA-VNS-v2.