一、单仓库多旅行商问题
多旅行商问题(Multiple Traveling Salesman Problem, MTSP)是著名的旅行商问题(Traveling Salesman Problem, TSP)的延伸,多旅行商问题定义为:给定一个𝑛座城市的城市集合,指定𝑚个推销员,每一位推销员从起点城市出发访问一定数量的城市,最后回到终点城市,要求除起点和终点城市以外,每一座城市都必须至少被一位推销员访问,并且只能访问一次,需要求解出满足上述要求并且代价最小的分配方案,其中的代价通常用总路程长度来代替,当然也可以是时间、费用等。多仓库多旅行商问题是其中一种多旅行商问题。多旅行商问题
单仓库多旅行商问题(Single-Depot Multiple Travelling Salesman Problem, SD-MTSP):𝑚个推销员从同一座中心城市出发,访问其中一定数量的城市并且每座城市只能被某一个推销员访问一次,最后返回到中心城市,通常这种问题模型被称之为SD-MTSP。
二、麻雀搜索算法SSA
麻雀搜索算法(sparrow search algorithm,SSA)由Jiankai Xue等人于2020年提出,该算法是根据麻雀觅食并逃避捕食者的行为而提出的群智能优化算法。SSA 主要是受麻雀的觅食行为和反捕食行为的启发而提出的。该算法比较新颖,具有寻优能力强,收敛速度快的优点。麻雀群觅食过程也是发现者-跟随者模型的一种,同时还叠加了侦查预警机制。麻雀中找到食物较好的个体作为发现者,其他个体作为跟随者,同时种群中选取一定比例的个体进行侦查预警,如果发现危险则放弃食物,安全第一。
麻雀搜索算法SSA
三、麻雀搜索算法SSA求解单仓库多旅行商问题SDMTSP
本文选取国际通用的TSP实例库TSPLIB中的测试集bayg29,bayg29中城市分布如下图所示:
以5个旅行商为例,部分代码如下:可以修改旅行商个数及起点
完整MATLAB code link : https://mbd.pub/o/bread/ZJmTlpZw
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=1; %选择起点城市(可以自行更改)
Dim=size(data,1)-1;%维度
lb=-100;%下界
ub=100;%上界
fobj=@Fun;%计算总距离
SearchAgents_no=100; % 种群大小(可以修改)
Max_iteration=300; % 最大迭代次数(可以修改)
[fMin,bestX,curve]=SSA(SearchAgents_no,Max_iteration,lb,ub,Dim,fobj);
部分结果:
第1个旅行商的路径:1->19->4->29->26->5->1
第1个旅行商的总路径长度:1432.201103
第2个旅行商的路径:1->8->27->16->13->24->1
第2个旅行商的总路径长度:750.599760
第3个旅行商的路径:1->21->6->9->12->28->1
第3个旅行商的总路径长度:816.700680
第4个旅行商的路径:1->10->14->17->20->2->1
第4个旅行商的总路径长度:1422.392351
第5个旅行商的路径:1->23->7->25->15->11->22->18->3->1
第5个旅行商的总路径长度:2235.307585
所有旅行商的总路径长度:6657.201479