一、多旅行商问题
多旅行商问题(Multiple Traveling Salesman Problem, MTSP)是著名的旅行商问题(Traveling Salesman Problem, TSP)的延伸,多旅行商问题定义为:给定一个𝑛座城市的城市集合,指定𝑚个推销员,每一位推销员从起点城市出发访问一定数量的城市,最后回到终点城市,要求除起点和终点城市以外,每一座城市都必须至少被一位推销员访问,并且只能访问一次,需要求解出满足上述要求并且代价最小的分配方案,其中的代价通常用总路程长度来代替,当然也可以是时间、费用等。围绕着各推销员的起始点和终止点来划分,多旅行商问题大致可以分为四种,其中单仓库多旅行商问题是其中一种。多旅行商问题
单仓库多旅行商问题(Single-Depot Multiple Travelling Salesman Problem, SD-MTSP):𝑚个推销员从同一座中心城市出发,访问其中一定数量的城市并且每座城市只能被某一个推销员访问一次,最后返回到中心城市,通常这种问题模型被称之为SD-MTSP。
1.1多旅行商多目标问题描述
对于推销员人数为𝑚,所需要访问的城市总数为𝑛的多旅行商问题而言,记中心城市为0,其双目标的数学模型可以表述为:
min
f
=
[
f
1
,
f
2
]
T
\min f=\left[f_{1}, f_{2}\right]^{T}
minf=[f1,f2]T
f
1
=
∑
k
=
1
m
∑
i
=
0
n
∑
j
=
0
n
d
i
j
x
i
j
k
f
2
=
max
1
≤
k
≤
m
∑
i
=
0
n
∑
j
=
0
n
d
i
j
x
i
j
k
−
min
1
≤
k
≤
m
∑
i
=
0
n
∑
j
=
0
n
d
i
j
x
i
j
k
\begin{array}{c} f_{1}=\sum_{k=1}^{m} \sum_{i=0}^{n} \sum_{j=0}^{n} d_{i j} x_{i j k} \\ f_{2}=\max _{1 \leq k \leq m} \sum_{i=0}^{n} \sum_{j=0}^{n} d_{i j} x_{i j k}-\min _{1 \leq k \leq m} \sum_{i=0}^{n} \sum_{j=0}^{n} d_{i j} x_{i j k} \end{array}
f1=∑k=1m∑i=0n∑j=0ndijxijkf2=max1≤k≤m∑i=0n∑j=0ndijxijk−min1≤k≤m∑i=0n∑j=0ndijxijk
其中:
x
i
j
k
=
{
1
推销员
k
由城市
i
到达城市
j
0
否则
s.t.
∑
k
=
1
m
∑
i
=
1
n
x
i
0
k
=
m
∑
k
=
1
m
∑
j
=
1
n
x
0
j
k
=
m
∑
k
=
1
m
∑
i
=
1
n
x
i
j
k
=
1
∀
j
=
1
,
…
,
n
∑
k
=
1
m
∑
j
=
1
n
x
i
j
k
=
1
∀
i
=
1
,
…
,
n
\begin{array}{l} x_{i j k}=\left\{\begin{array}{lc} 1 & \text { 推销员 } k \text { 由城市 } i \text { 到达城市 } j \\ 0 & \text { 否则 } \end{array}\right. \\ \text { s.t. } \\ \sum_{k=1}^{m} \sum_{i=1}^{n} x_{i 0 k}=m \\ \sum_{k=1}^{m} \sum_{j=1}^{n} x_{0 j k}=m \\ \sum_{k=1}^{m} \sum_{i=1}^{n} x_{i j k}=1 \quad \forall j=1, \ldots, n \\ \sum_{k=1}^{m} \sum_{j=1}^{n} x_{i j k}=1 \quad \forall i=1, \ldots, n \\ \end{array}
xijk={10 推销员 k 由城市 i 到达城市 j 否则 s.t. ∑k=1m∑i=1nxi0k=m∑k=1m∑j=1nx0jk=m∑k=1m∑i=1nxijk=1∀j=1,…,n∑k=1m∑j=1nxijk=1∀i=1,…,n
其中,
f
1
f_{1}
f1表示所有推销员的总路程,
f
2
f_{2}
f2代表推销员中最长路线与最短路线的差值(平衡度)。约束条件1和约束条件2表示编号为 0 的中心城市的入度和出度都必须为𝑚,即代表𝑚个推销员均从中心城市出发并且完成行程后都回到了中心城市。约束条件3和约束条件4表示除中心城市外的其他所有城市的出度和入度均为 1,即每个城市能且只能被推销员中的一个人访问。
参考文献:
[1]杨帅. 求解多旅行商问题的进化多目标优化和决策算法研究[D].武汉科技大学,2020.
二、多目标蜣螂优化算法
非支配排序的蜣螂优化算法(Non-Dominated Sorting Dung beetle optimizer,NSDBO)
三、NSDBO求解多旅行商问题
本文选取国际通用的TSP实例库TSPLIB中的测试集bayg29,bayg29中城市分布如下图所示:
本文采用NSDBO求解bayg29,两个目标函数分别是: f 1 f_{1} f1表示所有推销员的总路程, f 2 f_{2} f2代表推销员中最长路线与最短路线的差值(平衡度)。设置城市1作为多个旅行商的起点城市,旅行商和起点可自行修改。部分代码如下:
Tnum=5;%旅行商个数(可以自行更改)
StartPoint=1; %选择起点城市(可以自行更改)
TestProblem=1;%1
MultiObj = GetFunInfo(TestProblem);
MultiObjFnc=MultiObj.name;%问题名
% Parameters
params.Np = 100; % Population size
params.Nr = 200; % Repository size
params.maxgen =100; % Maximum number of generations
numOfObj=MultiObj.numOfObj;%目标函数个数
D=MultiObj.nVar;%维度
f = NSDBO(params,MultiObj);
X=f(:,1:D);%PS
Obtained_Pareto=f(:,D+1:D+numOfObj);%PF
save Obtained_Pareto Obtained_Pareto
save X X
四、NSDBO实验结果
修改旅行商个数和起点城市,分别做三组实验,结果如下:加大算法迭代次数效果更好
4.1实验一
当旅行商个数为5,旅行商的起点城市为城市1时:
求解得到的Pareto前沿:
f
1
f_{1}
f1(总路程)与
f
2
f_{2}
f2(平衡度)
部分规划路径如下:
4.2实验二
当旅行商个数为4,旅行商的起点城市为城市13时:
求解得到的Pareto前沿:
f
1
f_{1}
f1(总路程)与
f
2
f_{2}
f2(平衡度)
部分规划路径如下:
4.3实验三
当旅行商个数为3,旅行商的起点城市为城市10时:
求解得到的Pareto前沿:
f
1
f_{1}
f1(总路程)与
f
2
f_{2}
f2(平衡度)
部分规划路径如下: