1.基本原理
蚁群算法的基本原理来源于自然界蚂蚁觅食的最短路径原理,蚂蚁在运动过程中,能在其它过的路径上释放一种蚂蚁特有的分泌物–信息素来进行信息传递。而且蚂蚁在运动过程中能够感知这种物质。当一些路径上通过的蚂蚁越来越多时,其留下的信息素也越来越多,以致信息素强度增大,所以后面的蚂蚁选择选该路径的概率也越高。
2.算法流程
-
AS算法对TSP的求解主要有两大步骤:
1.路径建构
对于TSP问题,设蚂蚁群体中蚂蚁的数量为m,城市的数量为n,城市i与城市j之间的距离为dij,t时刻城市i与城市j连接路径上的信息素浓度为 Tij。初始时刻,蚂蚁被放置在不同的城市里,且各城市键连接路径上的信息素浓度相同。然后蚂蚁将按一定概率选择线路,设蚂蚁k当前所在城市为i,则其选择城市j作为下一个访问对象的概率为
-
n(i,j)为启发函数,表示蚂蚁从城市i转移到城市j的期望;
-
α为信息素重要程度因子
-β为启发函数因子
2.信息素更新
这里m是蚂蚁个数, ρ是信息素的蒸发率,规定0≤ ρ≤1,在AS中通常设置为 ρ =0.5,Δτ ij 是第k只蚂蚁在它经过的边上释放的信息素量,它等于蚂蚁k本轮构建路径长度的倒数。C k 表示路径长度,它是R k 中所有边的长度和。
- 算法流程
3.蚁群算法实现
3.1 算法设计步骤
- 数据准备
- 计算城市间的相互距离
- 初始化参数
- 迭代寻找最佳路径
- 结果显示
3.2 代码实现
%% 旅行商问题(TSP)优化
%% 清空环境变量
clear all
clc
%% 导入数据
load citys_data1.mat
%% 计算城市间相互距离
fprintf('Computing Distance Matrix... \n');
n = size(citys,1);
D = zeros(n,n);
for i = 1:n
for j = 1:n
if i ~= j
D(i,j) = sqrt(sum((citys(i,:) - citys(j,:)).^2));
else
D(i,j) = 1e-4;
end
end
end
%% 初始化参数
fprintf('Initializing Parameters... \n');
m = 50; % 蚂蚁数量
alpha = 1; % 信息素重要程度因子
beta = 3; % 启发函数重要程度因子
rho = 0.1; % 信息素挥发因子
Q = 1; % 常系数
Eta = 1./D; % 启发函数
Tau = ones(n,n); % 信息素矩阵
Table = zeros(m,n); % 路径记录表
iter = 1; % 迭代次数初值
iter_max = 150; % 最大迭代次数
Route_best = zeros(iter_max,n); % 各代最佳路径
Length_best = zeros(iter_max,1); % 各代最佳路径的长度
Length_ave = zeros(iter_max,1); % 各代路径的平均长度
%% 迭代寻找最佳路径
figure;
while iter <= iter_max