?? path.m
字號(hào):
% 某只螞蟻找到的某條路徑routek,lengthk
function [routek,lengthk]=path(distance,tau,alpha,beta,Citystart)
[m,n]=size(distance);
if isempty(Citystart) % 如果不確定起點(diǎn)
p=fix(m*rand)+1; % 隨機(jī)方式初始化起點(diǎn),均勻概率
else
p=Citystart; % 外部給定確定起點(diǎn)
end
lengthk=0; % 初始路徑長度設(shè)為 0
routek=[p]; % 螞蟻路徑點(diǎn)序列,即該螞蟻已經(jīng)過的城市集合,路徑初始起點(diǎn)
for i=1:m-1
np=routek(end); % 螞蟻路徑城市序號(hào),依次經(jīng)過的城市編號(hào)
np_sum=0; % 路由長度初始為 0
for j=1:m
if inroute(j,routek) % 判斷城市節(jié)點(diǎn)j是否屬于tabuk,即是否已經(jīng)過
continue;
else % j為還未經(jīng)過的點(diǎn),對(duì)
ada=1/distance(np,j); % 預(yù)見度
np_sum=np_sum+tau(np,j)^alpha*ada^beta; % 路由表:信息痕跡、預(yù)見度
end
end
cp=zeros(1,m); % 轉(zhuǎn)移概率,基于路徑長度及路由表
for j=1:m
if inroute(j,routek)
continue;
else
ada=1/distance(np,j); % 預(yù)見度
cp(j)=tau(np,j)^alpha*ada^beta/np_sum; % np到j(luò)的轉(zhuǎn)移概率
end
end
NextCity=nextcitychoose3(cp); % 根據(jù)轉(zhuǎn)移概率確定下一個(gè)城市,
% 這里采用不同的隨機(jī)決策原則所得效果也不同:
% nextcitychoose3 取轉(zhuǎn)移概率最大值方向
% nextcitychoose和nextcitychoose2 轉(zhuǎn)移概率累積序列大于某隨機(jī)值方向
% 直觀地,取轉(zhuǎn)移概率最大值方向方法,決策結(jié)果穩(wěn)定且收斂快
routek=[routek,NextCity]; % 更新路徑
lengthk=lengthk+distance(np,NextCity); % 更新路徑長度
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -