资源简介
蚁群算法 万能通用代码 最短路径 matlab万能代码
代码片段和文件信息
function ACOfirst()
clear;
clc;
%author Xing Peng
%@copyright reserved
%% 测试矩阵D
D=[0 1 3 0; 1 0 1 2; 3 1 0 5; 0 2 5 0; ];
%% get 邻接矩阵
%D=getD();
%% 将不连通赋值为0
N=size(D1);
for i=1:N
for j=1:N
if D(ij)==inf
D(ij)=0;
end
end
end
%%
%% 起点与终点
S=1 ; % S 起始点(最短路径的起始点)
E=N; % E 终止点(最短路径的目的点)
%%
Tau=ones(NN);% Tau 初始信息素矩阵(认为前面的觅食活动中有残留的信息素)
Tau=8.*Tau;
K=10; % K 迭代次数(指蚂蚁出动多少波)
M=5; % M 蚂蚁个数(每一波蚂蚁有多少个)
Alpha=2; % Alpha 表征信息素重要程度的参数
Beta=5; % Beta 表征启发式因子重要程度的参数
Rho=0.1 ; % Rho 信息素蒸发系数
Q=1.2; % Q 信息素增加强度系数
minkl=inf;
mink=0;
minl=0;
dlmwrite(‘distance.txt‘D‘delimiter‘‘ ‘)
%xlswrite(‘d‘Dsheetrange);%输出excel表
%% 启发式信息,取为当前点至最终目标终点的直线距离的倒数
Eta=zeros(N1);
for i=1:N
if i~=E
if D(iN)~=0
Eta(i)=1/D(iN);
end
else
Eta(i)=10;
end
end
ROUTES=cell(KM);%用细胞结构存储每一代的每一只蚂蚁的爬行路线
PL=zeros(KM);%用矩阵存储每一代的每一只蚂蚁的爬行路线长度
%% -----------启动K轮蚂蚁觅食活动,每轮派出M只蚂蚁--------------------
for k=1:K
for m=1:M
%% 第一步:状态初始化
W=S;%当前节点初始化为起始点,W为蚂蚁所在节点,
Path=S;%爬行路线初始化
PLkm=0;%爬行路线长度初始化
TABUkm=ones(N1);%禁忌表初始化,所有都为1,表示没有走过
TABUkm(S1)=0;%已经在初始点了,因此要排除
DD=D;%邻接矩阵初始化
%% 第二步:下一步可以前往的节点
DW=DD(W:); % 选定第W个点,W为地图编码,把邻接矩阵中第W行给DW
DW1=find(DW);% 找出DW这一行中,不为零的数,其所在的列序列,比如,W=1,则DW1=2 4,就是说第24与1有联系
for j=1:length(DW1)
if TABUkm(DW1(j)1)==0 % DW1(1)=2 TABUkm(2)=1 TABUkm(2)表示第2行的第1个数
DW(DW1(j))=0;
end
end
LJD=find(DW);% 24
Len_LJD=length(LJD);%可选节点的个数2
iter=0;
%% 觅食停止条件:蚂蚁未遇到食物或者陷入死胡同,第一代第一只蚂蚁
while W~=E&&Len_LJD>=1 %终止条件为,W为终点,或者,可选节点个数大于等于1
iter=iter+1;
%% 第三步:转轮赌法选择下一步怎么走
PP=zeros(Len_LJD1); % 根据蚂蚁当前所在节点的下一个可选节点数,建立0矩阵行数为可选节点数,列数为1
for i=1:Len_LJD
PP(i)=(Tau(WLJD(i))^Alpha)*((Eta(LJD(i)))^Beta);
end
sumpp=sum(PP); %求PP这一列的和,
PP=PP/sumpp;%建立概率分布,即这一列中,每个元素代表可选节点被选中的概率
Pcum(1)=PP(1);%第一个可行节点被选中的概率
for i=2:Len_LJD
Pcum(i)=Pcum(i-1)+PP(i);
end
Pcum(1:Len_LJD); %概率累加,最后一个概率是1
Select=find(Pcum>=rand);
to_visit=LJD(Select(1));% 确定下一步要走的节点
%% 第四步:状态更新和记录
Path=[Pathto_visit];%蚂蚁从W移动到to_visit,节点序列增加,路径长度增加路径节点序列拼接,矩阵拼接
PLkm=PLkm+DD(Wto_visit);%路径长度增加
W=to_visit;%蚂蚁移到下一个节点
for kk=1:N %搜索每一个节点
if TABUkm(kk1)==0 %如果这个节点走过了,为0表示走过了
DD(Wkk)=0; % 把与走过点的长度赋值为0
DD(kkW)=0;
end
end
TABUkm(W1)=0;%已访问过的节点从禁忌表中删除重复再下一步可以前往的节点
DW=DD(W:);
DW1=find
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 27961 2013-07-05 15:14 ACOfirst.m
相关资源
- Pattern Recognition and Machine Learning(高清
- MATLAB 编程 第二版 Stephen J. Chapman 著
- 均值滤波和FFT频谱分析Matlab代码
- 《MATLAB扩展编程》代码
- HDB3码、AMI码的MATLAB实现
- 3点GPS定位MATLAB仿真
- MATLAB数字信号处理85个实用案例精讲入
- matlab从入门到精通pdf94795
- 欧拉放大论文及matlab代码
- 跳一跳辅助_matlab版本
- 全面详解LTE MATLAB建模、仿真与实现
- MIMO-OFDM无线通信技术及MATLAB实现_孙锴
- MATLAB Programming for Engineers 4th - Chapman
- matlab 各种谱分析对比
- 分数阶chen混沌matlab程序
- 蚁群算法论文+源代码
- 基于粒子群算法的非合作博弈的matl
- MATLAB车流仿真 包括跟驰、延误
- matlab空间桁架计算程序
- 基于MATLAB的图像特征点匹配和筛选
- DMA-TVP-FAVAR
- GPS信号的码捕获matlab代码.7z
- 一维光子晶体MATLAB仿真代码吸收率折
- newmark法源程序
- 传统关联成像、计算鬼成像matlab
- pri传统分选算法
- 摆动滚子推杆盘形凸轮设计
- 医学图像重建作业matlab源码
- Matlab实现混沌系统的控制
- 检测疲劳驾驶
评论
共有 条评论