《錯誤的基于遺傳算法的機器人路徑規(guī)劃MATLAB源碼,求高人指點》由會員分享,可在線閱讀,更多相關(guān)《錯誤的基于遺傳算法的機器人路徑規(guī)劃MATLAB源碼,求高人指點(8頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、基于遺傳算法的機器人路徑規(guī)劃MATLAB源碼算法的思路如下:取各障礙物頂點連線的中點為路徑點,相互連接各路徑點,將機器人移動的起點和終點限制在各路徑點上,利用Dijkstra算法來求網(wǎng)絡圖的最短路徑,找到從起點P1到終點Pn的最短路徑,由于上述算法使用了連接線中點的條件,不是整個規(guī)劃空間的最優(yōu)路徑,然后利用遺傳算法對找到的最短路徑各個路徑點Pi(i=1,2,n)調(diào)整,讓各路徑點在相應障礙物端點連線上滑動,利用Pi=Pi1+ti(Pi2-Pi1)(ti0,1i=1,2,n)即可確定相應的Pi,即為新的路徑點,連接此路徑點為最優(yōu)路徑。functionL1,XY1,L2,XY2=JQRLJGH(XX
2、,YY)%基于Dijkstra和遺傳算法的機器人路徑規(guī)劃演示程序%輸入?yún)?shù)在函數(shù)體內(nèi)部定義%輸出參數(shù)為%L1由Dijkstra算法得出的最短路徑長度%XY1由Dijkstra算法得出的最短路徑經(jīng)過節(jié)點的坐標%L2由遺傳算法得出的最短路徑長度%XY2由遺傳算法得出的最短路徑經(jīng)過節(jié)點的坐標%程序輸出的圖片有%Fig1環(huán)境地圖(包括:邊界、障礙物、障礙物頂點之間的連線、Dijkstra的網(wǎng)絡圖結(jié)構(gòu))%Fig2由Dijkstra算法得到的最短路徑%Fig3由遺傳算法得到的最短路徑%Fig4遺傳算法的收斂曲線(迄今為止找到的最優(yōu)解、種群平均適應值)%畫Fig1figure(1);PlotGraph;ti
3、tle(地形圖及網(wǎng)絡拓撲結(jié)構(gòu))PD=inf*ones(26,26);fori=1:26forj=1:26ifD(i,j)=1x1=XY(i,5);y1=XY(i,6);x2=XY(j,5);y2=XY(j,6);dist=(x1-x2)2+(y1-y2)2)0.5;PD(i,j)=dist;endendend%調(diào)用最短路算法求最短路s=1;%出發(fā)點t=26;%目標點L,R=ZuiDuanLu(PD,s,t);L1=L(end);XY1=XY(R,5:6);%繪制由最短路算法得到的最短路徑figure(2);PlotGraph;holdonfori=1:(length(R)-1)x1=XY1(i
4、,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot(x1,x2,y1,y2,k);holdonendtitle(由Dijkstra算法得到的初始路徑)%使用遺傳算法進一步尋找最短路%第一步:變量初始化M=50;%進化代數(shù)設置N=20;%種群規(guī)模設置Pm=0.3;%變異概率設置LC1=zeros(1,M);LC2=zeros(1,M);Yp=L1;%第二步:隨機產(chǎn)生初始種群X1=XY(R,1);Y1=XY(R,2);X2=XY(R,3);Y2=XY(R,4);fori=1:Nfarmi=rand(1,aaa);end%以下是進化迭代過程counter
5、=0;%設置迭代計數(shù)器whilecounterM%停止條件為達到最大迭代次數(shù)%第三步:交叉%交叉采用雙親雙子單點交叉newfarm=cell(1,2*N);%用于存儲子代的細胞結(jié)構(gòu)Ser=randperm(N);%兩兩隨機配對的配對表A=farmSer(1);%取出父代AB=farmSer(2);%取出父代BP0=unidrnd(aaa-1);%隨機選擇交叉點a=A(:,1:P0),B(:,(P0+1):end);%產(chǎn)生子代ab=B(:,1:P0),A(:,(P0+1):end);%產(chǎn)生子代bnewfarm2*N-1=a;%加入子代種群newfarm2*N=b;fori=1:(N-1)A=fa
6、rmSer(i);B=farmSer(i+1);newfarm2*i=b;endFARM=farm,newfarm;%新舊種群合并%第四步:選擇復制SER=randperm(2*N);FITNESS=zeros(1,2*N);fitness=zeros(1,N);fori=1:(2*N)PP=FARMi;FITNESS(i)=MinFun(PP,X1,X2,Y1,Y2);%調(diào)用目標函數(shù)endfori=1:Nf1=FITNESS(SER(2*i-1);f2=FITNESS(SER(2*i);iff1=f2elsefarmi=FARMSER(2*i);fitness(i)=FITNESS(SER(
7、2*i);endend%記錄最佳個體和收斂曲線minfitness=min(fitness);meanfitness=mean(fitness);ifminfitnessrand&pos(1)=iAA=farmi;AA(POS)=rand;farmi=AA;endendcounter=counter+1;disp(counter);end%輸出遺傳算法的優(yōu)化結(jié)果PPP=0.5,Xp,0.5;PPPP=1-PPP;X=PPP.*X1+PPPP.*X2;Y=PPP.*Y1+PPPP.*Y2;XY2=X,Y;L2=Yp;%繪制Fig3figure(8)PlotGraph;holdonholdonfo
8、ri=1:(length(R)-1)x1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot(x1,x2,y1,y2,k,LineWidth,1);holdonendfori=1:(length(R)-1)x1=XY2(i,1);y1=XY2(i,2);x2=XY2(i+1,1);y2=XY2(i+1,2);plot(x1,x2,y1,y2,k);holdonendtitle(遺傳算法最終結(jié)果)figure(9)PlotGraph;holdonfori=1:(length(R)-1)x1=XY1(i,1);y1=XY1(i,2);x2=XY1(i+1,1);y2=XY1(i+1,2);plot(x1,x2,y1,y2,k,LineWidth,1);holdonendholdonfori=1:(length(R)-1)x1=XY2(i,1);y1=XY2(i,2);x2=XY2(i+1,1);y2=XY2(i+1,2);plot(x1,x2,y1,y2,k,LineWidth,2);holdonendtitle(遺傳算法優(yōu)化前后結(jié)果比較)%繪制Fig4figure(10);plot(LC1);holdonplot(LC2);xlabel(迭代次數(shù));title(收斂曲線);