使用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
运行结果如下:
以上是关于使用Matlab实现蚁群优化(ACO)算法解决旅行商问题(Travelling Salesman Problem)的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB教程案例14基于ACO蚁群优化算法的函数极值计算matlab仿真及其他应用
matlab蚁群算法的优化计算——旅行商问题(TSP)优化matlab优化算法二十一