使用Matlab实现蚁群优化(ACO)算法解决旅行商问题(Travelling Salesman Problem)

Posted 这是一个很随便的名字

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Matlab实现蚁群优化(ACO)算法解决旅行商问题(Travelling Salesman Problem)相关的知识,希望对你有一定的参考价值。

ACO算法的主要灵感来自stigmergy。这是指通过改变环境来促进自然界中生物的相互作用和协调。在 stigmergy 中,有机体所做的动作的痕迹刺激了随后的同一生物或其他生物的行为。例如,在一个白蚁群中,一只白蚁可能会扮演一个泥球,然后把它放在一个洞旁边。另一只白蚁识别出泥并用它来固定孔。本质上,这会导致复杂和分散的没有计划和直接沟通的情报。

群体智能:ACO 是众多群体智能方法之一。在这个领域,调查导致解决问题和智慧的生物的集体行为。  

本文代码是旅行商问题中应用 ACO 的实现

代码:

clear all
close all
clc

%% Problem preparation 

% Create the graph 
[ graph ]  = createGraph();

% Draw the graph 
figure 
 
subplot(1,3,1)
drawGraph( graph); 


%% ACO algorithm 

%% Initial parameters of ACO 
maxIter = 500;
antNo = 50;

tau0 = 10 * 1 / (  graph.n * mean( graph.edges(:)  )  );  % Initial phromone concentration

tau = tau0 * ones( graph.n , graph.n); % Phromone matirx 
eta = 1./ graph.edges;  % desirability of each edge 

rho = 0.5; % Evaporation rate 
alpha = 1;  % Phromone exponential parameters 
beta = 1;  % Desirability exponetial paramter


%% Main loop of ACO 

bestFitness = inf;
bestTour = [];
for t = 1 : maxIter
    % Create Ants 
    
    colony = [];
    colony = createColony( graph, colony , antNo, tau, eta, alpha,  beta);
    
    
    % Calculate the fitness values of all ants 
    for i = 1 : antNo 
        colony.ant(i).fitness = fitnessFunction(colony.ant(i).tour , graph );
    end
    
    % Find the best ant (queen)
    allAntsFitness = [ colony.ant(:).fitness ];
    [ minVal , minIndex ] = min( allAntsFitness );
    if minVal < bestFitness 
        bestFitness = colony.ant(minIndex).fitness;
        bestTour = colony.ant(minIndex).tour;
    end
    
    colony.queen.tour = bestTour;
    colony.queen.fitness = bestFitness;
        
    % Update phromone matrix 
    tau = updatePhromone( tau , colony );  
    
    % Evaporation 
    tau  = ( 1 - rho ) .* tau;
    
    % Display the results 
    
    outmsg = [ 'Iteration #' , num2str(t) , ' Shortest length = ' , num2str(colony.queen.fitness)  ];
    disp(outmsg)
    subplot(1,3,1)
    title(['Iteration #' , num2str(t) ])
    % Visualize best tour and phromone concentration
    subplot(1,3,2)
    cla
    drawBestTour( colony, graph );
    
    
    subplot(1,3,3)
    cla
    drawPhromone( tau , graph );
   
   drawnow
end









运行结果如下:

 获取完整代码:https://ai.52learn.online/code/38

以上是关于使用Matlab实现蚁群优化(ACO)算法解决旅行商问题(Travelling Salesman Problem)的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB教程案例14基于ACO蚁群优化算法的函数极值计算matlab仿真及其他应用

matlab蚁群算法的优化计算——旅行商问题(TSP)优化matlab优化算法二十一

matlab蚁群算法的优化计算——旅行商问题(TSP)优化matlab优化算法二十一

路径规划基于蚁群算法实现无人机路径规划matlab源码

智能算法---蚁群算法

优化求解基于matlab蚁群算法求解函数极值问题含Matlab源码 1201期