⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 path.m

📁 各城市间的距离的蚁群算法
💻 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 + -