Design-and-analysis-of-algorithms-travelling-salesman-problem

提供:Dev Guides
移動先:案内検索

DAA-巡回セールスマン問題

問題文

旅行者は、リストからすべての都市を訪問する必要があります。このリストでは、すべての都市間の距離がわかっており、各都市を一度だけ訪問する必要があります。 彼が各都市を一度だけ正確に訪れ、元の都市に戻る最短ルートは何ですか?

溶液

巡回セールスマンの問題は、最も悪名高い計算上の問題です。 ブルートフォースアプローチを使用して、可能なすべてのツアーを評価し、最適なツアーを選択できます。 グラフ内の n 個の頂点には、*(_ n_-1)!*個の可能性があります。

多項式時間アルゴリズムはありませんが、動的プログラミングアプローチを使用したブルートフォースの代わりに、短時間でソリューションを取得できます。

グラフ G =(V、E) を考えてみましょう。 _ V_ は都市のセットで、 _ E_ は重み付きエッジのセットです。 エッジ e(u、v) は、頂点 u および v が接続されていることを表します。 頂点 uv の間の距離は d(u、v) であり、非負でなければなりません。

私たちが都市 1 で出発し、いくつかの都市を訪れた後、都市 j にいるとします。 したがって、これは部分的なツアーです。 j を知っておく必要があります。これにより、次に訪れるのに最も便利な都市が決まるからです。 また、これまでに訪れたすべての都市を知る必要があります。そのため、それらの都市のいずれも繰り返さないようにします。 したがって、これは適切な副問題です。

都市のサブセットの場合 SЄ\ {1、2、3、…​ n_1 _j *で終わる。

いつ| * _ S ' * | > 1、パスは 1 で開始および終了できないため、 ' C(S、1)_ = defineを定義します。

さて、小さな副問題に関して* C(S、j)を表現しましょう。 *1 で開始し、 j で終了する必要があります。 次の都市を選択する必要があります

C(S、j)= min \:C(S-\ lbrace j \ rbrace、i)+ d(i、j)\:where \:i \ in S \:and \:i \ neq jc( S、j)= minC(s- \ lbrace j \ rbrace、i)+ d(i、j)\:where \:i \ in S \:and \:i \ neq j

Algorithm: Traveling-Salesman-Problem
C ({1}, 1) = 0
for s = 2 to n do
   for all subsets S Є {1, 2, 3, … , n} of size s and containing 1
      C (S, 1) = ∞
   for all j Є S and j ≠ 1
      C (S, j) = min {C (S – {j}, i) + d(i, j) for i Є S and i ≠ j}
Return minj C ({1, 2, 3, …, n}, j) + d(j, i)

分析

サブ問題は最大で$ 2 ^ n.n $個あり、それぞれの解決には線形の時間がかかります。 したがって、合計実行時間は$ O(2 ^ n.n ^ 2)$です。

次の例では、巡回セールスマンの問題を解決する手順を示します。

分析

上記のグラフから、次の表を作成します。

1 2 3 4
1 0 10 15 20
2 5 0 9 10
3 6 13 0 12
4 8 8 9 0

S =Φ

\ smallコスト(2、\ Phi、1)= d(2,1)= 5 \ smallコスト(2、\ Phi、1)= d(2,1)= 5

\ smallコスト(3、\ Phi、1)= d(3,1)= 6 \ smallコスト(3、\ Phi、1)= d(3,1)= 6

\ smallコスト(4、\ Phi、1)= d(4,1)= 8 \ smallコスト(4、\ Phi、1)= d(4,1)= 8

S = 1

\ smallコスト(i、s)=最小\ lbraceコスト(j、s –(j))+ d [i、j] \ rbrace \ smallコスト(i、s)= min \ lbraceコスト(j、s )-(j))+ d [i、j] \ rbrace

\ smallコスト(2、\ lbrace 3 \ rbrace、1)= d [2,3] +コスト(3、\ Phi、1)= 9 + 6 = 15cost(2、\ lbrace3 \ rbrace、1)= d [2,3] + cost(3、\ Phi、1)= 9 + 6 = 15

\ smallコスト(2、\ lbrace 4 \ rbrace、1)= d [2,4] +コスト(4、\ Phi、1)= 10 + 8 = 18cost(2、\ lbrace4 \ rbrace、1)= d [2,4] + cost(4、\ Phi、1)= 10 + 8 = 18

\ smallコスト(3、\ lbrace 2 \ rbrace、1)= d [3,2] +コスト(2、\ Phi、1)= 13 + 5 = 18cost(3、\ lbrace2 \ rbrace、1)= d [3,2] + cost(2、\ Phi、1)= 13 + 5 = 18

\ smallコスト(3、\ lbrace 4 \ rbrace、1)= d [3,4] +コスト(4、\ Phi、1)= 12 + 8 = 20cost(3、\ lbrace4 \ rbrace、1)= d [3,4] + cost(4、\ Phi、1)= 12 + 8 = 20

\ smallコスト(4、\ lbrace 3 \ rbrace、1)= d [4,3] +コスト(3、\ Phi、1)= 9 + 6 = 15cost(4、\ lbrace3 \ rbrace、1)= d [4,3] + cost(3、\ Phi、1)= 9 + 6 = 15

\ smallコスト(4、\ lbrace 2 \ rbrace、1)= d [4,2] +コスト(2、\ Phi、1)= 8 + 5 = 13cost(4、\ lbrace2 \ rbrace、1)= d [4,2] + cost(2、\ Phi、1)= 8 + 5 = 13

S = 2

\ small Cost(2、\ lbrace 3、4 \ rbrace、1)= \ begin \ {cases} d [2、3] + Cost(3、\ lbrace 4 \ rbrace、1)= 9 + 20 = 29 \\ d [2、4] + Cost(4、\ lbrace 3 \ rbrace、1)= 10 + 15 = 25 = 25 \ small Cost(2、\ lbrace 3,4 \ rbrace、1)\\\ lbrace d [2,3] + \ small cost(3、\ lbrace4 \ rbrace、1)= 9 + 20 = 29d [2,4] + \ small Cost(4、\ lbrace 3 \ rbrace、1)= 10 + 15 = 25 \ end \ {cases} = 25

\ small Cost(3、\ lbrace 2、4 \ rbrace、1)= \ begin \ {cases} d [3、2] + Cost(2、\ lbrace 4 \ rbrace、1)= 13 + 18 = 31 \\ d [3、4] + Cost(4、\ lbrace 2 \ rbrace、1)= 12 + 13 = 25 = 25 \ small Cost(3、\ lbrace 2,4 \ rbrace、1)\\\ lbrace d [3,2] + \ small cost(2、\ lbrace4 \ rbrace、1)= 13 + 18 = 31d [3,4] + \ small Cost(4、\ lbrace 2 \ rbrace、1)= 12 + 13 = 25 \ end \ {cases} = 25

\ small Cost(4、\ lbrace 2、3 \ rbrace、1)= \ begin \ {cases} d [4、2] + Cost(2、\ lbrace 3 \ rbrace、1)= 8 + 15 = 23 \\ d [4、3] + Cost(3、\ lbrace 2 \ rbrace、1)= 9 + 18 = 27 = 23 \ small Cost(4、\ lbrace 2,3 \ rbrace、1)\\\ lbrace d [4,2] + \ small cost(2、\ lbrace3 \ rbrace、1)= 8 + 15 = 23d [4,3] + \ small Cost(3、\ lbrace 2 \ rbrace、1)= 9 + 18 = 27 \ end \ {cases} = 23

S = 3

\ small Cost(1、\ lbrace 2、3、4 \ rbrace、1)= \ begin \ {cases} d [1、2] + Cost(2、\ lbrace 3、4 \ rbrace、1)= 10 + 25 = 35 \\ d [1、3] + Cost(3、\ lbrace 2、4 \ rbrace、1)= 15 + 25 = 40 \\ d [1、4] + Cost(4、\ lbrace 2、 3 \ rbrace、1)= 20 + 23 = 43 = 35 cost(1、\ lbrace 2,3,4 \ rbrace)、1)\\ d [1,2] + cost(2、\ lbrace 3,4 \ rbrace、1)= 10 + 25 = 35 \\ d [1,3] + cost(3、\ lbrace 2,4 \ rbrace、1)= 15 + 25 = 40 \\ d [1,4] + cost( 4、\ lbrace 2,3 \ rbrace、1)= 20 + 23 = 43 = 35 \ end \ {cases}

最小コストパスは35です。

コスト \ {1、\ {2、3、4}、1} から始めて、 d [1、2] の最小値を取得します。 s = 3 の場合、1から2(コストは10)のパスを選択し、逆方向に進みます。 s = 2 の場合、 d [4、2] の最小値を取得します。 2から4(コストは10)のパスを選択し、逆方向に進みます。

*s = 1* の場合、 *d [4、3]* の最小値を取得します。 パス4から3(コストは9)を選択して、* s =Φ*ステップに進みます。 *d [3、1]* (コストは6)の最小値を取得します。