用于网络路径规划中寻找端到端(点到点)最短路径的蚁群算法

在网络上已经被传疯了N*N次的、上传到海枯石烂的、数模参赛者听了津津乐道(大概)、研究者津津乐道(大概)、然而估计很多人估计都看吐了的某位南大教授写的蚁群算法…………

总之来一个链接吧:https://blog.csdn.net/kwame211/article/details/80347593

如果对于蚁群算法有兴趣深入研究的直接找上面链接…………

然而先不说这算法被ctrl+c ctrl+v了N*N次,基本全部都是同一个算法同一个代码……这个算法用来解决旅行商(TSP)问题。二TSP问题需要遍历所有节点,也就是要让旅行商找到一个环游所有城市的最短路径

就是没有找到用于网络拓扑寻址的端到端的算法。用脚趾头想想都知道,网络寻路当中不需要每次都跑遍所有路径,只需要源节点和目的节点之间找到最短路径就好。

总之再说一遍,这个算法是用于网络拓扑矩阵中端到端寻址的蚁群算法,基于之前大家都看烂了的蚁群算法改的。
目前已有很多研究将蚁群算法用于网络路由寻址,比如波分复用网络(WDM)和弹性光网络(EON)的路由分配问题经常用到蚁群算法,然而网络上的蚁群算法只能用于遍历全局寻找最短遍历路径,不能用于寻找网络中的最短路由路径。因为在网络寻路中不需要遍历整个网络节点。
这个matlab程序使用的是弹性光网络中常见的NSFNET网络拓扑(不懂这个网络拓扑的请自己百度……)。
使用方法:
在matlab中直接打开并运行Ant_Colony_net_rout2.m文件。
具体步骤解释在代码中已经详细写出。
由于这个算法感觉跑的太慢了…………懒得测试了……所以不能完全保证寻到的路都对……
为了保证最后寻路的最短路径没错,附带一个ksp网络路由寻路算法(这个是网上找的)。自己跑的几个测试结果是没错的。
KSP算法使用方法:
在KSP-algorithm文件夹中,打开并运行gen_k_shortest_path.m,输出结果保存在ouput_1.txt中,注释已经写了……自己看吧……不想一个个解释

本算法的基本思想很简单:原始的蚁群算法需要遍历全部的节点,所以全部的蚂蚁均匀分布在所有节点,而在这个算法中,蚂蚁全部集中于一个点,然后一旦走到目的节点,直接结束寻路。

蚂蚁数量和迭代次数怎么选就看大家帮忙测试了。

如果有更好的用蚁群算法实现网络寻址的思路欢迎讨论

资源审核成功之后会添加资源连接。

下载资源地址

https://download.csdn.net/download/yuhouwucaihong/11580453

时隔四年的更新:

(其实好久没做这块了……)

贴上源码:

源码使用方法(自己四年前写的代码自己都忘记了……):

这个算法是用于网络拓扑矩阵中端到端寻址的蚁群算法。 CSDN上面的蚁群算法基本都是南京某大学老师写的算法,用于旅行商问题(TSP问题)。 目前已有很多研究将蚁群算法用于网络路由寻址,比如波分复用网络和弹性光网络的路由分配问题经常用到蚁群算法,然而网络上的蚁群算法只能用于遍历全局寻找最短遍历路径,不能用于寻找网络中的最短路由路径。因为在网络驯鹿中不需要遍历整个网络节点。 这个matlab程序使用的是弹性光网络中常见的NSFNET网络拓扑(不懂这个网络拓扑的请自己百度……)。 使用方法: 在matlab中直接打开并运行Ant_Colony_net_rout2.m文件。 具体步骤解释在代码中已经详细写出。 由于这个算法感觉跑的太慢了…………懒得测试了……所以不能完全保证寻到的路都对…… 为了保证最后寻路的最短路径没错,附带一个ksp网络路由寻路算法(这个是网上找的)。自己跑的几个测试结果是没错的。 KSP算法使用方法: 在KSP-algorithm文件夹中,打开并运行gen_k_shortest_path.m,输出结果保存在ouput_1.txt中,注释已经写了……自己看吧……不想一个个解释

Ant_Colony_net_rout2.m

这个是自己改的

%用于网络拓扑矩阵中端到端寻址的蚁群算法算法

clear all; %清除所有变量  
close all; %清图  
clc ;      %清屏  



  

 
src = 3;%源节点
des = 11;%目的节点
m=50;    %% m 蚂蚁个数  
Alpha=1;  %% Alpha 表征信息素重要程度的参数  
Beta=5;  %% Beta 表征启发式因子重要程度的参数  
Rho=0.1; %% Rho 信息素蒸发系数  
NC_max=200; %%最大迭代次数  
% NC_max=100; %%最大迭代次数
Q=100;         %%信息素增加强度系数  


n = 14;
%使用nsfnet矩阵测试
nsfnet = [
Inf	2100	3000	Inf	Inf	Inf	Inf	4800	Inf	Inf	Inf	Inf	Inf	Inf
2100	Inf	1200	1500	Inf	Inf	Inf	Inf	Inf	Inf	Inf	Inf	Inf	Inf
3000	1200	Inf	Inf	Inf	300	Inf	Inf	Inf	Inf	Inf	Inf	Inf	Inf
Inf	1500	Inf	Inf	1200	Inf	Inf	Inf	Inf	Inf	3900	Inf	Inf	Inf
Inf	Inf	Inf	1200	Inf	2400	1200	Inf	Inf	Inf	Inf	Inf	Inf	Inf
Inf	Inf	300	Inf	2400	Inf	Inf	Inf	Inf	3600	Inf	Inf	Inf	2100
Inf	Inf	Inf	Inf	1200	Inf	Inf	1500	Inf	2700	Inf	Inf	Inf	Inf
4800	Inf	Inf	Inf	Inf	Inf	1500	Inf	1500	Inf	Inf	Inf	Inf	Inf
Inf	Inf	Inf	Inf	Inf	Inf	Inf	1500	Inf	1500	Inf	600	600	Inf
Inf	Inf	Inf	Inf	Inf	3600	2700	Inf	1500	Inf	Inf	Inf	Inf	Inf
Inf	Inf	Inf	3900	Inf	Inf	Inf	Inf	Inf	Inf	Inf	1200	1500	Inf
Inf	Inf	Inf	Inf	Inf	Inf	Inf	Inf	600	Inf	1200	Inf	Inf	600
Inf	Inf	Inf	Inf	Inf	Inf	Inf	Inf	600	Inf	1500	Inf	Inf	300
Inf	Inf	Inf	Inf	Inf	2100	Inf	Inf	Inf	Inf	Inf	600	300	Inf
];

%对每条路径进行编号,根据matlab的便利顺序进行编号
nsfnet_numbering = numbering_path_vector(nsfnet,14,14);

%将D中的inf设为更靠谱的数字,设为Inf时候函数会出错,Inf转为99999

for i=1:1:n
    for j = 1:1:n
        if(nsfnet(i,j)==Inf)
            nsfnet(i,j) = 99999;
        end        
    end
end



% Eta=1./D;          %Eta为启发因子,这里设为距离的倒数  
Eta=1./nsfnet;          %Eta为启发因子,这里设为距离的倒数  

%******************************************************
%------------------------------------------------------
%原始论文中的Eta因子不是Eta=1./nsfnet; 参考原始论文公式(4-1)
%------------------------------------------------------
%******************************************************

Tau=ones(n,n);     %Tau为信息素矩阵  
Tabu=zeros(m,n);   %存储并记录路径的生成  
NC=1;               %迭代计数器,记录迭代次数  
R_best=zeros(NC_max,n);       %各代最佳路线  
L_best=inf.*ones(NC_max,1);   %各代最佳路线的长度  
L_ave=zeros(NC_max,1);        %各代路线的平均长度  
  
  
  
while NC<=NC_max        %停止条件之一:达到最大迭代次数,停止  
    %%第二步:将m只蚂蚁放到n个城市上  
    Randpos=[];   %随即存取  
    for i=1:(ceil(m/n))  %ceil:朝正无穷大四舍五入,也就是尽量每个城市的蚂蚁数一致
%         Randpos=[Randpos,randperm(n)];  %p = randperm(n) 返回行向量,其中包含从 1 到 n(包括二者)之间的整数随机置换。
        %也就是说生成一串范围1-n的不重复序列
         Randpos=[Randpos,ones(1,n)*src];  %将出发点全部换成起始点
    end  
    Tabu(:,1)=(Randpos(1,1:m));  %   让每只蚂蚁平均地从每个城市开始寻路,蚂蚁数量只取到规定的数量
    %%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游  
    for j=2:n     %所在城市不计算 ,n是矩阵长度,也就是城市数量
        for i=1:m  %m是蚂蚁数量
            visited=Tabu(i,1:(j-1)); %记录已访问的城市,避免重复访问  
            J=zeros(1,(n-j+1));       %待访问的城市  
            P=J;                      %待访问城市的选择概率分布  
            Jc=1;  
            for k=1:n   %遍历所有城市
                if length(find(visited==k))==0   %开始时置0  %如果访问过的城市之中没有k,有的话说明已经访问过了
                    J(Jc)=k;  %没有访问过就加入待访问的城市
                    Jc=Jc+1;                         %访问的城市个数自加1  
                end  
            end  
            %下面计算待选城市的概率分布  
            for k=1:length(J)  
                if(visited(end)~=0)%判断是否为0,不为0则继续计算
                    P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);  %Eta是启发因子
                else
                    continue;
                end
            end  
            
            %判断一下当前的路径是否已经到达过目标点
            if(find(Tabu(i,:)==des))%判断当前路径矩阵是否存在目的节点
                continue;
            else     
                P=P/(sum(P));  
                %按概率原则选取下一个城市  
                Pcum=cumsum(P);     %cumsum,元素累加即求和  
                Select=find(Pcum>=rand); %若计算的概率大于原来的就选择这条路线  注:X = rand 返回一个在区间 (0,1) 内均匀分布的随机数。
                to_visit=J(Select(1));  
                Tabu(i,j)=to_visit;  %储存这一步的路径
            end
        end  
    end  
    if NC>=2  
        Tabu(1,:)=R_best(NC-1,:);  
    end  
    %%第四步:记录本次迭代最佳路线  
    L=zeros(m,1);     %开始距离为0,m*1的列向量  
    for i=1:m  
        R=Tabu(i,:);  
        for j=1:(n-1)  %说白了就是计算一下路径长度…………
%             L(i)=L(i)+D(R(j),R(j+1));    %原距离加上第j个城市到第j+1个城市的距离 
            if(R(j+1)~=0)%判断是否为0,如果是0的话就别加了
                L(i)=L(i)+nsfnet(R(j),R(j+1));    %原距离加上第j个城市到第j+1个城市的距离  
            else
                break;%如果为0的话说明后面的都是0了,计算的路径到头了
            end
        end  
%         L(i)=L(i)+D(R(1),R(n));      %一轮下来后走过的距离  
%        L(i)=L(i)+nsfnet(R(1),R(n));      %一轮下来后走过的距离  
    end  
    L_best(NC)=min(L);           %最佳距离取最小  ,只是这一轮的最佳距离
    pos=find(L==L_best(NC));  
    R_best(NC,:)=Tabu(pos(1),:); %此轮迭代后的最佳路线  
    L_ave(NC)=mean(L);           %此轮迭代后的平均距离  
    NC=NC+1;                      %迭代继续  
  
      
    %%第五步:更新信息素  
    Delta_Tau=zeros(n,n);        %开始时信息素为n*n的0矩阵  
    for i=1:m  %对每只蚂蚁的处理
        for j=1:(n-1)
            if(Tabu(i,j+1)~=0)
                Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);  
                %此次循环在路径(i,j)上的信息素增量
            else
                break;%如果找不到Tabu(i,j+1)也就是路径的值,说明已经到头了
            end
        end  
        %此次循环在整个路径上的信息素增量 ,不过网络寻路不需要循环
%         Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);  
         
    end  
    Tau=(1-Rho).*Tau+Delta_Tau; %考虑信息素挥发,更新后的信息素  
    %%第六步:禁忌表清零  
    Tabu=zeros(m,n);             %%直到最大迭代次数  
end  
%%第七步:输出结果  
Pos=find(L_best==min(L_best)); %找到最佳路径(非0为真)  
Shortest_Route=R_best(Pos(1),:) %最大迭代次数后最佳路径  
Shortest_Length=L_best(Pos(1)) %最大迭代次数后最短距离  
  

numbering_path_vector.m

%将路径矩阵编号,返回编号过的矩阵,m和n是目标矩阵的行和列
function [numbering_vector] = numbering_path_vector(net_vector,m,n)
k = 1;
numbering_vector = zeros(m,n);
for i = 1:1:m
    for j =1:1:n
        if(net_vector(i,j)&&(net_vector(i,j)~=Inf))%如果不为0也不为无穷大,即路径存在,编号,自加
            numbering_vector(i,j) = k;
            k = k+1;
        end
    end
end

end

Ant_Colony_net_rout.asv文件

%用于网络矩阵中端到端xu算法

clear all; %清除所有变量  
close all; %清图  
clc ;      %清屏  


%%%一个旅行商人要拜访全国31个省会城市,需要选择最短的路径%%%%  
  
  
%%%蚁群算法解决TSP问题%%%%%%%  
 
src = 3;%源节点
des = 11;%目的节点
m=50;    %% m 蚂蚁个数  
Alpha=1;  %% Alpha 表征信息素重要程度的参数  
Beta=5;  %% Beta 表征启发式因子重要程度的参数  
Rho=0.1; %% Rho 信息素蒸发系数  
NC_max=200; %%最大迭代次数  
% NC_max=100; %%最大迭代次数
Q=100;         %%信息素增加强度系数  
  
C=[  
1304 2312;  
3639 1315;  
4177 2244;  
3712 1399;  
3488 1535;  
3326 1556;  
3238 1229;  
4196 1004;  
4312 790;  
4386 570;  
3007 1970;  
2562 1756;  
2788 1491;  
2381 1676;  
1332 695;  
3715 1678;  
3918 2179;  
4061 2370;  
3780 2212;  
3676 2578;  
4029 2838;  
4263 2931;  
3429 1908;  
3507 2367;  
3394 2643;  
3439 3201;  
2935 3240;  
3140 3550;  
2545 2357;  
2778 2826;  
2370 2975  
];                %%31个省会坐标  
%%————————————————————————-  
%% 主要符号说明  
%% C n个城市的坐标,n×2的矩阵  
%% NC_max 最大迭代次数  
%% m 蚂蚁个数  
%% Alpha 表征信息素重要程度的参数  
%% Beta 表征启发式因子重要程度的参数  
%% Rho 信息素蒸发系数  
%% Q 信息素增加强度系数  
%% R_best 各代最佳路线  
%% L_best 各代最佳路线的长度  
%%=========================================================================  
%%第一步:变量初始化  
% n=size(C,1);%n表示问题的规模(城市个数)  
% D=zeros(n,n);%D表示完全图的赋权邻接矩阵  
% for i=1:n  
%     for j=1:n  
%         if i~=j  
%             D(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;  
%         else  
%             D(i,j)=eps;      %i=j时不计算,应该为0,但后面的启发因子要取倒数,用eps(浮点相对精度)表示  
%         end  
%         D(j,i)=D(i,j);   %对称矩阵  
%     end  
% end

n = 14;
%使用nsfnet矩阵测试
nsfnet = [
Inf	2100	3000	Inf	Inf	Inf	Inf	4800	Inf	Inf	Inf	Inf	Inf	Inf
2100	Inf	1200	1500	Inf	Inf	Inf	Inf	Inf	Inf	Inf	Inf	Inf	Inf
3000	1200	Inf	Inf	Inf	300	Inf	Inf	Inf	Inf	Inf	Inf	Inf	Inf
Inf	1500	Inf	Inf	1200	Inf	Inf	Inf	Inf	Inf	3900	Inf	Inf	Inf
Inf	Inf	Inf	1200	Inf	2400	1200	Inf	Inf	Inf	Inf	Inf	Inf	Inf
Inf	Inf	300	Inf	2400	Inf	Inf	Inf	Inf	3600	Inf	Inf	Inf	2100
Inf	Inf	Inf	Inf	1200	Inf	Inf	1500	Inf	2700	Inf	Inf	Inf	Inf
4800	Inf	Inf	Inf	Inf	Inf	1500	Inf	1500	Inf	Inf	Inf	Inf	Inf
Inf	Inf	Inf	Inf	Inf	Inf	Inf	1500	Inf	1500	Inf	600	600	Inf
Inf	Inf	Inf	Inf	Inf	3600	2700	Inf	1500	Inf	Inf	Inf	Inf	Inf
Inf	Inf	Inf	3900	Inf	Inf	Inf	Inf	Inf	Inf	Inf	1200	1500	Inf
Inf	Inf	Inf	Inf	Inf	Inf	Inf	Inf	600	Inf	1200	Inf	Inf	600
Inf	Inf	Inf	Inf	Inf	Inf	Inf	Inf	600	Inf	1500	Inf	Inf	300
Inf	Inf	Inf	Inf	Inf	2100	Inf	Inf	Inf	Inf	Inf	600	300	Inf
];

%对每条路径进行编号,根据matlab的便利顺序进行编号
nsfnet_numbering = numbering_path_vector(nsfnet,14,14);

%将D中的inf设为更靠谱的数字,设为Inf时候函数会出错,Inf转为99999

for i=1:1:n
    for j = 1:1:n
        if(nsfnet(i,j)==Inf)
            nsfnet(i,j) = 99999;
        end        
    end
end



% Eta=1./D;          %Eta为启发因子,这里设为距离的倒数  
Eta=1./nsfnet;          %Eta为启发因子,这里设为距离的倒数  

%******************************************************
%------------------------------------------------------
%原始论文中的Eta因子不是Eta=1./nsfnet; 参考原始论文公式(4-1)
%------------------------------------------------------
%******************************************************

Tau=ones(n,n);     %Tau为信息素矩阵  
Tabu=zeros(m,n);   %存储并记录路径的生成  
NC=1;               %迭代计数器,记录迭代次数  
R_best=zeros(NC_max,n);       %各代最佳路线  
L_best=inf.*ones(NC_max,1);   %各代最佳路线的长度  
L_ave=zeros(NC_max,1);        %各代路线的平均长度  
  
  
  
while NC<=NC_max        %停止条件之一:达到最大迭代次数,停止  
    %%第二步:将m只蚂蚁放到n个城市上  
    Randpos=[];   %随即存取  
    for i=1:(ceil(m/n))  %ceil:朝正无穷大四舍五入,也就是尽量每个城市的蚂蚁数一致
%         Randpos=[Randpos,randperm(n)];  %p = randperm(n) 返回行向量,其中包含从 1 到 n(包括二者)之间的整数随机置换。
        %也就是说生成一串范围1-n的不重复序列
         Randpos=[Randpos,ones(1,n)*src];  %将出发点全部换成起始点
    end  
    Tabu(:,1)=(Randpos(1,1:m));  %   让每只蚂蚁平均地从每个城市开始寻路,蚂蚁数量只取到规定的数量
    %%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游  
    for j=2:n     %所在城市不计算 ,n是矩阵长度,也就是城市数量
        for i=1:m  %m是蚂蚁数量
            visited=Tabu(i,1:(j-1)); %记录已访问的城市,避免重复访问  
            J=zeros(1,(n-j+1));       %待访问的城市  
            P=J;                      %待访问城市的选择概率分布  
            Jc=1;  
            for k=1:n   %遍历所有城市
                if length(find(visited==k))==0   %开始时置0  %如果访问过的城市之中没有k,有的话说明已经访问过了
                    J(Jc)=k;  %没有访问过就加入待访问的城市
                    Jc=Jc+1;                         %访问的城市个数自加1  
                end  
            end  
            %下面计算待选城市的概率分布  
            for k=1:length(J)  
                if(visited(end)~=0)%判断是否为0,不为0则继续计算
                    P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);  %Eta是启发因子
                else
                    continue;
                end
            end  
            
            %判断一下当前的路径是否已经到达过目标点
            if(find(Tabu(i,:)==des))%判断当前路径矩阵是否存在目的节点
                continue;
            else     
                P=P/(sum(P));  
                %按概率原则选取下一个城市  
                Pcum=cumsum(P);     %cumsum,元素累加即求和  
                Select=find(Pcum>=rand); %若计算的概率大于原来的就选择这条路线  注:X = rand 返回一个在区间 (0,1) 内均匀分布的随机数。
                to_visit=J(Select(1));  
                Tabu(i,j)=to_visit;  %储存这一步的路径
            end
        end  
    end  
    if NC>=2  
        Tabu(1,:)=R_best(NC-1,:);  
    end  
    %%第四步:记录本次迭代最佳路线  
    L=zeros(m,1);     %开始距离为0,m*1的列向量  
    for i=1:m  
        R=Tabu(i,:);  
        for j=1:(n-1)  %说白了就是计算一下路径长度…………
%             L(i)=L(i)+D(R(j),R(j+1));    %原距离加上第j个城市到第j+1个城市的距离 
            if(R(j+1)~=0)%判断是否为0,如果是0的话就别加了
                L(i)=L(i)+nsfnet(R(j),R(j+1));    %原距离加上第j个城市到第j+1个城市的距离  
            else
                break;%如果为0的话说明后面的都是0了,计算的路径到头了
            end
        end  
%         L(i)=L(i)+D(R(1),R(n));      %一轮下来后走过的距离  
%        L(i)=L(i)+nsfnet(R(1),R(n));      %一轮下来后走过的距离  
    end  
    L_best(NC)=min(L);           %最佳距离取最小  ,只是这一轮的最佳距离
    pos=find(L==L_best(NC));  
    R_best(NC,:)=Tabu(pos(1),:); %此轮迭代后的最佳路线  
    L_ave(NC)=mean(L);           %此轮迭代后的平均距离  
    NC=NC+1;                      %迭代继续  
  
      
    %%第五步:更新信息素  
    Delta_Tau=zeros(n,n);        %开始时信息素为n*n的0矩阵  
    for i=1:m  %对每只蚂蚁的处理
        for j=1:(n-1)
            if(Tabu(i,j+1)~=0)
                Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i);  
                %此次循环在路径(i,j)上的信息素增量
            else
                break;%如果找不到Tabu(i,j+1)也就是路径的值,说明已经到头了
            end
        end  
        %此次循环在整个路径上的信息素增量 ,不过网络寻路不需要循环
%         Delta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);  
         
    end  
    Tau=(1-Rho).*Tau+Delta_Tau; %考虑信息素挥发,更新后的信息素  
    %%第六步:禁忌表清零  
    Tabu=zeros(m,n);             %%直到最大迭代次数  
end  
%%第七步:输出结果  
Pos=find(L_best==min(L_best)); %找到最佳路径(非0为真)  
Shortest_Route=R_best(Pos(1),:) %最大迭代次数后最佳路径  
Shortest_Length=L_best(Pos(1)) %最大迭代次数后最短距离  
  
figure(1)   
plot(L_best)  
xlabel('迭代次数')  
ylabel('目标函数值')  
title('适应度进化曲线')  
  
  
figure(2)  
subplot(1,2,1)                  %绘制第一个子图形  
   %画路线图  
%%=========================================================================  
%% DrawRoute.m  
%% 画路线图  
%%————————————————————————-  
%% C Coordinate 节点坐标,由一个N×2的矩阵存储  
%% R Route 路线  
%%=========================================================================  
% N=length(R);  
% scatter(C(:,1),C(:,2));  
%  hold on  
%  plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)],'g')  
%  hold on  
% for ii=2:N  
%     plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)],'g')  
%      hold on  
% end  
% title('旅行商问题优化结果')  
%   
% subplot(1,2,2)                  %绘制第二个子图形  
% plot(L_best)  
% hold on                         %保持图形  
% plot(L_ave,'r')  
% title('平均距离和最短距离')     %标题  

使用方法:

numbering_path_vector.m,Ant_Colony_net_rout.asv文件,Ant_Colony_net_rout2.m 这三个文件放同一个路径下,然后matlab中运行Ant_Colony_net_rout2.m。

然后KSP算法就放个链接吧……

MATLAB-K最短路径算法(KSP,K-shortest pathes)_ksp算法_乐观的阿锡的博客-CSDN博客

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值