旅行商問題的兩種經典求解方法


背景

旅行商問題(Travelling salesman problem, TSP)是一個典型的整數規划問題,給定一系列點集\(V(|V|=n)\),在點集中從一點出發,尋找一條最短路徑,該路徑經過點集中的所有點,並且每個點只經過一次。

image-20220316103737293

對於該問題我們可以進行初步建模:

\[\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問題,可能出現如下情況:

image

如上圖,對於一個有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\)中連通的節點邊數小於節點個數。

image-20220316103737293

如上圖,對於一個有子回路的點集,其中的子集如\(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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM