%% 第22章 蚁群算法的优化计算——燃油运输问题
%% 清空环境变量
clear all
clc
%% 导入数据
X=xlsread('e:x100.xls');
dem=xlsread('e:dem100.xls');
cap=100;
%% 计算城市间相互距离
n = size(X,1);
D =Distanse(X);
%% 初始化参数
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 = 200; % 最大迭代次数
Route_best = zeros(iter_max,n); % 各代最佳路径
Length_best = zeros(iter_max,1); % 各代最佳路径的长度
Length_ave = zeros(iter_max,1); % 各代路径的平均长度
%% 迭代寻找最佳路径
while iter <= iter_max
iter
% 初始起点城市为炼油厂1
Table(:,1) = ones(m,1);
% 构建解空间
citys_index = 1:n;
% 逐个蚂蚁路径选择
Table=select(Table,citys_index,Tau,Eta,alpha,beta,m,n);
% 计算各个蚂蚁的路径长度
Length=PathLength(dem,D,Table,cap);
% 计算最短路径距离及平均距离
[Route_best,Length_best]=genxin(iter,Length,Table,Length_best,Route_best);
Length_ave(iter) = mean(Length);
% 更新信息素
Tau=gengxinT(Table,Q,Length,rho,n,m,Tau);
% 迭代次数加1,清空路径记录表
iter = iter + 1;
Table = zeros(m,n);
end
%% 结果显示
[Shortest_Length,index] = min(Length_best);
Shortest_Route = Route_best(index,:);
disp(['最短距离:' num2str(Shortest_Length)]);
disp(['最短路径:' num2str([Shortest_Route Shortest_Route(1)])]);
%%绘出最优路径
OutputPath(Shortest_Route,dem,cap);
%% 绘图(最优路径图)
DrawPath(Shortest_Route,X,dem,cap);
%%绘图每一代的平均值
plot(Length_ave);
xlabel('代数')
ylabel('各代路径平均值')
title('蚁群算法的燃油运输问题各代路径的均值')
%%
% <html>
% <table width="656" align="left" > <tr><td align="center"><p align="left"><font size="2">相关论坛:</font></p><p align="left"><font size="2">Matlab技术论坛:<a href="http://www.matlabsky.com">www.matlabsky.com</a></font></p><p align="left"><font size="2">M</font><font size="2">atlab函数百科:<a href="http://www.mfun.la">www.mfun.la</a></font></p></td> </tr></table>
% </html>