旅行商问题的两种经典求解方法
背景
旅行商问题(Travelling salesman problem, TSP)是一个典型的整数规划问题,给定一系列点集\(V(|V|=n)\),在点集中从一点出发,寻找一条最短路径,该路径经过点集中的所有点,并且每个点只经过一次。
对于该问题我们可以进行初步建模:
\[\begin{aligned} \min & \sum_{i} \sum_{j} c_{i j} x_{i j} & \\ &\sum_{i \in V} x_{i j}=1, & \forall j \in V, i \neq j \\ &\sum_{j \in V} x_{i j}=1, & \forall i \in V, i \neq j \\ & x_{i j} \in\{0,1\}, & \forall i, j \in V \end{aligned} \]式中\(x_{i,j}\)表示从节点\(i\)到节点\(j\)的路径,\(c_{i,j}\)表示路径\(i \rightarrow j\)的长度;第一个约束保证一个节点只出发一次,第二个约束保证一个节点值到达一次。但是上述的两个约束并不能解决TSP问题,可能出现如下情况:
如上图,对于一个有6个节点的点集,(1)有子回路(2)无子回路均可以满足上式的约束条件,但很明显(1)有子回路不是TSP问题的解。
对于TSP问题,重点研究的表示如何消除子回路。下面介绍两种消除子回路的TSP问题求解方法。
Dantzig–Fulkerson–Johnson formulation
该方法由Dantzig,Fulkerson 和Johnson提出,模型如下:
\[\begin{aligned} \min &\sum_{i} \sum_{j} c_{i j} x_{i j} \\ & \sum_{i \in V} x_{i j}=1, &\forall j \in V, i \neq j \\ &\sum_{j \in V} x_{i j}=1, & \forall i \in V, i \neq j \\ &\sum_{i, j \in S} x_{i j} \leqslant|S|-1, & 2 \leqslant|S| \leqslant N-1, S \subset V \\ &x_{i j} \in\{0,1\}, & \forall i, j \in V \end{aligned} \]式中\(N=|V|\)表示点集\(Z\)中点的个数。
将该模型的第三个消除子回路的约束单独提出来:
\[\sum_{i, j \in S} x_{i j} \leqslant|S|-1, 2 \leqslant|S| \leqslant N-1, S \subset V \]式中\(S\)为\(V\)的一个真子集,这个式子的含义是:对于一个\(V\)中的任意真子集\(S\),\(S\)中连通的节点边数小于节点个数。
如上图,对于一个有子回路的点集,其中的子集如\(S\{5,6,7\}=5 \rightarrow 6 \rightarrow 7 \rightarrow 5\),\(\sum_{i, j \in S} x_{i j}=3\nleqslant |S|-1\),不满足第三个约束。
Miller–Tucker–Zemlin formulation
该方法由Miller,Tucker和Zemlin,模型如下:
\[\begin{aligned} \min &\sum_{i} \sum_{j} c_{i j} x_{i j} & \\ &\sum_{i \in V} x_{i j}=1, & \forall j \in V, i \neq j \\ &\sum_{j \in V} x_{i j}=1, & \forall i \in V, i \neq j \\ &\mu_{i}-\mu_{j}+N x_{i j} \leqslant N-1, & \forall i, j \in V,2 \leq i \neq j \leq N\\ &x_{i j} \in\{0,1\}, \mu_{i} \geqslant 0, \mu_{i} \in \mathbf{R}^{1} & \forall i \in V \end{aligned} \]MTZ计算公式通过引入人工变量\(\mu\)来消除子回路,单独提出第三个约束:
\[\mu_{i}-\mu_{j}+N x_{i j} \leqslant N-1, \forall i, j \in V,2 \leq i \neq j \leq N \]\(\mu_i\)的值表示回路中节点\(i\)的次序,对于非连通的两个节点\(i\)和\(j\),上式可以变换为:
\[\mu_i -\mu_j \leq N-1 \]该式显然恒成立。
对于连通的两个节点\(i \rightarrow j\),上式可以变换为:
\[\mu_i \leq \mu_j-1 \]如上图中的子集\(S\{5,6,7\}=5 \rightarrow 6 \rightarrow 7 \rightarrow 5\),\(\mu_5=1,\mu_6=2,\mu_7=3,\mu_5=4\),显然不满足第三个约束。
参考文献
[1] C. E. Miller, A. W. Tucker, and R. A. Zemlin, "Integer Programming Formulation of Traveling Salesman Problems," Journal of the ACM, vol. 7, no. 4, pp. 326-329, 1960-10-01 1960, doi: 10.1145/321043.321046.
[2] A. Langevin, F. Soumis, and J. Desrosiers, "Classification of travelling salesman problem formulations," Operations Research Letters, vol. 9, no. 2, pp. 127-132, 1990.