|
(三)動態規劃(Dynamic Programming) |
令 V={1,2, … ,n} 表 n 個城市,,g(i,S) 表由頂點 i 出發,可經由 S 中所有頂點而抵達 1 的最佳路徑成本,故旅行業務員問題的解為 g(1,V-{1}),在最佳路徑中,若由 1 出發,下一個城市為 k,則最佳路徑成本必為 C1k 加上由 k 到 1 的最佳路徑成本,故我們可得下式:
將(1)式一般化,可得
顯然
,,利用(2)式,可先求得所有 g(i,S),
而 |S|=1(S 只含一個元素);接著再求所有 g(i,S),而 |S|=2;
;最後求得 g(1,V-{1})。當 |S|<n-1 時,只需計算
,, 的 g(i,S),這種動態規劃的求解方法為建立遞迴關係 (recurrence relation),亦即(2)式,再以起始條件 (initial conditions)
,逐步代入求解,我們先考慮前面表 1 的成本矩陣,求解過程如下:
首先
,
,
,
利用(2)式可得
接著計算 g(i,S) 而 |S|=2,,且 ,
最後可得
故最佳路徑成本為 17,令 J(i,S) 表(2)式中令 g(i,S) 最小的 j 值,由
g(1,{2,3,4}) 可得
J(1,{2,3,4})=2,
故最佳路徑為
,接著由 g(2,{3,4}) 可得
J(2,{3,4})=4,故最佳路徑為
,
最後可得 J(4,{3})=3,故最佳路徑為
。
令 N 表示 g(1,V-{1}) 之前所需計算 g(i,S) 的個數,對每一個 |S| 之值,i 有 n-1 種選擇,若 |S|=k,
則不含 1 及 i 的 S 有
種,故
為求解所需計算 g(i,S) 的個數為 (n-1)2n-1,這當然比蠻力法需計算 (n-1)!條路徑成本要好得多,
例如,n=20,則
,而
,雖然如此,以動態規劃求解,其計算複雜度 (computational
complexity) 仍然呈指數上升,對目前及未來的計算機而言,一個計算複雜度呈指數上升的問題,
在 n 相當大時仍無法解決,因此旅行業務員問題是個難題。(事實上這是個 NP-Hard 問題)
|
|
|