資源簡介
這是一份關于蟻群算法的源代碼,主要用于路徑規劃,親測可以運行
代碼片段和文件信息
%%?---------------------------------------------------------------
%??輸入參數列表
%??G????????地形圖為01矩陣,如果為1表示障礙物
%??Tau??????初始信息素矩陣(認為前面的覓食活動中有殘留的信息素)
%??K????????迭代次數(指螞蟻出動多少波)
%??M????????螞蟻個數(每一波螞蟻有多少個)
%??S????????起始點(最短路徑的起始點)
%??E????????終止點(最短路徑的目的點)
%??Alpha????表征信息素重要程度的參數
%??Beta?????表征啟發式因子重要程度的參數
%??Rho??????信息素蒸發系數
%??Q????????信息素增加強度系數
%
%??輸出參數列表
%??ROUTES???每一代的每一只螞蟻的爬行路線
%??PL???????每一代的每一只螞蟻的爬行路線長度
%??Tau??????輸出動態修正過的信息素
%%?--------------------變量初始化----------------------------------
function?m_main()
tic
G=[0?0?0?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?1?1?1?0?0?0?0?0?0?0?0?0?0?0;
???0?0?0?0?0?0?1?1?1?0?0?0?0?0?0?0?0?0?0?0;
???0?0?0?0?0?0?1?1?1?0?0?0?0?0?0?0?0?0?0?0;
???0?1?1?1?0?0?1?1?1?0?0?0?0?0?0?0?0?0?0?0;
???0?1?1?1?0?0?1?1?1?0?0?0?0?0?0?0?0?0?0?0;
???0?1?1?1?0?0?1?1?1?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?0?0?0?1?1?1?1?0?0?0?0?0?0;
???0?0?0?0?0?0?0?0?0?0?0?0?0?0?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;
???0?0?1?1?0?0?0?0?0?0?0?1?1?1?0?1?1?1?1?0;
???0?0?1?1?0?0?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?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?1?1?0;
???0?0?0?0?0?0?0?0?0?0?0?0?0?0?1?0?0?0?0?0;
???0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0;];?%利用矩陣來表示柵格
MM=size(G1);??????%?G?地形圖為01矩陣,如果為1表示障礙物?返回矩陣G的行數(有幾行)
Tau=ones(MM*MMMM*MM);%?Tau?初始信息素矩陣,在這里設置所有位置初始信息素都相同(400*400矩陣)
Tau=8.*Tau;
K=100;??????????%?K?迭代次數(指螞蟻出動多少波)
M=50;?????????%?M?螞蟻個數(每一波螞蟻有多少個)
S=1?;?????????%?S?起始點(最短路徑的起始點)
E=MM*MM;?????????%?E?終止點(最短路徑的目的點)
Alpha=1;????%?Alpha?表征信息素重要程度的參數
Beta=7;?????%?Beta?表征啟發式因子重要程度的參數
Rho=0.3;?????%?Rho?信息素蒸發系數
Q=1;??????????%?Q?信息素增加強度系數
minkl=inf;
mink=0;
minl=0;
D=G2D(G);
N=size(D1);%N表示問題的規模??
a=1;%小方格象素的邊長
Ex=a*(mod(EMM)-0.5);%終止點橫坐標?mod求余函數
if?Ex==-0.5
Ex=MM-0.5;
end
Ey=a*(MM+0.5-ceil(E/MM));%終止點縱坐標?cell返回大于或者等于指定表達式的最小整數
Eta=zeros(N);%啟發式信息,取為至目標點的直線距離的倒數
%下面構造啟發式信息矩陣
for?i=1:N
?ix=a*(mod(iMM)-0.5);
???if?ix==-0.5
???ix=MM-0.5;
???end
iy=a*(MM+0.5-ceil(i/MM));?
???if?i~=E?%不等于
???Eta(i)=1/((ix-Ex)^2+(iy-Ey)^2)^0.5;
???else
???Eta(i)=100;
???end
end
ROUTES=cell(KM);%用細胞結構存儲每一代的每一只螞蟻的爬行路線里面的元素可以是任意類型的變量(屬性變量,用戶自己創建的變量),而不必是統一的類型
PL=zeros(KM);%用矩陣存儲每一代的每一只螞蟻的爬行路線長度
%%?-----------啟動K輪螞蟻覓食活動,每輪派出M只螞蟻--------------------
for?k=1:K
for?m=1:M
%%?第一步:狀態初始化
W=S;%當前節點初始化為起始點
Path=S;%爬行路線初始化
PLkm=0;%爬行路線長度初始化
TABUkm=ones(N);%禁忌表初始化
TABUkm(S)=0;%已經在初始點了,因此要排除
DD=D;%鄰接矩陣初始化
%%?第二步:下一步可以前往的節點
DW=DD(W:);
DW1=find(DW);
for?j=1:length(DW1)
???if?TABUkm(DW1(j))==0
??????DW(DW1(j))=0;
??end
end
LJD=find(DW);
Len_LJD=length(LJD);%可選節點的個數
%%?覓食停止條件:螞蟻未遇到食物或者陷入死胡同
while?W~=E&&Len_LJD>=1
%%?第三步:轉輪賭法選擇下一步怎么走
PP=zeros(Len_LJD);
??for?i=1:Len_LJD
????PP(i)=(Tau(WLJD(i))^Alpha)*((Eta(LJD(i)))^Beta);??
??end
sum
- 上一篇:matlab串口實時波形顯示
- 下一篇:基于視頻的matlab光流法
評論
共有 條評論