资源简介

写毕业论文时写的蚁群算法求解TSP,matlab实现,求解质量比较好且算法收敛速度比较快,有空用c实现一下会更快,hoho

资源截图

代码片段和文件信息

function [L_ave_bestL_ave_aveR_bestL_bestL_aveShortest_RouteShortest_LengthFirst]=BB_AS(TSPfileNC_maxmAlphaBetaRhoWIN);
%%========================================================================= 
%% BB_AS.m 
%% BB-AS算法 
%%------------------------------------------------------------------------- 
%% infile TSP文件,字符串
%% NC_max 算法迭代次数上限
%% m 所采用的人工蚂蚁的个数
%% Alpha 信息素的幂
%% Beta 启发信息的幂
%% Rho 信息素的挥发系数
%% WIN 临域窗口大小
%% 返回各代最优解均值:L_ave_best;各代解均值:L_ave_ave;各代最佳路线:R_best;
%% 各代最佳路线的长度:L_best;各代平均路线的长度:L_ave;
%% 全局最优路线:Shortest_Route;全局最优路线的长度:Shortest_Length;
%% 全局最优路线发现的起始代数:First
%%=========================================================================
[DimensionNodeCoord_2Name] = FileInput(TSPfile);%从文件读入TSP数据
%%
%第一步:变量初始化=========================================================
n = Dimension; 
C = NodeCoord_2;
D = zeros(nn);%D表示完全图的赋权邻接矩阵
%%计算完全图的赋权邻接矩阵D
for i=1:n
    for j=i:n
        if i~=j 
           D(ij)=((C(i1)-C(j1))^2+(C(i2)-C(j2))^2)^0.5; 
           D(ji)=D(ij);
        else
            D(ij)=inf; 
        end
    end
end
[D_sortI] = sort(D2);%对D按照行排序,返回D_sort = D(I)
Eta = 1./D;%Eta为启发因子,这里设为距离的倒数 
Tau = ones(nn);%Tau为信息素矩阵pheromone trails,各元素初始化为1 
Tabu = zeros(mn);%存储并记录m个蚂蚁的路径 
sum_TauEta = zeros(mn);
NC = 1;%迭代计数器
out_NC = 0;
out_NC_50 = 0;
R_best = zeros(NC_maxn);%各代最佳路线
L_best = inf.*ones(NC_max1);%各代最佳路线的长度 
L_ave = zeros(NC_max1);%各代路线的平均长度 
Tau_max = zeros(NC_max+11);%各代信息素上限
Tau_max(1) = 1;
Tau_min = zeros(NC_max+11);
p_best = 0.05;%
aa = p_best^(1./n);
bb = (1- aa)/((n./2).*aa);
Tau_min(1) = Tau_max(1).*bb;%第一代信息素下限
L_best_global = inf;%当前全局最优
N_2opt = 30;%2-opt的进行次数
c_2opt = 0;
%侦查信息素初始化加权矩阵
symbol = zeros(nn);
search = zeros(nn);
K_search = 0.8;
symbol = zeros(nn);
for i = 1: n
    for j = 1: n
        if find(I(i:)==j) <= WIN
            if find(I(j:)==i) <= WIN
                symbol(ij) = 1;
            else
                symbol(ij) = 2;
            end
        else
            if find(I(j:)==i) <= WIN
                symbol(ij) = 3;
            else
                symbol(ij) = 4;
            end
        end
    end
end
search = zeros(nn);
for i = 1 : n
    for j = 1 : n
        if symbol(ij) == 4
            d_ij_wave = D(iI(i1));
            d_ji_wave = D(jI(j1));
            search(ij) = K_search*d_ij_wave*d_ji_wave/D(ij)^2;
        else
            d_ij_wave = D(iI(i1));
            d_ji_wave = D(jI(j1));
            search(ij) = d_ij_wave*d_ji_wave/D(ij)^2;
        end
    end
end



%初始化供查询的ant_allow和NC_ant_allow
List = 1:n;%

ant_allow_int = zeros(nn-1);%存储并记录m个蚂蚁的现在的待访问点
for iter_ant = 1:n
    delete_pos = find(List == iter_ant1);
    if delete_pos ==1
        ant_allow_int(iter_ant:) = List(2:n);
    elseif delete_pos == n
        ant_allow_int(iter_ant:) = List(1:n-1);
    else
        ant_allow_int(iter_ant1:delete_pos-1) = List(1:delete_pos

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

     文件        374  2008-04-06 19:01  Oliver30.tsp

     文件      14589  2008-05-10 16:34  BB_AS.m

     文件      26729  2008-05-10 23:49  binbin_ant.m

     文件        579  1994-04-28 12:20  eil51.tsp

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

                42271                    4


评论

共有 条评论