代码如下:
citys = [18.4700 95.1000
16.4700 94.6400
20.0900 94.5400
14.3900 93.3700
25.2300 97.2400
22.0000 93.0500
23.4700 92.0200
16.2000 96.2900
17.3000 97.3800
13.0500 98.1200
15.5300 97.3800
24.5200 95.5900
16.4100 97.1300
15.0900 92.5500
18.0000 98.0000];
%% 3、计算距离矩阵
D = Distance(citys); % 计算距离矩阵
n = size(D, 1); % 获取所有城市的个数
m = 50; % 蚂蚁对数,每对蚂蚁分为蚂蚁1与蚂蚁2、3、4、5
alpha = 1; % 信息素重要程度因子
beta = 5; % 启发函数重要程度因子
rho = 0.1; % 信息素挥发因子
Q = 1; % 常系数(信息素释放量)
Eta = 1./D; % 启发函数
Tau = ones(n,n); % 信息素矩阵
Table1 = zeros(m,n); % 蚂蚁1路径记录表
Table2 = zeros(m,n); % 蚂蚁2路径记录表
Table3 = zeros(m, n); % 路径记录表
Table4 = zeros(m, n); % 路径记录表
Table5= zeros(m, n); % 路径记录表
iter = 1; % 迭代次数初值
iter_max = 200; % 最大迭代次数
Route_best1 = zeros(iter_max,n); % 蚂蚁1各代最佳路径
Route_best2 = zeros(iter_max,n); % 蚂蚁2各代最佳路径
Route_best3 = zeros(iter_max,n); % 蚂蚁3各代最佳路径
Route_best4 = zeros(iter_max,n); % 蚂蚁4各代最佳路径
Route_best5 = zeros(iter_max,n); % 蚂蚁5各代最佳路径
Length_best = zeros(iter_max,1); % 各代最佳路径的长度
Length_ave = zeros(iter_max,1); % 各代路径的平均长度
while iter <= iter_max
start = ones(m,1)+1; %初始出发城市为2
Table1(:,1) = start;
Table2(:,1) = start;
Table3(:,1) = start;
Table4(:,1) = start;
Table5(:,1) = start;
citys_index = 1:n;
% 逐个蚂蚁路径选择
for i = 1:m
% 逐个城市路径选择
for j = 2:n
tabu1 = Table1(i,1:(j - 1)); %蚂蚁1已访问的城市集合
tabu1(tabu1==0) = []; %把表中的0元素舍去,因为无意义
tabu2 = Table2(i,1:(j - 1)); %蚂蚁2已访问的城市集