📄 path.m
字号:
% 某只蚂蚁找到的某条路径routek,lengthk
function [routek,lengthk]=path(distance,tau,alpha,beta,Citystart)
[m,n]=size(distance);
if isempty(Citystart) % 如果不确定起点
p=fix(m*rand)+1; % 随机方式初始化起点,均匀概率
else
p=Citystart; % 外部给定确定起点
end
lengthk=0; % 初始路径长度设为 0
routek=[p]; % 蚂蚁路径点序列,即该蚂蚁已经过的城市集合,路径初始起点
for i=1:m-1
np=routek(end); % 蚂蚁路径城市序号,依次经过的城市编号
np_sum=0; % 路由长度初始为 0
for j=1:m
if inroute(j,routek) % 判断城市节点j是否属于tabuk,即是否已经过
continue;
else % j为还未经过的点,对
ada=1/distance(np,j); % 预见度
np_sum=np_sum+tau(np,j)^alpha*ada^beta; % 路由表:信息痕迹、预见度
end
end
cp=zeros(1,m); % 转移概率,基于路径长度及路由表
for j=1:m
if inroute(j,routek)
continue;
else
ada=1/distance(np,j); % 预见度
cp(j)=tau(np,j)^alpha*ada^beta/np_sum; % np到j的转移概率
end
end
NextCity=nextcitychoose3(cp); % 根据转移概率确定下一个城市,
% 这里采用不同的随机决策原则所得效果也不同:
% nextcitychoose3 取转移概率最大值方向
% nextcitychoose和nextcitychoose2 转移概率累积序列大于某随机值方向
% 直观地,取转移概率最大值方向方法,决策结果稳定且收敛快
routek=[routek,NextCity]; % 更新路径
lengthk=lengthk+distance(np,NextCity); % 更新路径长度
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -