巡回セールスマン問題

7. 巡回セールスマン問題
巡回セールスマン問題とは?
すべての都市を一度ずつ訪問して
出発点に戻ってくるときに、
移動距離が最短になる経路を求める問題
定義
グラフ G  (V , E ), 枝e  Eの距離d eが与えられたとき
すべての節点をちょう ど1回ずつ経由する順 回路で、
その枝上の距離の総和が最小となるものを求
めよ
順列を用いた定義
n  n行列D  [d ij ]が与えられたとき、
V  {1,2・・
, , n}から V上への1対1写像(順
n 1
 d
i 1
( i ),  ( i 1)
列) で
 d  ( n ),  (1)
を最小にするものを求めよ
すべての可能な場合を列挙して、
その中で最良の解を抽出
完全列挙法(力ずく法)
完全列挙法の計算量
・節点の数 n に対して、
およそ n! に比例
(n-1)!
600000000
500000000
●出発地点を固定してもよい
●距離が対象
計算量
400000000
300000000
200000000
100000000
13
11
9
7
5
3
1
0
都市数n
(n-1)!/2
完全列挙法はn=12まで!
n≧13の巡回セールスマン問題を解決するためには?
動的計画法
ある始点sから出発し
、
点の部分集合S ( V )をすべて経由し、
点i ( S )にいたる最短経路を f (i, S )とする .
点iの直前に訪れる点 jは、始点 sから Sのすべての点を通って
jにいたる最短路を経由 しているはずである
f ( j , S  { j})  min[ f (i, S )  d ij ]
iS
n=4の場合
グラフで表すと・・・
動的計画法
完全列挙法
3
2
4
3
4
3
2
4
2
3
2
4
4
3
2
4
2
4
1
3
1
1
3
4
4
2
2
3
3
2
1
動的計画法の計算量
40000000
35000000
2
n
O(n 2 )
計算量
30000000
25000000
20000000
15000000
10000000
5000000
0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
都市数n
(n=16 程度まで)
巡回セールスマン問題は
最適解を求めるのが非常に困難
→ NP-困難問題
★実際の問題のほとんどはNPー困難
☆数%程度の誤差を出すプログラムなら
開発可能