欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2326|回復(fù): 0
收起左側(cè)

如何理解基于改進(jìn)蟻群算法的機(jī)器人路徑規(guī)劃的matlab編程

[復(fù)制鏈接]
ID:452999 發(fā)表于 2020-3-27 13:56 | 顯示全部樓層 |閱讀模式
600黑幣
請問吧友能不能幫我講解一下這個程序的步驟,有些地方看不懂,或者有相關(guān)程序的話,我想對比著參考理解

源程序如下:

  1. G= [0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0
  2. 0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0
  3. 0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0
  4. 0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0
  5. 0        1        0        0        1        0        1        0        0        1        0        1        1        0        1        1        0        0        0        0
  6. 0        0        0        0        1        0        1        0        0        1        0        0        0        0        0        0        0        0        0        0
  7. 0        0        0        0        0        0        0        0        0        0        0        0        0        0        1        0        0        0        0        0
  8. 0        1        0        0        1        0        1        0        0   1        0        0        0        0        1        0        0        0        0        0
  9. 0        0        1        0        1        0        1        0        0        0        0        0        1        0        0        0        0        0        0        0
  10. 0        0        0        0        0        0        0        0        0        1        0        0        0        0        0        0   0        0        0        0
  11. 0        1        0        0        1        0        1        0        0        1   0        0        1        0        0   0        0        0        0        0
  12. 0        0        0        0        0        0        0        0        0        0        0        1        0        0        0        0        0   0        0        0
  13. 0        0        0        0        1        0        1        0        0        1        0        1        0        0        1        1        0        0        0        0
  14. 0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0
  15. 0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0
  16. 0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0
  17. 0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0
  18. 0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0
  19. 0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0
  20. 0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0        0];

  21. MM=size(G,1);                             % G 地形圖為01矩陣,如果為1表示障礙物
  22. Tau=ones(MM*MM,MM*MM);        % Tau 初始信息素矩陣
  23. Tau=8.*Tau;
  24. K=100;                                  %迭代次數(shù)(指螞蟻出動多少波)
  25. M=50;                                   %螞蟻個數(shù)
  26. S=1;                                    %最短路徑的起始點(diǎn)
  27. E=MM*MM;                        %最短路徑的目的點(diǎn)
  28. Alpha=1;                                 % Alpha 表征信息素重要程度的參數(shù)
  29. Beta=7;                                  % Beta 表征啟發(fā)式因子重要程度的參數(shù)
  30. Rho=0.3 ;                                 % Rho 信息素蒸發(fā)系數(shù)
  31. Q=1;                               % Q 信息素增加強(qiáng)度系數(shù)
  32. minkl=inf;
  33. mink=0;
  34. minl=0;
  35. D=G2D(G);
  36. N=size(D,1);               %N表示問題的規(guī)模(象素個數(shù))
  37. a=1;                     %小方格象素的邊長
  38. Ex=a*(mod(E,MM)-0.5);    %終止點(diǎn)橫坐標(biāo)
  39. if Ex==-0.5
  40. Ex=MM-0.5;
  41. end
  42. Ey=a*(MM+0.5-ceil(E/MM)); %終止點(diǎn)縱坐標(biāo)
  43. Eta=zeros(N);             %啟發(fā)式信息,取為至目標(biāo)點(diǎn)的直線距離的倒數(shù)
  44. %以下啟發(fā)式信息矩陣
  45. for i=1:N
  46. ix=a*(mod(i,MM)-0.5);
  47.    if ix==-0.5
  48.    ix=MM-0.5;
  49.    end
  50. iy=a*(MM+0.5-ceil(i/MM));  
  51.    if i~=E
  52.    Eta(i)=1/((ix-Ex)^2+(iy-Ey)^2)^0.5;
  53.    else
  54.    Eta(i)=100;
  55.    end
  56. end
  57. ROUTES=cell(K,M);     %用細(xì)胞結(jié)構(gòu)存儲每一代的每一只螞蟻的爬行路線
  58. PL=zeros(K,M);         %用矩陣存儲每一代的每一只螞蟻的爬行路線長度
  59.                       %啟動K輪螞蟻覓食活動,每輪派出M只螞蟻
  60. for k=1:K
  61. for m=1:M
  62. %狀態(tài)初始化
  63. W=S;                  %當(dāng)前節(jié)點(diǎn)初始化為起始點(diǎn)
  64. Path=S;                %爬行路線初始化
  65. PLkm=0;               %爬行路線長度初始化
  66. TABUkm=ones(N);       %禁忌表初始化
  67. TABUkm(S)=0;          %已經(jīng)在初始點(diǎn)了,因此要排除
  68. DD=D;                 %鄰接矩陣初始化
  69. %下一步可以前往的節(jié)點(diǎn)
  70. DW=DD(W,:);
  71. DW1=find(DW);
  72. for j=1:length(DW1)
  73.    if TABUkm(DW1(j))==0
  74.       DW(DW1(j))=0;
  75.   end
  76. end
  77. LJD=find(DW);
  78. Len_LJD=length(LJD);%可選節(jié)點(diǎn)的個數(shù)
  79. %螞蟻未遇到食物或者陷入死胡同或者覓食停止
  80. while W~=E&&Len_LJD>=1
  81. %轉(zhuǎn)輪賭法選擇下一步怎么走
  82. PP=zeros(Len_LJD);
  83. for i=1:Len_LJD
  84.     PP(i)=(Tau(W,LJD(i))^Alpha)*((Eta(LJD(i)))^Beta);
  85. end
  86. sumpp=sum(PP);
  87. PP=PP/sumpp;%建立概率分布
  88. Pcum(1)=PP(1);
  89.   for i=2:Len_LJD
  90.   Pcum(i)=Pcum(i-1)+PP(i);
  91.   end
  92. Select=find(Pcum>=rand);
  93. to_visit=LJD(Select(1));
  94. %狀態(tài)更新和記錄
  95. Path=[Path,to_visit];                        %路徑增加
  96. PLkm=PLkm+DD(W,to_visit);    %路徑長度增加
  97. W=to_visit;                   %螞蟻移到下一個節(jié)點(diǎn)
  98.    for kk=1:N
  99.       if TABUkm(kk)==0
  100.       DD(W,kk)=0;
  101.       DD(kk,W)=0;
  102.       end
  103.    end
  104. TABUkm(W)=0;                                %已訪問過的節(jié)點(diǎn)從禁忌表中刪除
  105. DW=DD(W,:);
  106. DW1=find(DW);
  107. for j=1:length(DW1)
  108.     if TABUkm(DW1(j))==0
  109.        DW(j)=0;
  110.     end
  111.   end
  112. LJD=find(DW);
  113. Len_LJD=length(LJD);%可選節(jié)點(diǎn)的個數(shù)
  114. end
  115. %記下每一代每一只螞蟻的覓食路線和路線長度
  116. ROUTES{k,m}=Path;
  117.    if Path(end)==E
  118.       PL(k,m)=PLkm;
  119.       if PLkm<minkl
  120.           mink=k;minl=m;minkl=PLkm;
  121.       end
  122.    else
  123.       PL(k,m)=0;
  124.    end
  125. end
  126. %更新信息素
  127. Delta_Tau=zeros(N,N);%更新量初始化
  128.    for m=1:M
  129.      if PL(k,m)  
  130.         ROUT=ROUTES{k,m};
  131.         TS=length(ROUT)-1;%跳數(shù)
  132.          PL_km=PL(k,m);
  133.         for s=1:TS
  134.           x=ROUT(s);
  135.           y=ROUT(s+1);
  136.           Delta_Tau(x,y)=Delta_Tau(x,y)+Q/PL_km;
  137.           Delta_Tau(y,x)=Delta_Tau(y,x)+Q/PL_km;
  138.         end
  139.      end
  140.   end
  141. Tau=(1-Rho).*Tau+Delta_Tau;%信息素?fù)]發(fā)一部分,新增加一部分
  142. end
  143. %繪圖
  144. plotif=1;%是否繪圖的控制參數(shù)
  145. if plotif==1 %繪收斂曲線
  146.     minPL=zeros(K);
  147.    for i=1:K
  148.      PLK=PL(i,:);
  149.      Nonzero=find(PLK);
  150.      PLKPLK=PLK(Nonzero);
  151.      minPL(i)=min(PLKPLK);
  152.    end
  153. figure(1)
  154. plot(minPL);
  155. hold on
  156. grid on
  157. title('收斂曲線變化趨勢');
  158. xlabel('迭代次數(shù)');
  159. ylabel('最小路徑長度'); %繪爬行圖
  160. figure(2)
  161. axis([0,MM,0,MM])
  162. for i=1:MM
  163. for j=1:MM
  164. if G(i,j)==1
  165. x1=j-1;y1=MM-i;
  166. x2=j;y2=MM-i;
  167. x3=j;y3=MM-i+1;
  168. x4=j-1;y4=MM-i+1;
  169. fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);
  170. hold on
  171. else
  172. x1=j-1;y1=MM-i;
  173. x2=j;y2=MM-i;
  174. x3=j;y3=MM-i+1;
  175. x4=j-1;y4=MM-i+1;
  176. fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);
  177. hold on
  178. end
  179. end
  180. end
  181. hold on
  182. title('機(jī)器人運(yùn)動軌跡');
  183. xlabel('坐標(biāo)x');
  184. ylabel('坐標(biāo)y');
  185. ROUT=ROUTES{mink,minl};
  186. LENROUT=length(ROUT);
  187. Rx=ROUT;
  188. Ry=ROUT;
  189. for ii=1:LENROUT
  190. Rx(ii)=a*(mod(ROUT(ii),MM)-0.5);
  191. if Rx(ii)==-0.5
  192. Rx(ii)=MM-0.5;
  193. end
  194. Ry(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM));
  195. end
  196. plot(Rx,Ry)
  197. end
  198. plotif2=0;%繪各代螞蟻爬行圖
  199. if plotif2==1
  200. figure(3)
  201. axis([0,MM,0,MM])
  202. for i=1:MM
  203. for j=1:MM
  204. if G(i,j)==1
  205. x1=j-1;y1=MM-i;
  206. x2=j;y2=MM-i;
  207. x3=j;y3=MM-i+1;
  208. x4=j-1;y4=MM-i+1;
  209. fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);
  210. hold on
  211. else
  212. x1=j-1;y1=MM-i;
  213. x2=j;y2=MM-i;
  214. x3=j;y3=MM-i+1;
  215. x4=j-1;y4=MM-i+1;
  216. fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);
  217. hold on
  218. end
  219. end
  220. end
  221. for k=1:K
  222. PLK=PL(k,:);
  223. minPLK=min(PLK);
  224. pos=find(PLK==minPLK);
  225. m=pos(1);
  226. ROUT=ROUTES{k,m};
  227. LENROUT=length(ROUT);
  228. Rx=ROUT;
  229. Ry=ROUT;
  230. for ii=1:LENROUT
  231. Rx(ii)=a*(mod(ROUT(ii),MM)-0.5);
  232. if Rx(ii)==-0.5
  233. Rx(ii)=MM-0.5;
  234. end
  235. Ry(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM));
  236. end
  237. plot(Rx,Ry)
  238. hold on
  239. end
  240. end

復(fù)制代碼


ACO.rar

2.12 KB, 下載次數(shù): 21

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表