一、蚁群算法原理介绍
定义:
蚁群算法(AG)是一种模拟蚂蚁觅食行为的模拟优化算法,它是由意大利学者Dorigo M等人于1991年首先提出,并首先使用在解决TSP(旅行商问题)上。
之后,又系统研究了蚁群算法的基本原理和数学模型.
基本流程:
用一只蚂蚁的行走路径代表一个可行解;
1、确定迭代周期;
2、确定蚂蚁数;
3、对每只蚂蚁;
3.a、随机选择起点;
3.b、选择下一步;
3.b.a、根据所有与当前节点有关的路径上的信息素多少,决定下一步,一般信息素越多,选择该路径的概率越高;
3.b.b、蚂蚁有一定概率选择错误,即随机选择下一步;
3.c、选择后,在选择的路径上按照一定规则留下一定量的信息素;
3.d、最终的蚂蚁路径就是本次搜索的最佳路径;
4、等待周期结束;
二、主要源代码
%% 计算城市间相互距离
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 = 5; % 启发函数重要程度因子
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
fprintf('迭代第%d次\n',iter);
% 随机产生各个蚂蚁的起点城市