资源简介
通过matlab实现的蚁群算法的完整资源,里面包含三个文件,一个源程序.m文件,一个是命令行需要输入的代码,在一个就是文档结果;良心代码!
代码片段和文件信息
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(12
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4409 2017-02-07 15:27 蚁群算法完整matlab代码\ACATSP.m
文件 163 2017-02-07 15:35 蚁群算法完整matlab代码\命令行.txt
文件 2129 2017-02-07 15:36 蚁群算法完整matlab代码\运行结果.txt
目录 0 2017-02-07 15:36 蚁群算法完整matlab代码
----------- --------- ---------- ----- ----
6701 4
相关资源
-
SVPWM的simuli
nk仿真(附带Matlab funct - 相机标定源代码,c、matlab
- LMS算法及归一化LMS算法的MATLAB代码
- lmd算法MATLAB仿真程序
- matlab预处理共轭梯度法
- meanshift的matlab实现及2维图演示代码
- 利用matlab对瑞利衰落信道仿真
- 均匀球体与长方体重力异常正演模拟
- 小波降噪软硬阈值改进阈值matlab代码
- matlab处理Adams仿真KC结果生产报告的程
- 图像的面积计算
- 三电平逆变器
- matlab数据预测模型算法.rar
- 惯导IMU初始姿态解算粗对准MATLAB
- emd分解matlab程序172943
- 小波神经网络MATLAB代码.zip
- 现代控制系统第十二版配套matlab
- 三周期极小曲面建模代码
- 直方图均衡化Matlab源代码
- 基本Snake活动轮廓模型
- 汽车动力模型 发动机模型matlab/simul
-
VSG控制simuli
nk仿真 - 人造地震动matlab源代码
- 坐标轮换法
- 一维搜索——外推法
- 复杂网络最短路径matlab
- INS/GPS matlab仿真程序
- 8PSK理论误码率及误比特率
- 基于MATLAB GUI 界面设计解线性方程组
- 最小二乘影像匹配程序matlab
评论
共有 条评论