MATLAB蚁群算法解决旅行商问题
问题
一个商品推销员要去以下城市推销商品,该推销员从A城市出发,需要经过所有城市后,回到出发地。应如何选择行进路线,以使总的行程最短。
城市 | 经度 | 纬度 |
---|---|---|
A | 66.8300000000000 | 25.3600000000000 |
B | 61.9500000000000 | 26.3400000000000 |
C | 40 | 44.3900000000000 |
D | 24.3900000000000 | 14.6300000000000 |
E | 17.0700000000000 | 22.9300000000000 |
F | 22.9300000000000 | 76.1000000000000 |
G | 51.7100000000000 | 94.1400000000000 |
H | 87.3200000000000 | 65.3600000000000 |
I | 68.7800000000000 | 52.1900000000000 |
J | 84.8800000000000 | 36.0900000000000 |
K | 50 | 30 |
L | 40 | 20 |
M | 25 | 26 |
蚁群算法概述
每只蚂蚁带着等量的信息素出发,并均匀地将信息素撒在路线上。所以,对比两条不同的路径,信息素的量相同,而长度不同,则短的路径有更浓的信息素。同样,蚂蚁也会倾向选择信息素更浓的路径。但同时保留例外情况,蚂蚁只是大概率选择信息素更浓的路径,小概率选择其他路径。信息素随着后面来的蚂蚁会被累加,也随着时间增加而挥发、减少。
MATLAB代码:
%% ants for tsp
% changed by: MingchongLi
% date: 2022/2/14
%% preset
clear;clc;
t0=clock;
% 坐标:
Coord = [
66.8300 25.3600
61.9500 26.3400
40.0000 44.3900
24.3900 14.6300
17.0700 22.9300
22.9300 76.1000
51.7100 94.1400
87.3200 65.3600
68.7800 52.1900
84.8800 36.0900
50.0000 30.0000
40.0000 20.0000
25.0000 26.0000];
N = size(Coord,1);
for i = 1 : N
scatter(Coord(i,1),Coord(i,2),'b');
hold on
text(Coord(i,1)+1,Coord(i,2)+1,num2str(i))
end
%% 计算各个城市之间的距离
D = zeros(N,N);
for i = 1:N
for j = 1:N
if i ~= j
D(i,j) = sqrt(sum((Coord(i,:) - Coord(j,:)).^2));
else
D