• 大小: 7KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-25
  • 语言: Matlab
  • 标签: 蚁群算法  

资源简介

功能比较齐全的蚁群算法工具箱,包含测试数据,自我介绍文件,对源数据进行处理的程序,对数据处理后可以使用蚁群算法进行TSP问题的研究,最后绘制路径图,本工具箱使用matlab代码编写。是你研究蚁群算法不可多得的助手。

资源截图

代码片段和文件信息

function [Route_BestLength_BestLength_AverageShortest_RouteShortest_LengthTime]=ACMTSP(CityLoop_MaxAnt_CountAlphaBetaVolatileQ)
%%根据城市的坐标运行,使用蚁群算法求解最优化问题,并最后绘制运行结果的图形。
%%使用说明:[Route_BestLength_BestLength_AverageShortest_RouteShortest_Length]=ACMTSP(CityLoop_MaxAnt_CountAlphaBetaVolatileQ)
%% 主要符号说明
%%City_Count:城市的个数.
%% City:City_Count个城市的坐标,City_Count×2的矩阵.
%% Loop_Max:最大循环次数,即迭代的次数
%% Ant_Count:蚂蚁个数
%% Alpha:表征信息素重要程度的参数
%% Beta:表征启发因子(期望)重要程度的参数
%% Volatile:信息素挥发系数
%% Q:信息素强度的系数,一般是一个常量
%% Route_Best:代表最佳路线
%% Length_Best:代最佳路线的长度
%%Length_Average:代表平均路径长度
%%Shortest_Route:表示找到的最短的路径,其中包含城市节点序列
%%Shortest_Length:表示最短路径的长度
%%Time:程序运行时间,不包括绘图时间.
%%========================================================================= 

%第一步:变量初始化
City_Count=size(City1);%City_Count表示问题的规模(城市个数)
D=zeros(City_CountCity_Count);%D表示完全图的赋权邻接矩阵
for i=1:City_Count
    for j=1:City_Count
        if i~=j
            D(ij)=((City(i1)-City(j1))^2+(City(i2)-City(j2))^2)^0.5;
        else
            D(ij)=eps; %i=j时不计算,应该为0,但后面的启发因子要取倒数,用eps(浮点相对精度)表示
        end
        D(ji)=D(ij);   %对称矩阵
    end
end
%D表示城市之间的距离,D(i,j)表示第i个城市距离第j个城市之间的距离.
%D这个矩阵应该是对称的。
Expectation=1./D;%Eta为启发因子,这里设为距离的倒数
T_Pheromone=ones(City_CountCity_Count);     %T_Pheromone为信息素矩阵
T_Ant_Passed=zeros(Ant_CountCity_Count);   %存储并记录每个蚂蚁经过的路径
NC=1; %迭代计数器,记录迭代次数
Route_Best=zeros(Loop_MaxCity_Count);%每代找到的最佳路线
Length_Best=inf.*ones(Loop_Max1);   %每代最佳路线的长度
Length_Average=zeros(Loop_Max1);        %每代路线的平均长度
tic
while NC<=Loop_Max        %停止条件之一:达到最大迭代次数,停止
    %%第二步:将m只蚂蚁放到n个城市上
    Rand_Position=[];   %随即存取
    for i=1:(ceil(Ant_Count/City_Count))
        Rand_Position=[Rand_Positionrandperm(City_Count)];
    end
    T_Ant_Passed(:1)=(Rand_Position(11:Ant_Count))‘;    %将蚂蚁放在城市上,并记录蚂蚁访问过的城市的编号    
    %%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游
    for j=2:City_Count     %所在城市不计算
        for i=1:Ant_Count  
            visited=T_Ant_Passed(i1:(j-1)); %记录已访问的城市,避免重复访问
            No_Visited_City=zeros(1(City_Count-j+1));       %待访问的城市
            P=No_Visited_City;                      %待访问城市的选择概率分布
            No_V_C_Count=1;
            for k=1:City_Count
                if isempty(find(visited==k 1))   %开始时置0
                    No_Visited_City(No_V_C_Count)=k;                    
                    No_V_C_Count=No_V_C_Count+1;  %访问的城市个数自加1
                end
            end
            %下面计算待选城市的概率分布
            for k=1:length(No_Visited_City)
                P(k)=(T_Pheromone(visited(end)No_Visited_City(k))^Alpha)*(Expectation(visited(end)No_Visited_City(k))^Beta);
            end
            P=P/(sum(P));
            %按概率原则选取下一个城市
            Pcum=cumsum(P);    %cumsum,元素累加即求和
            Select=find(Pcum>=rand); %若计算的概率大于原来的就选择这条路线
            %-------------------------
            %Select=find(P>=rand); %若计算的概率大于原来的就选择这条路线
            %while(isempty(Select))
            %    Select=find(P>=r

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6728  2010-11-25 01:05  ACS_Niu\ACMTSP.m

     文件       4981  2010-11-25 01:04  ACS_Niu\ACM_TSP_Dist.m

     文件        504  2010-11-25 00:32  ACS_Niu\GetMatrixByLowerDiag.m

     文件        631  2010-11-25 00:53  ACS_Niu\MatrixR17.mat

     文件        832  2010-11-25 00:53  ACS_Niu\MatrixR21.mat

     文件        319  2010-11-25 00:54  ACS_Niu\St70.mat

     目录          0  2010-11-25 01:08  ACS_Niu

----------- ---------  ---------- -----  ----

                13995                    7


评论

共有 条评论