人工智能AI机器人路径问题_第1页
人工智能AI机器人路径问题_第2页
人工智能AI机器人路径问题_第3页
人工智能AI机器人路径问题_第4页
人工智能AI机器人路径问题_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、%人工智能机器人路径问题functionGoodACARPP123%n-循环次数%m-蚂蚁个数%a-小方格象素的边长%s-起始点(最短路径的起始点)%e-终止点(最短路径的目的点)%R-路线矩阵%G-地形图矩阵%L-路径长度矩阵%P-选择概率向量%Q-信息素增强系数%D-问题节点矩阵%DD-邻接节点矩阵%DL-已访问的节点%DN-待访问的节点%DT-要访问的节点%ex-终止点横坐标%ey-终止点纵坐标%nn-问题的规模(象素个数)%inf-无穷大(infinite)%Tau-信息素矩阵%rou-信息素蒸发系数%Ant-蚂蚁初始位置%alpha-表征信息素重要程度的参数%beta-表征启发式因子

2、重要程度的参数%Eta-启发因子矩阵(这里设为距离的倒数)%Deltatau-信息素增量矩阵%Tabootk-禁忌表矩阵(存储并记录第t次循环第k只蚂蚁的已走路径)%clcclearallcloseall%G地形图为01矩阵%1表示障碍物%G=00000000000000000000;01100000000000000000;01100011100000000000;00000011100000000000;00000011100000000000;01110011100000000000;01110011100000000000;01110011101111000000;0111000000

3、1111000000;00000000001111000000;00000001101111000000;00000001100000000000;00000000000111011110;00000000000111011110;00110000000111011110;00110011100000000000;00000011101100000110;00000000001100100110;00000000000000100000;00000000000000000000;%gm=size(G,1);%求矩阵G的行数%1%s=1;a=1;Q=1;m=25;n=50;e=gm*gm;alp

4、ha=1;beta=7;rou=0.3;mint=0;mink=0;D=G2D(G);mintk=inf;Tau=ones(gm*gm,gm*gm);%初始化信息素矩阵(认为前面的觅食活动中有残留的信息素)%Tau=8.*Tau;%初始化信息素矩阵(认为前面的觅食活动中有残留的信息素)%nn=size(D,1);ex=a*(mod(e,gm)-0.5);ifex=-0.5ex=gm-0.5;endey=a*(gm+0.5-ceil(e/gm);ee=ex,eyEta=zeros(nn);%下面构造启发式信息矩阵%fori=1:nnix=a*(mod(i,gm)-0.5);ix=gm-0.5;e

5、ndiy=a*(gm+0.5-ceil(i/gm);ifi=e%启发式信息取为当前点至目标点(终点)直线距离的倒数%Eta(i)=1/(ix-ex)A2+(iy-ey)A2)A0.5;elseEta(i)=100;endendR=cell(n,m);%用细胞结构存储每次循环每只蚂蚁的爬行路线%L=zeros(n,m);%用矩阵存储每次循环每只蚂蚁爬行路线的总长度%启动t轮蚂蚁觅食活动%每轮派出m只蚂蚁%fort=1:nfork=1:m%第一步:状态初始化%w=s;%当前节点初始化为起始点%Path=s;%爬行路线向量初始化%pathlen=0;%爬行路线长度初始化%Tabootk=ones(n

6、n);%禁忌表初始化%Tabootk(s)=0;%已经在初始点了%因此要排除%DD=D;%邻接矩阵初始化%第二步:下一步可以前往的节点%DL=DD(w,:);DLF=find(DL);forj=1:length(DLF)ifTabootk(DLF(j)=0DL(DLF(j)=0;DN=find(DL);dnum=length(DN);%可选节点的个数%觅食停止条件:蚂蚁未遇到食物或者陷入死胡同%whilew=e&&dnum>=1%第三步:转轮赌法选择下一步怎么走%P=zeros(dnum);fori=1:dnumP(i)=(Tau(w,DN(i)Falpha)*(Eta(

7、DN(i)beta);endP=P/sum(P);Pcum=cumsum(P);%计算累计概率分布%DS=find(Pcum>=rand);DT=DN(DS(1);%第四步:状态更新和记录%Path=Path,DT;%路径增加%pathlen=pathlen+DD(w,DT);%路径长度增加%w=DT;%蚂蚁移动到下一个节点%forki=1:nnifTabootk(ki)=0DD(w,ki)=0;DD(ki,w)=0;endendTabootk(w)=0;%已访问过的节点从禁忌表中删除%DL=DD(w,:);DLF=find(DL);forj=1:length(DLF)ifTabootk

8、(DLF(j)=0DL(j)=0;endDN=find(DL);dnum=length(DN);%可选节点的个数end%第五步:记下每一代每一只蚂蚁的觅食路线和路线长度Rt,k=Path;ifPath(end)=eL(t,k)=pathlen;ifpathlen<mintkmint=t;mink=k;mintk=pathlen;endelsePL(t,k)=0;endend%第六步:更新信息素%Deltatau=zeros(nn,nn);%信息素更新量初始化%fork=1:mifL(t,k)Route=Rt,k;rnum=length(Route)-1;%跳数%forj=1:rnumx=

9、Route(j);y=Route(j+1);Deltatau(x,y)=Deltatau(x,y)+Q/L(t,k);Deltatau(y,x)=Deltatau(y,x)+Q/L(t,k);end5endTau=(1-rou).*Tau+Deltatau;%信息素挥发一部分,新增加一部分end%绘收敛曲线图%Lenmin=zeros(n);fort=1:nLt=L(t,:);FLt=find(Lt);LFLt=Lt(FLt);Lenmin(t)=min(LFLt);endfigure(1)plot(Lenmin)holdongridonxlabel('循环次数');ylabe

10、l('每次循环后路径长度);title('收敛曲线(最小路径长度与循环次数关系曲线)');%绘每次循环蚂蚁爬行路线图%figure(2)gm=size(G,1);axis(0,gm,0,gm)fori=1:gmforj=1:gmifG(i,j)=1x1=j-1;y1=gm-i;x2=j;y2=gm-i;x3=j;y3=gm-i+1;x4=j-1;y4=gm-i+1;fill(x1,x2,x3,x4,y1,y2,y3,y4,0,0,0);holdonelsex1=j-1;y1=gm-i;x2=j;y2=gm-i;x3=j;y3=gm-i+1;x4=j-1;y4=gm-i+

11、1;fill(x1,x2,x3,x4,y1,y2,y3,y4,1,1,1);holdonendendend%fort=1:nLt=L(t,:);minlen=min(Lt);FLt=find(Lt=minlen);k=FLt(1);Route=Rt,k;Rx=Route;Ry=Route;fori=1:length(Route)Rx(i)=a*(mod(Route(i),gm)-0.5);ifRx(i)=-0.5Rx(i)=gm-0.5;end#Ry(i)=a*(gm+0.5-ceil(Route(i)/gm);endplot(Rx,Ry)holdonend%绘最优爬行路线图%figure(3

12、)gm=size(G,1);axis(0,gm,0,gm)fori=1:gmforj=1:gmifG(i,j)=1x1=j-1;y1=gm-i;x2=j;y2=gm-i;x3=j;y3=gm-i+1;x4=j-1;y4=gm-i+1;fill(x1,x2,x3,x4,y1,y2,y3,y4,0,0,0);%向左下角画黑色矩形填充%holdonelsex1=j-1;y1=gm-i;x2=j;y2=gm-i;x3=j;y3=gm-i+1;x4=j-1;y4=gm-i+1;fill(x1,x2,x3,x4,y1,y2,y3,y4,1,1,1);%向左下角画白色矩形填充%holdonendend%颜色

13、矩阵R,G,B%1,1,1为白色%0,0,0为黑色%holdonRoute=Rmint,mink;Rx=Route;Ry=Route;fori=1:length(Route)Rx(i)=a*(mod(Route(i),gm)-0.5);ifRx(i)=-0.5Rx(i)=gm-0.5;endRy(i)=a*(gm+0.5-ceil(Route(i)/gm);endplot(Rx,Ry)%functionD=G2D(G)gm=size(G,1);D=zeros(gm*gm,gm*gm);fori=1:gmforj=1:gmifG(i,j)=0forii=1:gmforjj=1:gmifG(ii,

14、jj)=0im=abs(i-ii);jn=abs(j-jj);ifim+jn=1|(im=1&&jn=1)%找出G(i,j)上下左右邻近点%D(i-1)*gm+j,(ii-1)*gm+jj)=(im+jn)A0.5;endendendendendend%读书的好处1、行万里路,读万卷书。2、书山有路勤为径,学海无涯苦作舟。3、读书破万卷,下笔如有神。4、我所学到的任何有价值的知识都是由自学中得来的。一一达尔文5、少壮不努力,老大徒悲伤。6、黑发不知勤学早,白首方悔读书迟。一一颜真卿7、宝剑锋从磨砺出,梅花香自苦寒来。8、读书要三到:心到、眼到、口到9、玉不琢、不成器,人不学、不知义。10、一日无书,百事荒废。一一陈寿11、书是人类进步的阶梯

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论