資源簡(jiǎn)介
這是找到的開(kāi)源的很不錯(cuò)的matlba蟻群算法的仿真代碼。經(jīng)驗(yàn)證,可以很不錯(cuò)的實(shí)現(xiàn)蟻群算法的路徑規(guī)劃和避障的仿真實(shí)驗(yàn),可借鑒并運(yùn)用在機(jī)器人上。感謝開(kāi)源作者。分享給大家,一起學(xué)習(xí)。
代碼片段和文件信息
function?main()
map=[0?0?0?0?0?0?1?1?0?0?0?0?0?0?0?0?0?0?0?0;
?????0?1?1?0?0?0?1?1?0?0?0?0?0?0?0?0?0?0?0?0;
?????0?1?1?0?0?0?1?1?0?0?0?0?0?0?0?0?0?0?0?0;
?????0?0?0?0?0?0?1?1?0?0?0?0?0?0?0?0?0?0?0?0;
?????0?0?0?0?0?0?1?1?0?0?0?0?0?0?0?0?0?0?0?0;
?????
?????0?1?1?1?0?0?1?1?0?0?0?0?0?0?0?0?0?0?0?0;
?????0?1?1?1?0?0?1?1?0?0?0?0?0?0?0?0?0?0?0?0;
?????0?1?1?1?0?0?1?1?0?0?1?1?1?1?0?0?0?0?0?0;
?????0?1?1?1?0?0?0?0?0?0?1?1?1?1?0?0?0?0?0?0;
?????0?0?0?0?0?0?0?0?0?0?1?1?1?1?0?0?0?0?0?0;
?????
?????0?0?0?0?0?0?0?1?1?1?1?1?1?1?0?0?0?0?0?0;
?????0?0?0?0?0?0?0?1?1?1?1?1?1?1?0?0?0?0?0?0;
?????0?0?0?0?0?0?0?0?0?0?0?1?1?1?0?1?1?1?1?0;
?????0?0?0?0?0?0?0?0?0?0?0?1?1?1?0?1?1?1?1?0;
?????1?1?1?1?0?0?0?0?0?0?0?1?1?1?0?1?1?1?1?0;
?????
?????1?1?1?1?0?0?1?1?1?1?1?1?0?0?0?0?0?0?0?0;
?????0?0?0?0?0?0?1?1?1?1?1?1?0?0?0?0?0?1?1?0;
?????0?0?0?0?0?0?0?0?0?0?1?1?0?0?0?0?0?1?1?0;
?????0?0?0?0?0?0?0?0?0?0?1?1?0?0?1?0?0?0?0?0;
?????0?0?0?0?0?0?0?0?0?0?1?1?0?0?0?0?0?0?0?0;];
Map_Size=size(map1);?????????????????? ???%?map?地形圖為01矩陣,如果為1表示障礙物
Phe_Mat?=ones(Map_Size*Map_SizeMap_Size*Map_Size);?????????????%?Phe_Mat?初始信息素矩陣
Phe_Mat=8.*Phe_Mat;
%..........................
diedai_num=100;??????????????????????? ???%迭代次數(shù)(指螞蟻出動(dòng)多少波)
ant_num=50;???????????????????????? ???%螞蟻個(gè)數(shù)
min_start=1?;????????????????????????? ???%最短路徑的起始點(diǎn)
Map_Size_pow2=Map_Size*Map_Size;????????????????????????%最短路徑的目的點(diǎn)
Alpha_infoimpor=1;?????????????????????? ???%?Alpha_infoimpor?表征信息素重要程度的參數(shù)
Alpha_qifa=7;??????????????????????? ???%?Alpha_qifa?表征啟發(fā)式因子重要程度的參數(shù)
Alpha_zhenfa=0.3?;?????????????????????? ???%?Alpha_zhenfa?信息素蒸發(fā)系數(shù)
Alpha_add=1;???????????????????????????????%?Alpha_add?信息素增加強(qiáng)度系數(shù)
%...................................
minkl=inf;??%正無(wú)窮
mink=0;
minl=0;
queMap=G2D(map);
queMap_size=size(queMap1);??????????????%queMap_size表示問(wèn)題的規(guī)模(象素個(gè)數(shù))
a=1;?????????????????????%小方格象素的邊長(zhǎng)
End_x=a*(mod(Map_Size_pow2Map_Size)-0.5);????%終止點(diǎn)橫坐標(biāo)
if?End_x==-0.5
????End_x=Map_Size-0.5;
end
%....................
End_y=a*(Map_Size+0.5-ceil(Map_Size_pow2/Map_Size));?%終止點(diǎn)縱坐標(biāo)
%..........................................
qifa_info=zeros(queMap_size);?????????????%啟發(fā)式信息,取為至目標(biāo)點(diǎn)的直線距離的倒數(shù)
%以下啟發(fā)式信息矩陣
for?i=1:queMap_size
????ix=a*(mod(iMap_Size)-0.5);
????if?ix==-0.5
????????ix=Map_Size-0.5;
????end
????iy=a*(Map_Size+0.5-ceil(i/Map_Size));
????if?i~=Map_Size_pow2
????????qifa_info(i)=1/((ix-End_x)^2+(iy-End_y)^2)^0.5;
????else
????????qifa_info(i)=100;
????end????
end
%................................
per_g_ant_path=cell(diedai_numant_num);?????%用細(xì)胞結(jié)構(gòu)存儲(chǔ)每一代的每一只螞蟻的爬行路線
per_g_perant_pathlong=zeros(diedai_numant_num);?????????%用矩陣存儲(chǔ)每一代的每一只螞蟻的爬行路線長(zhǎng)度
%啟動(dòng)diedai_num輪螞蟻覓食活動(dòng),每輪派出ant_num只螞蟻
for?diedai_item=1:diedai_num
????for?ant_item=1:ant_num
????????%狀態(tài)初始化
????????W=min_start;??????????????????%當(dāng)前節(jié)點(diǎn)初始化為起始點(diǎn)
????????Path=min_start;???????????????%爬行路線初始化
????????PLkm=0;???????????????%爬行路線長(zhǎng)度初始化
????????TABUkm=ones(queMap_size);???????%禁忌表初始化
????????TABUkm(min_start)=0
評(píng)論
共有 條評(píng)論