结合邻域连接法的蚁群优化(NACO)求解TSP问题(Matlab代码实现)

 ‍个人主页:研学社的博客 

欢迎来到本博客❤️❤️

博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

本文目录如下:

目录

1 概述

2 运行结果

3 参考文献

4 Matlab代码实现

1 概述

旅行推销员问题(TSP)是运筹学、数学优化和理论计算领域的经典算法问题。推销员必须绕过最短路线并返回起点,访问一定数量的地方。精确算法和启发式算法都用于求解 TSP.
旨在获得具有因子复杂性的精确解的精确算法被归类为 NP-Complete。启发式方法的解决方案要么基于优化问题。这些算法的复杂性小于确切的算法。因此,它在更少的时间和空间内给出解决方案,并在近似解决方案足以解决问题的情况下使用,特别是在达到确切解决方案非常困难的情况下。
本文的第一个目的是强调每种TSP方法的要求,局限性和功能,以指导科学家和研究人员选择最适合其特定需求的方法。它对最有效和广泛使用的TSP方法进行了全面调查,通过研究旨在发现其优势和劣势的方法来澄清其主要差异。
蚁群优化 (ACO) 考虑一种启发式方法,该方法具有达到最佳 TSP 解决方案的强大能力。它来源于蚂蚁在自然界中的自然行为——基于分析真正的蚂蚁思考在蚁群中寻找和储存食物。本论文的第二个目的是提出一种新的混合算法来解决TSP。它将由ACO与邻居加入(NJ)组合而成的结构,并称之为(NACO)。新算法高度关注所有可能影响解决方案的标准并将其应用于 TSP,并且通过将它们与蚁群的原始算法进行比较,特别是在减少计算和时间方面,它对解决方案进行了许多改进。
此外,本文还介绍了并行NACO作为高性能TSP的高效并行程序。建议在单独的执行线程中并行运行 Ant,以受益于每个 ant 的独立操作,并使用多核系统实现并行算法。提出的程序由MATLAB® R2017a(版本9.2)编程,并在具有8GB RAM和Intel Core i7-8565U CPU,64位Windows操作系统的HP计算机上实施。结果表明,相对于NACO,复杂度降低到O(n^2(n-ω))。至PNACO,复杂性从O(n(n⁄p)(n-ω))降低,此外加速度高达10。

2 运行结果

结合邻域连接法的蚁群优化(NACO)求解TSP问题(Matlab代码实现)_第1张图片

结合邻域连接法的蚁群优化(NACO)求解TSP问题(Matlab代码实现)_第2张图片

结合邻域连接法的蚁群优化(NACO)求解TSP问题(Matlab代码实现)_第3张图片

部分代码:

%% The Parameters

Iteration=1;                          % No. of Iterations
no_ant=1;                             % Population Size (No. of Ants)
Q=100;
%t0=1;
t0=10*Q/(no_Var*mean(D_Set.D(:)));      % Initial Phromone
alpha=1;                                % Phromone Exponential Weight
beta=5;                                 % Heuristic Exponential Weight
rate=0.7;                              % Evaporation Rate

%% Initialization

eta=1./D_Set.D;                         % Heuristic Information Matrix
t=t0*ones(no_Var,no_Var);               % Phromone Matrix
BC=zeros(Iteration,1);                  % Array to Hold Best Cost Values

% Empty Ant
empty_ant.Tour=[];
empty_ant.Cost=[];

% Ant Colony Matrix
ant=repmat(empty_ant,no_ant,1);

% Best Ant
BS.Cost=inf;

% the Level_one of NJ
Leaf=Leaf_1(D_Set.D);

% Runtime
T_1 = cputime;

%% NEW_ACO Main Program

for it=1:Iteration    
    for k=1:no_ant                      % Move Ants
        Leaf1=Leaf;
        ant(k).Tour=randi([1 no_Var]);  %% {choose a random non visited city}
        city=ant(k).Tour;
        for l =2:no_Var
            ant_tour=ant(k).Tour(end);          
            [row,col] = find(Leaf1==city);
            
            if isempty(row)
                P=t(ant_tour,:).^alpha.*eta(ant_tour,:).^beta;           
                P(ant(k).Tour)=0;
                P=P/sum(P);
                city=RouletteSelection(P);
                ant(k).Tour=[ant(k).Tour city];
            else
                l=l+1;                  % Pass the joining cities 
                if col==2
                    city=Leaf1(row,1);
               else
                    city=Leaf1(row,2);
                end
                ant(k).Tour=[ant(k).Tour city];
                Leaf1(row,1)=0;
                Leaf1(row,2)=0;
            end
          %  ant(k).Tour=[ant(k).Tour city];
        end
        ant(k).Cost=CostFunction(ant(k).Tour);
        
        if ant(k).Cost             BS=ant(k);
        end
    end
     
    % Update Phromones
    for k=1:no_ant
        tour=ant(k).Tour;
        tour=[tour tour(1)]; 
        for ll=1:no_Var
            ant_tour=tour(ll);
            city=tour(ll+1);
            t(ant_tour,city)=t(ant_tour,city)+Q/ant(k).Cost;
        end
        
    end
    
    % Evaporation
    t=(1-rate)*t;
    
    % Store Best Cost
    BC(it)=BS.Cost;

3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]A HYBRID OPTIMIZATION ALGORITHM OF ANT COLONY SEARCH AND NEIGHBOUR-JOINING METHOD TO SOLVE THE TRAVELLING SALESMAN PROBLEM"‏, Advanced Mathematical Models & Applications Vol.5, No.1, 2020, pp.95-110

4 Matlab代码实现

你可能感兴趣的:(#,算法,matlab)