一、起源和原理
1、蚁群优化算法起源
蚁群优化(ant colony optimization, ACO)是20世纪 90年代初由意大利学者 M.Dorigo等通过模拟蚂蚁的 行为而提出的一种随机优化 技术。 最初用于求解旅行商问题, 现在已经成功用于许多组合优化问题 。
2、原理
蚁群优化算法作为一种全局最优化搜素方法,同遗传算法一样,灵感都来源于自然界,并有良好的搜素性能。然而,从数学的角度来理解分析它们的工作方式是很难的,因为这些算法都具有很复杂的随机过程。
ACO算法的过程具有一定的随机性,这就要求初始化蚂蚁的数量和更新信息素的次数必须足够的多,只有这样才能最终收敛到全局最优解。虽然这使得ACO算法的执行需要花费比较长的时间,但是算法具有找到全局最优解的能力,并且寻找最优解的能力比一般的算法要好。ACO算法的运行时间并不能简单地通过减少蚂蚁数量和运行次数来减少,这样会使得算法过于早熟,即蚂蚁会很快的全部集中在一条局部最优的路径上,而不是全局最优路径。当考虑像ACO算法这样的随机算法时,算法的运行时间通常被表示为一个随机变量来测量算法解决一个参数化问题所需要的执行步骤数。
AS算法对TSP的求解主要有两大步骤:
(1)路径构建
(2)信息素更新
当所有蚂蚁都构建完一条路径之后,算法 将根据AS中的信息素蒸发规则进行信息素的更新。
AS求解TSP的流程图和伪代码:
二、实验代码
%% 旅行商问题(TSP)优化
%% 清空环境变量
clear all
clc
%% 导入数据
load citys_data.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 = 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);