一、单仓库多旅行商问题
单仓库多旅行商问题(Single-Depot Multiple Travelling Salesman Problem, SD-MTSP):𝑚个推销员从同一座中心城市出发,访问其中一定数量的城市并且每座城市只能被某一个推销员访问一次,最后返回到中心城市,通常这种问题模型被称之为SD-MTSP。
多旅行商问题(Multiple Traveling Salesman Problem, MTSP):单仓库多旅行商问题及多仓库多旅行商问题(含动态视频)_IT猿手的博客-CSDN博客
二、星雀优化算法NOA求解SDMTSP
星雀优化算法NOA求解单仓库多旅行商问题,本文选取国际通用的TSP实例库TSPLIB中的测试集bayg29。
星雀优化算法NOA原理
2.1部分代码(可更改起点及旅行商个数)
%% 完整MATLAB code link: https://mbd.pub/o/bread/mbd-ZJiTl5ty
close all
clear
clc
%数据集参考文献 REINELT G.TSPLIB-a traveling salesman problem[J].ORSA Journal on Computing,1991,3(4):267-384.
global data StartPoint Tnum
% 导入TSP数据集 bayg29
load('data.txt')
Tnum=5;%旅行商个数(可以自行更改)2-6
StartPoint=13; %选择起点城市(可以自行更改)
Dim=size(data,1)-1;%维度
lb=-100;%下界
ub=100;%上界
fobj=@Fun;%计算总距离
SearchAgents_no=50; % 种群大小(可以修改)
Max_iteration=2000; % 最大迭代次数(可以修改)
[fMin,bestX,curve]=NOA(SearchAgents_no,Max_iteration,lb,ub,Dim,fobj); %蜣螂优化算法
%% 最终的结果 Kd是最终的城市序列
[~,idx]=sort(bestX);
idx(idx>=StartPoint)=idx(idx>=StartPoint)+1;
num=floor(length(idx)/Tnum);
Lnum=num*ones(1,Tnum);
Lnum(Tnum)=length(idx)-(Tnum-1)*num;
Kd=StartPoint*ones(Tnum,max(Lnum)+2);
st=1;%起始位置
for i=1:Tnum
en=st+Lnum(i)-1;%结束位置
Kd(i,2:Lnum(i)+1)=idx(st:en);
st=en+1;
end
%% %%%%%%%%%%%%%%%%%%% 保存数据 %%%%%%%%%%%%%%%%%%%%%
save Kd Kd %保留最终的城市序列
save curve curve %保留算法求解的收敛曲线
%% 求解结果画图
PlotResult;%求解结果画图
2.2部分结果
(1)5个旅行商
第1个旅行商的路径:13->12->10->26->29->5->13
第1个旅行商的总路径长度:1895.415522
第2个旅行商的路径:13->28->1->6->2->9->13
第2个旅行商的总路径长度:1465.127981
第3个旅行商的路径:13->14->7->22->18->15->13
第3个旅行商的总路径长度:1936.388391
第4个旅行商的路径:13->4->25->19->17->11->13
第4个旅行商的总路径长度:1538.375767
第5个旅行商的路径:13->8->23->16->20->3->21->27->24->13
第5个旅行商的总路径长度:1910.759011
所有旅行商的总路径长度:8746.066672
(2)6个旅行商
第1个旅行商的路径:13->27->24->9->26->13
第1个旅行商的总路径长度:1432.759575
第2个旅行商的路径:13->19->7->23->25->13
第2个旅行商的总路径长度:1384.918770
第3个旅行商的路径:13->21->29->5->18->13
第3个旅行商的总路径长度:1602.373240
第4个旅行商的路径:13->14->22->17->11->13
第4个旅行商的总路径长度:1323.631369
第5个旅行商的路径:13->6->15->16->1->13
第5个旅行商的总路径长度:1701.176064
第6个旅行商的路径:13->4->20->3->2->12->8->10->28->13
第6个旅行商的总路径长度:2139.158713
所有旅行商的总路径长度:9584.017731