1.蚁群优化算法理解
蚁群优化(ant colonyoptimization, ACO)是20世纪90年代初由意大利学者M.Dorigo等通过模拟蚂蚁的行为而提出的一种随机优化技术。
蚁群优化算法是仿照大自然蚂蚁觅食的行为寻找最优解的一种算法,在寻找食物的过程中,蚂蚁们会朝着不同的路径走,一边走一边留下气味信息给后来的同伴,距离食物最近的一条路走的蚂蚁会越来越多,气味也会越来越浓,而路程较远的路因为走的蚂蚁越来越少,气味也会慢慢挥发掉变淡,最终所有蚂蚁都走在;离食物最短的一条路上,从而达到寻求最短路径的目的。
蚁群优化算法也正是应用了这个过程,以求:从出发地不重复的经过n个城市回到出发地,路径最短的问题(TSP问题)为例。
2.算法基本流程
1、路径构建:
每只蚂蚁选择一个城市作为出发城市,维护一个路径记忆向量来存放该蚂蚁经过的城市,按随机比例规则选择下一个要到达的城市。
设蚂蚁k当前所在的城市为i,选择城市j作为下一个访问对象的概率为:
2、信息素更新:
每一轮过后,问题空间中所有路径上的信息素都会政法,我们为所有边上的信息素呈上一个小于1的常数,随后所有蚂蚁根据自己构建的路径长度在他们本轮经过的边上释放信息素。蚂蚁构建的路径越短、释放的信息素就越多:
m是蚂蚁个数。p是信息的蒸发率(AS中通常设为0.5),Ck表示路径长度。
3.AS求解TSP的流程图
3.MATLAB代码实现
%% 旅行商问题(TSP)优化
%% 清空环境变量
clear all
clc
%% 导入数据
%load citys_data.mat
load city_1.mat%使用rand函数随机生成50*2个数据
%% 计算城市间相互距离
fprintf('Computing Distance Matrix... \n');
%n = size(citys,1);
n = size(city,1);
D = zeros(n,n);
for i = 1:n
for j = 1:n
if i ~= j
D(i,j) = sqrt(sum((city(i,:) - city(j,:)).^2));%D(i,j) = sqrt(sum((citys(i,:) - citys(j,:)).^2));
else
D(i,j) = 1e-4;
end
end
end
%% 初始化参数
fprintf('Initializing Parameters... \n');
m = 40; % 蚂蚁数量50
alpha = 0.7; % 信息素重要程度因子1
beta = 5; % 启发函数重要程度因子5
rho = 0.6; % 信息素挥发因子0.1
Q = 1; % 常系数
Eta = 1./D; % 启发函数
Tau = ones(n,n); % 信息素矩阵
Table = zeros(m,n); % 路径记录表
iter = 1; % 迭代次数初值
iter_max = 100;