TSP:灰狼优化算法GWO、蛇优化算法SO、成长优化算法GO求解旅行商问题(MATLAB代码)

作品简介

一、部分代码

close all
clear
clc
%数据集参考文献  REINELT G.TSPLIB-a traveling salesman problem[J].ORSA Journal on Computing,1991,3(4):267-384.
global data
load('data.txt')%导入TSP数据集bayg29
Dim=size(data,1)-1;%维度
lb=-100;%下界
ub=100;%上界
fobj=@Fun;%计算总距离
SearchAgents_no=100; % 种群大小(可以修改)
Max_iteration=1000; % 最大迭代次数(可以修改)
[fMin,bestX,curve]=GWO(SearchAgents_no,Max_iteration,lb,ub,Dim,fobj); 
[fMin1,bestX1,curve1]=GO(SearchAgents_no,Max_iteration,lb,ub,Dim,fobj); 
[fMin2,bestX2,curve2]=SO(SearchAgents_no,Max_iteration,lb,ub,Dim,fobj); 
%% 画最终的结果 Kd是最终的城市序列
[~,idx]=sort(bestX);
idx=idx+1;
Kd(1)=1;
Kd(2:length(idx)+1)=idx;
Kd(length(idx)+2)=1;
[~,idx]=sort(bestX1);
idx=idx+1;
Kd1(1)=1;
Kd1(2:length(idx)+1)=idx;
Kd1(length(idx)+2)=1;
[~,idx]=sort(bestX2);
idx=idx+1;
Kd2(1)=1;
Kd2(2:length(idx)+1)=idx;
Kd2(length(idx)+2)=1;
%% 画收敛曲线图
algorithmName={'GWO','GO','SO'};
figure
plot(curve,'g-','linewidth',2)
hold on
plot(curve1,'r-','linewidth',2)
hold on
plot(curve2,'b-','linewidth',2)
xlabel('迭代次数')
ylabel('总距离')
legend(algorithmName)
saveas(gcf,'./Picture/curve.jpg') %将图片保存到Picture文件夹下面
%% 画每种算法得到的路线图
plotFigure(data,Kd,algorithmName{1});
plotFigure(data,Kd1,algorithmName{2});
plotFigure(data,Kd2,algorithmName{3});
%% 保存路线
dlmwrite('Kd1.txt',Kd,'delimiter', '\n')%保留算法最终的城市序列
dlmwrite('Kd2.txt',Kd1,'delimiter', '\n')%保留算法最终的城市序列
dlmwrite('Kd3.txt',Kd2,'delimiter', '\n')%保留算法最终的城市序列
%% 显示结果
fprintf([algorithmName{1} '算法得到的路径:%d'],Kd(1))
for i=2:length(Kd)
    fprintf(' > %d',Kd(i));
end
fprintf('\n');
display([algorithmName{1} '算法求解的总路径总长:' num2str(curve(end))]);
Kd=Kd1;
fprintf([algorithmName{2} '算法得到的路径:%d'],Kd(1))
for i=2:length(Kd)
    fprintf(' > %d',Kd(i));
end
fprintf('\n');
display([algorithmName{2} '算法求解的总路径总长:' num2str(curve(end))]);
Kd=Kd2;
fprintf([algorithmName{3} '算法得到的路径:%d'],Kd(1))
for i=2:length(Kd)
    fprintf(' > %d',Kd(i));
end
fprintf('\n');
display([algorithmName{3} '算法求解的总路径总长:' num2str(curve(end))]);

二、部分结果

GWO算法得到的路径:1 > 5 > 29 > 3 > 26 > 9 > 12 > 6 > 28 > 8 > 24 > 27 > 23 > 16 > 25 > 7 > 19 > 4 > 11 > 14 > 22 > 17 > 18 > 15 > 13 > 10 > 20 > 2 > 21 > 1

GWO算法求解的总路径总长:10322.7783

GO算法得到的路径:1 > 6 > 5 > 29 > 3 > 26 > 9 > 12 > 28 > 8 > 24 > 13 > 16 > 27 > 23 > 7 > 25 > 19 > 11 > 22 > 17 > 14 > 18 > 15 > 4 > 10 > 20 > 2 > 21 > 1

GO算法求解的总路径总长:10322.7783

SO算法得到的路径:1 > 24 > 16 > 4 > 18 > 17 > 22 > 14 > 10 > 20 > 2 > 29 > 3 > 26 > 9 > 5 > 8 > 27 > 23 > 7 > 25 > 11 > 15 > 19 > 13 > 21 > 6 > 12 > 28 > 1

SO算法求解的总路径总长:10322.7783









三、完整MATLAB代码


创作时间: