资源简介
蚁群算法 万能通用代码 最短路径 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
相关资源
- 串行级联cpm系统MATLAB仿真
- matlab_OFDM调制解调(来自剑桥大学)
- Matlab路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
评论
共有 条评论