旅行商問題的兩種經典求解方法
背景
旅行商問題(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}\)
如上圖,對於一個有6個節點的點集,(1)有子迴路(2)無子迴路均可以滿足上式的約束條件,但很明顯(1)有子迴路不是TSP問題的解。
對於TSP問題,重點研究的表示如何消除子迴路。下面介紹兩種消除子迴路的TSP問題求解方法。
Dantzig–Fulkerson–Johnson formulation
該方法由Dantzig,Fulkerson 和Johnson提出,模型如下:
式中\(N=|V|\)
將該模型的第三個消除子迴路的約束單獨提出來:
\[\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\),顯然不滿足第三個約束。