function s = simulatedannealing(inputcities,initial_temperature,cooling_rate,threshold,numberofcitiestoswap)
%模拟退火算法。参数有输入城市数据,初始温度,冷却速率,阈值和交换城市数量。
%该部分的算法参考了网络和计算机学会期刊上的多篇论文。
global iterations;
temperature = initial_temperature;
initial_cities_to_swap = numberofcitiestoswap;
iterations = 1;
complete_temperature_iterations = 0;
previous_distance = distance(inputcities);
while iterations < threshold
temp_cities = swapcities(inputcities,numberofcitiestoswap);
current_distance = distance(temp_cities);
diff = abs(current_distance - previous_distance);
if current_distance < previous_distance
inputcities = temp_cities;
if rem(iterations,100) == 0
plotcities(inputcities);
end
if complete_temperature_iterations >= 10
temperature = cooling_rate*temperature;
complete_temperature_iterations = 0;
end
numberofcitiestoswap = round(numberofcitiestoswap*exp(-diff/(iterations*temperature)));
if numberofcitiestoswap == 0
numberofcitiestoswap = 1;
end
previous_distance = current_distance;
iterations = iterations + 1;
complete_temperature_iterations = complete_temperature_iterations + 1;
else
if rand(1) < exp(-diff/(temperature))
inputcities = temp_cities;
if rem(iterations,100) == 0
plotcities(inputcities);
end
numberofcitiestoswap = round(numberofcitiestoswap*exp(-diff/(iterations*temperature)));
if numberofcitiestoswap == 0
numberofcitiestoswap = 1;
end
previous_distance = current_distance;
complete_temperature_iterations = complete_temperature_iterations + 1;
iterations = iterations + 1;
end
end
end
- 1
- 2
- 3
- 4
- 5
- 6
前往页