Two methods were used to create the initial tours. In most cases a random
tour was used, generated by repeatedly picking random cities from the pool
of unallocated ones. An example of this is given in Figure 3.1.
| average relative error (%) and mean deviation |
trials for average rel. err. to reach greedy level
(30.8%) |
trials for average rel. err. to reach 1% |
CPU time (secs) |
|
|---|---|---|---|---|
| random sampling |
117.1 +/- 2.2 |
-- |
-- |
9.1 |
| SA (swapping) |
22.8 +/- 11.4 |
2381 |
-- |
12.1 |
| SA (reverse/shift) |
0.2 +/- 0.2 |
491 |
3475 |
13.2 |
| SA with greedy seed (reverse/shift) |
0.7 +/- 0.9 |
0 |
5333 |
13.2 |
Figure 3.6 shows the optimisation over 100,000 trials (100 generations).
The difference between a constant high temperature and constant zero temperature
is surprisingly little. There is a slight suggestion that high temperature
does better at high errors, and low temperature does better at low errors,
as expected from the concept of annealing.
The insensitivity to temperature could be due to the population size providing
a buffer against selecting poor tours. To explore further the role of temperature
(as well as the role of population), comparisons of high and zero temperature
were done with several population sizes. The results are shown in Figure 3.7.
The best performance from Boltzmann 10% selection seems to come from zero
temperature. This is equivalent to a basic scheme of incrementing fitness
of the better tour when each is compared with another randomly chosen. A simpler
scheme along these lines is rank selection, so that was implemented. Rank
selection also solves the sampling problem of small populations.| population and selection method |
generations |
average relative error (%) and mean deviation |
trials for average rel. err. to reach greedy level
(30.8%) |
trials for average rel. err. to reach 1% |
CPU time (secs) |
time to reach 1% (secs) |
|---|---|---|---|---|---|---|
| Simulated Annealing |
-- |
0.2 +/- 0.2 |
491 |
3,475 |
13.2 |
4.58 |
| p=50, Boltzmann 10% |
100 |
0.3 +/- 0.2 |
20,000 |
50,000 |
2.7 |
1.35 |
| p=25, Boltzmann 10% |
200 |
0.2 +/- 0.2 |
10,500 |
31,000 |
1.5 |
0.47 |
| p=5, Boltzmann 10% |
1000 |
0.7 +/- 0.2 |
3,900 |
62,000 |
0.5 |
0.31 |
| p=50, rank |
100 |
0.5 +/- 1.6 |
15,000 |
36,000 |
0.2 |
0.07 |
| p=25, rank |
200 |
0.9 +/- 0.5 |
8,000 |
27,000 |
0.2 |
0.05 |
| p=5, rank |
1000 |
0.5 +/- 0.7 |
2,000 |
9,000 |
0.2 |
0.02 |
| p=1, rank |
5000 |
1.2 +/- 0.8 |
820 |
-- (6,000 to 1.2%) |
0.2 |
-- (0.01 to 1.2%) |
| p=50, Boltzmann 10% with greedy seed |
100 |
0.5 +/- 0.7 |
0 |
21,000 |
2.7 |
0.57 |