版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于遗传算法的机器人路径规划MATLAB源码算法的思路如下:取各障碍物顶点连线的中点为路径点,相互连接各路径点,将机器人移动的起点和终点限制在各路径点上,利用Dijkstra算法来求网络图的最短路径,找到从起点P1到终点Pn的最短路径,由于上述算法使用了连接线中点的条件,不是整个规划空间的最优路径,然后利用遗传算法对找到的最短路径各个路径点Pi (i=1,2,n)调整,让各路径点在相应障碍物端点连线上滑动,利用Pi= Pi1+ti×(Pi2-Pi1)(ti0,1 i=1,2,n)即可确定相应的Pi,即为新的路径点,连接此路径点为最优路径。function
2、 L1,XY1,L2,XY2=JQRLJGH(XX,YY)% 基于Dijkstra和遗传算法的机器人路径规划演示程序%输入参数在函数体内部定义%输出参数为% L1 由Dijkstra算法得出的最短路径长度% XY1 由Dijkstra算法得出的最短路径经过节点的坐标% L2 由遗传算法得出的最短路径长度% XY2 由遗传算法得出的
3、最短路径经过节点的坐标%程序输出的图片有% Fig1 环境地图(包括:边界、障碍物、障碍物顶点之间的连线、Dijkstra的网络图结构)% Fig2 由Dijkstra算法得到的最短路径% Fig3 由遗传算法得到的最短路径% Fig4 遗传算法的收敛曲线(迄今为止找到的最优解、种群平均适应值)% 画Fig1figure(1);PlotGraph;title('地形图及网络拓扑结构')PD=in
4、f*ones(26,26);for i=1:26 for j=1:26 if D(i,j)=1 x1=XY(i,5); y1=XY(i,6);
5、160; x2=XY(j,5); y2=XY(j,6); dist=(x1-x2)2+(y1-y2)2)0.5; &
6、#160; PD(i,j)=dist; end endend% 调用最短路算法求最短路s=1;%出发点t=26;%目标点L,R=ZuiDuanLu(PD,s,t);L1=L(end);XY1=XY(R,5:6);% 绘制由最短路算法得到的最短路径figure(2);PlotGraph;hold onfor i=1:(length(R)-1)
7、0; x1=XY1(i,1); y1=XY1(i,2); x2=XY1(i+1,1); y2=XY1(i+1,2); plot(x1,x2,y1,y2,'k'); hold onendtitle('由Dijkstra算法得到的初始路径')% 使用遗传算法进一步寻找最短路%第一步:变量初始化M=5
8、0;%进化代数设置N=20;%种群规模设置Pm=0.3;%变异概率设置LC1=zeros(1,M);LC2=zeros(1,M);Yp=L1;%第二步:随机产生初始种群X1=XY(R,1);Y1=XY(R,2);X2=XY(R,3);Y2=XY(R,4);for i=1:N farmi=rand(1,aaa);end% 以下是进化迭代过程counter=0;%设置迭代计数器while counter<M%停止条件为达到最大迭代次数
9、 % 第三步:交叉 %交叉采用双亲双子单点交叉 newfarm=cell(1,2*N);%用于存储子代的细胞结构 Ser=randperm(N);%两两随机配对的配对表 A=farmSer(1);%取出父代A B=farmSer(2);%取出父代B P0=unidrnd(aaa-1);%随机选择交叉点&
10、#160; a=A(:,1:P0),B(:,(P0+1):end);%产生子代a b=B(:,1:P0),A(:,(P0+1):end);%产生子代b newfarm2*N-1=a;%加入子代种群 newfarm2*N=b; for i=1:(N-1) A=farmSer(i)
11、; B=farmSer(i+1); newfarm2*i=b; end FARM=farm,newfarm;%新旧种群合并 % 第四步:选择复制 SER=randperm
12、(2*N); FITNESS=zeros(1,2*N); fitness=zeros(1,N); for i=1:(2*N) PP=FARMi; FITNESS(i)=MinFun(PP,X1,X2,Y1,Y2);%调用目标函数
13、 end for i=1:N f1=FITNESS(SER(2*i-1); f2=FITNESS(SER(2*i); if f1<=f2 el
14、se farmi=FARMSER(2*i); fitness(i)=FITNESS(SER(2*i); end end
15、; %记录最佳个体和收敛曲线 minfitness=min(fitness); meanfitness=mean(fitness); if minfitness<Yp pos=find(fitness=minfitness);
16、0;Xp=farmpos(1); Yp=minfitness; end if counter=10 PPP=0.5,Xp,0.5' PPPP=1-PPP;
17、60; X=PPP.*X1+PPPP.*X2; Y=PPP.*Y1+PPPP.*Y2; XY2=X,Y; figure(3) PlotGraph;
18、0; hold on for i=1:(length(R)-1) x1=XY2(i,1); y1=XY2(i,2);
19、160; x2=XY2(i+1,1); y2=XY2(i+1,2); plot(x1,x2,y1,y2,'k');
20、0; hold on end title('遗传算法第10代') hold on for i=1:(length(R)-1)
21、0; x1=XY1(i,1); y1=XY1(i,2); x2=XY1(i+1,1);
22、160; y2=XY1(i+1,2); plot(x1,x2,y1,y2,'k','LineWidth',1); hold on end
23、; end if counter=20 PPP=0.5,Xp,0.5' PPPP=1-PPP; X=PPP.*X1+PPPP.*X2; &
24、#160; Y=PPP.*Y1+PPPP.*Y2; XY2=X,Y; figure(4) PlotGraph; hold on
25、60; for i=1:(length(R)-1) x1=XY2(i,1); y2=XY2(i+1,2); plot(
26、x1,x2,y1,y2,'k'); hold on end title('遗传算法第20代') hold on &
27、#160; for i=1:(length(R)-1) x1=XY1(i,1); y1=XY1(i,2);
28、; x2=XY1(i+1,1); y2=XY1(i+1,2); plot(x1,x2,y1,y2,'k','LineWidth',1);
29、60;hold on end end if counter=30 PPP=0.5,Xp,0.5' PPPP=1-PPP;
30、60; X=PPP.*X1+PPPP.*X2; Y=PPP.*Y1+PPPP.*Y2; XY2=X,Y; figure(5) PlotGraph;
31、0; hold on for i=1:(length(R)-1) x1=XY2(i,1); y1=XY2(i,2);
32、160; x2=XY2(i+1,1); y2=XY2(i+1,2); plot(x1,x2,y1,y2,'k');
33、0; hold on end title('遗传算法第30代') hold on for i=1:(length(R)-1)
34、0; x1=XY1(i,1); y2=XY1(i+1,2); plot(x1,x2,y1,y2,'k','LineWidth',1);
35、0; hold on end end if counter=40 PPP=0.5,Xp,0.5' PPP
36、P=1-PPP; X=PPP.*X1+PPPP.*X2; Y=PPP.*Y1+PPPP.*Y2; XY2=X,Y; figure(6)
37、60;PlotGraph; hold on for i=1:(length(R)-1) x1=XY2(i,1);
38、60;y1=XY2(i,2); x2=XY2(i+1,1); y2=XY2(i+1,2); plot(x1,x2,y1,y2,'k');
39、; hold on end title('遗传算法第40代') hold on &
40、#160;for i=1:(length(R)-1) x1=XY1(i,1); y1=XY1(i,2); x2=XY1(i+1,1);
41、60; y2=XY1(i+1,2); plot(x1,x2,y1,y2,'k','LineWidth',1); hold on
42、60; end end if counter=50 PPP=0.5,Xp,0.5' PPPP=1-PPP; X=PPP.*X1+PPPP.*X2;
43、160; Y=PPP.*Y1+PPPP.*Y2; XY2=X,Y; figure(7) PlotGraph; hold on
44、0; for i=1:(length(R)-1) x1=XY2(i,1); y1=XY2(i,2);
45、160;x2=XY2(i+1,1); y2=XY2(i+1,2); plot(x1,x2,y1,y2,'k'); hold on
46、0; end title('遗传算法第50代') hold on for i=1:(length(R)-1)
47、0; x1=XY1(i,1); y1=XY1(i,2); x2=XY1(i+1,1); y2=XY1(i+1,2);
48、 plot(x1,x2,y1,y2,'k','LineWidth',1); hold on end end
49、160; LC2(counter+1)=Yp; LC1(counter+1)=meanfitness; % 第五步:变异 for i=1:N if Pm>rand&&pos(1)=i AA=farmi; AA(POS)=rand; farmi=AA;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论