人工智能AI 机器人路径问题解读.docx
《人工智能AI 机器人路径问题解读.docx》由会员分享,可在线阅读,更多相关《人工智能AI 机器人路径问题解读.docx(12页珍藏版)》请在冰豆网上搜索。
人工智能AI机器人路径问题解读
%%人工智能机器人路径问题
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--表征启发式因子重要程度的参数
%%Eta--启发因子矩阵(这里设为距离的倒数)
%%Deltatau--信息素增量矩阵
%%Tabootk--禁忌表矩阵(存储并记录第t次循环第k只蚂蚁的已走路径)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc
clearall
closeall
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%G地形图为01矩阵%%1表示障碍物%%
G=[00000000000000000000;
01100000000000000000;
01100011100000000000;
00000011100000000000;
00000011100000000000;
01110011100000000000;
01110011100000000000;
01110011101111000000;
01110000001111000000;
00000000001111000000;
00000001101111000000;
00000001100000000000;
00000000000111011110;
00000000000111011110;
00110000000111011110;
00110011100000000000;
00000011101100000110;
00000000001100100110;
00000000000000100000;
00000000000000000000];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
gm=size(G,1);%%求矩阵G的行数%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
s=1;
a=1;
Q=1;
m=25;
n=50;
e=gm*gm;
alpha=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.5
ex=gm-0.5;
end
ey=a*(gm+0.5-ceil(e/gm));
ee=[ex,ey]
Eta=zeros(nn);
%%下面构造启发式信息矩阵%%
fori=1:
nn
ix=a*(mod(i,gm)-0.5);
ifix==-0.5
ix=gm-0.5;
end
iy=a*(gm+0.5-ceil(i/gm));
ifi~=e
%启发式信息取为当前点至目标点(终点)直线距离的倒数%%
Eta(i)=1/((ix-ex)^2+(iy-ey)^2)^0.5;
else
Eta(i)=100;
end
end
R=cell(n,m);%%用细胞结构存储每次循环每只蚂蚁的爬行路线%%
L=zeros(n,m);%%用矩阵存储每次循环每只蚂蚁爬行路线的总长度%%
%%启动t轮蚂蚁觅食活动%%每轮派出m只蚂蚁%%
fort=1:
n
fork=1:
m
%%第一步:
状态初始化%%
w=s;%%当前节点初始化为起始点%%
Path=s;%%爬行路线向量初始化%%
pathlen=0;%%爬行路线长度初始化%%
Tabootk=ones(nn);%%禁忌表初始化%%
Tabootk(s)=0;%%已经在初始点了%%因此要排除%%
DD=D;%%邻接矩阵初始化%%
%%第二步:
下一步可以前往的节点%%
DL=DD(w,:
);
DLF=find(DL);
forj=1:
length(DLF)
ifTabootk(DLF(j))==0
DL(DLF(j))=0;
end
end
DN=find(DL);
dnum=length(DN);%%可选节点的个数%%
%%觅食停止条件:
蚂蚁未遇到食物或者陷入死胡同%%
whilew~=e&&dnum>=1
%%第三步:
转轮赌法选择下一步怎么走%%
P=zeros(dnum);
fori=1:
dnum
P(i)=(Tau(w,DN(i))^alpha)*((Eta(DN(i)))^beta);
end
P=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:
nn
ifTabootk(ki)==0
DD(w,ki)=0;
DD(ki,w)=0;
end
end
Tabootk(w)=0;%%已访问过的节点从禁忌表中删除%%
DL=DD(w,:
);
DLF=find(DL);
forj=1:
length(DLF)
ifTabootk(DLF(j))==0
DL(j)=0;
end
end
DN=find(DL);
dnum=length(DN);%可选节点的个数
end
%%第五步:
记下每一代每一只蚂蚁的觅食路线和路线长度
R{t,k}=Path;
ifPath(end)==e
L(t,k)=pathlen;
ifpathlenmint=t;
mink=k;
mintk=pathlen;
end
else
PL(t,k)=0;
end
end
%%第六步:
更新信息素%%
Deltatau=zeros(nn,nn);%%信息素更新量初始化%%
fork=1:
m
ifL(t,k)
Route=R{t,k};
rnum=length(Route)-1;%%跳数%%
forj=1:
rnum
x=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);
end
end
end
Tau=(1-rou).*Tau+Deltatau;%信息素挥发一部分,新增加一部分
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%绘收敛曲线图%%
Lenmin=zeros(n);
fort=1:
n
Lt=L(t,:
);
FLt=find(Lt);
LFLt=Lt(FLt);
Lenmin(t)=min(LFLt);
end
figure
(1)
plot(Lenmin)
holdon
gridon
xlabel('循环次数');
ylabel('每次循环后路径长度');
title('收敛曲线(最小路径长度与循环次数关系曲线)');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%绘每次循环蚂蚁爬行路线图%%
figure
(2)
gm=size(G,1);
axis([0,gm,0,gm])
fori=1:
gm
forj=1:
gm
ifG(i,j)==1
x1=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]);
holdon
else
x1=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]);
holdon
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fort=1:
n
Lt=L(t,:
);
minlen=min(Lt);
FLt=find(Lt==minlen);
k=FLt
(1);
Route=R{t,k};
Rx=Route;
Ry=Route;
fori=1:
length(Route)
Rx(i)=a*(mod(Route(i),gm)-0.5);
ifRx(i)==-0.5
Rx(i)=gm-0.5;
end
Ry(i)=a*(gm+0.5-ceil(Route(i)/gm));
end
plot(Rx,Ry)
holdon
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%绘最优爬行路线图%%
figure(3)
gm=size(G,1);
axis([0,gm,0,gm])
fori=1:
gm
forj=1:
gm
ifG(i,j)==1
x1=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]);%%向左下角画黑色矩形填充%%
holdon
else
x1=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]);%%向左下角画白色矩形填充%%
holdon
end
end
end
%%颜色矩阵[R,G,B]%%[1,1,1]为白色%%[0,0,0]为黑色%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
holdon
Route=R{mint,mink};
Rx=Route;
Ry=Route;
fori=1:
length(Route)
Rx(i)=a*(mod(Route(i),gm)-0.5);
ifRx(i)==-0.5
Rx(i)=gm-0.5;
end
Ry(i)=a*(gm+0.5-ceil(Route(i)/gm));
end
plot(Rx,Ry)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
functionD=G2D(G)
gm=size(G,1);
D=zeros(gm*gm,gm*gm);
fori=1:
gm
forj=1:
gm
ifG(i,j)==0
forii=1:
gm
forjj=1:
gm
ifG(ii,jj)==0
im=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)^0.5;
end
end
end
end
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
读书的好处
1、行万里路,读万卷书。
2、书山有路勤为径,学海无涯苦作舟。
3、读书破万卷,下笔如有神。
4、我所学到的任何有价值的知识都是由自学中得来的。
——达尔文
5、少壮不努力,老大徒悲伤。
6、黑发不知勤学早,白首方悔读书迟。
——颜真卿
7、宝剑锋从磨砺出,梅花香自苦寒来。
8、读书要三到:
心到、眼到、口到
9、玉不琢、不成器,人不学、不知义。
10、一日无书,百事荒废。
——陈寿
11、书是人类进步的阶梯。
12、一日不读口生,一日不写手生。
13、我扑在书上,就像饥饿的人扑在面包上。
——高尔基
14、书到用时方恨少、事非经过不知难。
——陆游
15、读一本好书,就如同和一个高尚的人在交谈——歌德
16、读一切好书,就是和许多高尚的人谈话。
——笛卡儿
17、学习永远不晚。
——高尔基
18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。
——刘向
19、学而不思则惘,思而不学则殆。
——孔子
20、读书给人以快乐、给人以光彩、给人以才干。
——培根