资源简介
根据手动设置的城市距离,自动根据蚁群算法找到最佳路径,通过实例演示该算法。
代码片段和文件信息
function [R_bestL_bestL_aveShortest_RouteShortest_Length]=ACATSP(CNC_maxmAlphaBetaRhoQ)
%%-------------------------------------------------------------------------
%% 主要符号说明
%% C n个城市的坐标,n×2的矩阵
%% NC_max 最大迭代次数
%% m 蚂蚁个数
%% Alpha 表征信息素重要程度的参数
%% Beta 表征启发式因子重要程度的参数
%% Rho 信息素蒸发系数
%% Q 信息素增加强度系数
%% R_best 各代最佳路线
%% L_best 各代最佳路线的长度
%%=========================================================================
%%第一步:变量初始化
n=size(C1);%n表示问题的规模(城市个数)
D=zeros(nn);%D表示完全图的赋权邻接矩阵
for i=1:n
for j=1:n
if i~=j
D(ij)=((C(i1)-C(j1))^2+(C(i2)-C(j2))^2)^0.5;
else
D(ij)=eps; %i=j时不计算,应该为0,但后面的启发因子要取倒数,用eps(浮点相对精度)表示
end
D(ji)=D(ij); %对称矩阵
end
end
Eta=1./D; %Eta为启发因子,这里设为距离的倒数
Tau=ones(nn); %Tau为信息素矩阵
Tabu=zeros(mn); %存储并记录路径的生成
NC=1; %迭代计数器,记录迭代次数
R_best=zeros(NC_maxn); %各代最佳路线
L_best=inf.*ones(NC_max1); %各代最佳路线的长度
L_ave=zeros(NC_max1); %各代路线的平均长度
while NC<=NC_max %停止条件之一:达到最大迭代次数,停止
%%第二步:将m只蚂蚁放到n个城市上
Randpos=[]; %随即存取
for i=1:(ceil(m/n))
Randpos=[Randposrandperm(n)];
end
Tabu(:1)=(Randpos(11:m))‘; %此句不太理解?
%%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游
for j=2:n %所在城市不计算
for i=1:m
visited=Tabu(i1:(j-1)); %记录已访问的城市,避免重复访问
J=zeros(1(n-j+1)); %待访问的城市
P=J; %待访问城市的选择概率分布
Jc=1;
for k=1:n
if length(find(visited==k))==0 %开始时置0
J(Jc)=k;
Jc=Jc+1; %访问的城市个数自加1
end
end
%下面计算待选城市的概率分布
for k=1:length(J)
P(k)=(Tau(visited(end)J(k))^Alpha)*(Eta(visited(end)J(k))^Beta);
end
P=P/(sum(P));
%按概率原则选取下一个城市
Pcum=cumsum(P); %cumsum,元素累加即求和
Select=find(Pcum>=rand); %若计算的概率大于原来的就选择这条路线
to_visit=J(Select(1));
Tabu(ij)=to_visit;
end
end
if NC>=2
Tabu(1:)=R_best(NC-1:);
end
%%第四步:记录本次迭代最佳路线
L=zeros(m1); %开始距离为0,m*1的列向量
for i=1:m
R=Tabu(i:);
for j=1:(n-1)
L(i)=L(i)+D(R(j)R(j+1)); %原距离加上第j个城市到第j+1个城市的距离
end
L(i)=L(i)+D(R(1)R(n)); %一轮下来后走过的距离
end
L_best(NC)=min(L); %最佳距离取最小
pos=find(L==L_best(NC));
R_best(NC:)=Tabu(pos(1):); %此轮迭代后的最佳路线
L_ave(NC)=mean(L); %此轮迭代后的平均距离
NC=NC+1; %迭代继续
%%第五步:更新信息素
Delta_Tau=zeros(nn); %开始时信息素为n*n的0矩阵
for i=1:m
for j=1:(n-1)
Delta_Tau(Tabu(ij)Tabu(ij+1))=Delta_Tau(Tabu(ij)Tabu(ij+1))+Q/L(i);
%此次循环在路径(i,j)上的信息素增量
end
Delta_Tau(Tabu(in)Tabu(i1))=Delta_Tau(Tabu(in)Tabu(i1))+Q/L(i);
%此次循环在整个路径上的信息素增量
end
Tau=(1-Rho).*Tau+Delta_Tau; %考虑信息素挥发,更新后的信息素
%%第六步:禁忌表清零
Tabu=zeros(mn); %%直到最大迭代次数
end
%%第七步:输出结果
Pos=find(L_best==min(L_best)); %找到最佳路径(非0为真)
Shortest_Route=R_best(Pos(1):) %最大迭代次数后最佳路径
Shortest_Length=L_best(Pos(1)) %最大迭代次数后最短距离
subplot(121) %绘制第一个子图形
DrawRoute(CShortest_Route) %画路线图的子函数
subplot(122) %绘制第二个子图形
plot(L_best)
hold on %保持图形
plot(L_ave‘r‘)
title(‘平均距离和最短距离‘) %标题
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3581 2010-04-21 15:41 蚁群算法实例\ACATSP.m
文件 590 2010-04-21 15:31 蚁群算法实例\DrawRoute.m
文件 753 2010-04-21 15:39 蚁群算法实例\main.m
目录 0 2010-04-21 20:22 蚁群算法实例
----------- --------- ---------- ----- ----
4924 4
- 上一篇:VirtualBox实现文件夹共享
- 下一篇:flash版简易迷宫
相关资源
- 基于蚁群算法的开采沉陷计算参数反
- 基于蚁群算法优化SVM的瓦斯涌出量预
- 蚁群算法论文合集
- 蚁群算法模型美赛B题C问,可直接调用
- 基于改进蚁群算法的车间调度研究方
- 基于蚁群算法优化控制的研究及其在
- 基于改进蚁群算法的QoS组播路由问题
- 51单片机程序大全
- 连续域蚁群算法
- 智能优化算法蚁群算法、狼群算法、
- 蚁群算法在机器人路径规划中的应用
- 蚁群算法.ppt蚁群算法.ppt
- 蚁群算法-车辆路径问题
- 线程池实现蚁群算法的简单并行
- 数学建模方法:蚁群算法
- Ant Colony Optimization书籍-英文版中文版
- 蚁群算法原理及其应用+2005[1].pdf,4
- 蚁群算法原理和应用段海滨版.pdf
- 蚁群算法原理及其应用.pdf
- 蚁群算法原理及其应用(完整版.高清
- 蚁群算法在配电网重构中的应用 书籍
- 蚁群算法原理及应用_段海滨_高清
- 车辆路径问题蚁群算法
- 蚁群算法研究综述 发展历史和特点
- 基于蚁群算法的二维路径规划算法5
- 蚁群算法-TSP旅行商
- 基于蚁群算法的三维路径规划算法
- 蚁群算法的三维路径寻优
- 各种智能算法程序以求函数最值为例
- 多约束下多车场车辆路径问题的蚁群
评论
共有 条评论