matlab - 蚁群算法 - 机器人路径优化问题(2)
function m_main()
G=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; 0 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 0 0 0 0; 0 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0; 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0; 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0; 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0; 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0; 0 0 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0; 0 0 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 1 1 1 0 1 1 0 0 0 0 0 1 1 0; 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 1 1 0; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;];
MM=size(G,1); % G 地形图为01矩阵,如果为1表示障碍物
Tau=ones(MM*MM,MM*MM);% Tau 初始信息素矩阵(认为前面的觅食活动中有残留的信息素)
Tau=8.*Tau;
K=100; % K 迭代次数(指蚂蚁出动多少波) M=50; % M 蚂蚁个数(每一波蚂蚁有多少个) S=1 ; % S 起始点(最短路径的起始点)
E=MM*MM; % E 终止点(最短路径的目的点) Alpha=1; % Alpha 表征信息素重要程度的参数 Beta=7; % Beta 表征启发式因子重要程度的参数 Rho=0.3 ; % Rho 信息素蒸发系数 Q=1; % Q 信息素增加强度系数 minkl=inf; mink=0; minl=0;
D=G2D(G);
N=size(D,1);%N表示问题的规模(象素个数) a=1;%小方格象素的边长
Ex=a*(mod(E,MM)-0.5);%终止点横坐标 if Ex==-0.5 Ex=MM-0.5; end
Ey=a*(MM+0.5-ceil(E/MM));%终止点纵坐标
Eta=zeros(N);%启发式信息,取为至目标点的直线距离的倒数 %下面构造启发式信息矩阵 for i=1:N
ix=a*(mod(i,MM)-0.5); if ix==-0.5 ix=MM-0.5; end
iy=a*(MM+0.5-ceil(i/MM)); if i~=E
Eta(i)=1/((ix-Ex)^2+(iy-Ey)^2)^0.5; else
Eta(i)=100; end end
ROUTES=cell(K,M);%用细胞结构存储每一代的每一只蚂蚁的爬行路线 PL=zeros(K,M);%用矩阵存储每一代的每一只蚂蚁的爬行路线长度
%% -----------启动K轮蚂蚁觅食活动,每轮派出M只蚂蚁-------------------- for k=1:K for m=1:M
%% 第一步:状态初始化
W=S;%当前节点初始化为起始点 Path=S;%爬行路线初始化
PLkm=0;%爬行路线长度初始化
TABUkm=ones(N);%禁忌表初始化
TABUkm(S)=0;%已经在初始点了,因此要排除 DD=D;%邻接矩阵初始化
%% 第二步:下一步可以前往的节点 DW=DD(W,:); DW1=find(DW); for j=1:length(DW1)
if TABUkm(DW1(j))==0 DW(DW1(j))=0; end end
LJD=find(DW);
Len_LJD=length(LJD);%可选节点的个数
%% 觅食停止条件:蚂蚁未遇到食物或者陷入死胡同 while W~=E&&Len_LJD>=1
%% 第三步:转轮赌法选择下一步怎么走 PP=zeros(Len_LJD); for i=1:Len_LJD
PP(i)=(Tau(W,LJD(i))^Alpha)*((Eta(LJD(i)))^Beta); end
sumpp=sum(PP);
PP=PP/sumpp;%建立概率分布 Pcum(1)=PP(1); for i=2:Len_LJD
Pcum(i)=Pcum(i-1)+PP(i); end
Select=find(Pcum>=rand); to_visit=LJD(Select(1));
%% 第四步:状态更新和记录 Path=[Path,to_visit];%路径增加
PLkm=PLkm+DD(W,to_visit);%路径长度增加 W=to_visit;%蚂蚁移到下一个节点 for kk=1:N
if TABUkm(kk)==0 DD(W,kk)=0; DD(kk,W)=0; end end
TABUkm(W)=0;%已访问过的节点从禁忌表中删除 DW=DD(W,:); DW1=find(DW);
for j=1:length(DW1)
if TABUkm(DW1(j))==0
DW(j)=0; end end
LJD=find(DW);
Len_LJD=length(LJD);%可选节点的个数 end
%% 第五步:记下每一代每一只蚂蚁的觅食路线和路线长度 ROUTES{k,m}=Path; if Path(end)==E PL(k,m)=PLkm; if PLkm mink=k;minl=m;minkl=PLkm; end else PL(k,m)=0; end end %% 第六步:更新信息素 Delta_Tau=zeros(N,N);%更新量初始化 for m=1:M if PL(k,m) ROUT=ROUTES{k,m};
…… 此处隐藏:893字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [实用模板]第八章:法国“新浪潮”与“左岸派”
- [实用模板]2021年北京上半年临床医学检验技师生物
- [实用模板]SAP GUI 7.10客户端安装配置文档
- [实用模板]2001年临床执业医师资格考试综合笔试试
- [实用模板]36机场工作实用英语词汇总结
- [实用模板](一)社会保险稽核通知书
- [实用模板]安全教育主题班会材料
- [实用模板]濉溪县春季呼吸道传染病防控应急演练方
- [实用模板]长沙房地产市场周报(1.30-2.3)
- [实用模板]六年级数学上册典中点 - 图文
- [实用模板]C程序设计(红皮书)习题官方参考答案
- [实用模板]中国证监会第一届创业板发行审核委员会
- [实用模板]桥梁工程复习题
- [实用模板]2011学而思数学及答案
- [实用模板]初中病句修改专项练习
- [实用模板]监理学习知识1 - 图文
- [实用模板]小机灵杯四年级试题
- [实用模板]国贸专业毕业论文模板
- [实用模板]教育学概论考试练习题-判断题4
- [实用模板]2015届高考英语一轮复习精品资料(译林
- 00Nkmhe_市场营销学工商管理_电子商务_
- 事业单位考试法律常识
- 诚信教育实施方案
- 吉大小天鹅食品安全检测箱方案(高中低
- 房地产销售培训资料
- 高一地理必修1复习提纲
- 新概念英语第二册lesson_1_练习题
- 证券公司内部培训资料
- 小学英语时间介词专项练习
- 新世纪英语专业综合教程(第二版)第1册U
- 【新课标】浙教版最新2018年八年级数学
- 工程建设管理纲要
- 外研版 必修一Module 4 A Social Surve
- Adobe认证考试 AE复习资料
- 基于H.264AVC与AVS标准的帧内预测技术
- 《食品检验机构资质认定管理办法》(质
- ABB变频器培训课件
- (完整版)小学说明文阅读练习题及答案
- 深思洛克(SenseLock) 深思IV,深思4,深
- 弟子规全文带拼音




