巡回セールスマン問題(TSP)のメモ(未完)

1ヶ月くらい前に途中まで書いたけど飽きて放置されていたものを適当に処理して投下する

前置き

対称巡回セールスマン問題(STSP)のみ扱う
(実は対称性が無い(ATSP)のほうが枝刈りしやすく簡単らしい)

巡回セールスマン問題: グラフの最も短いハミルトン閉路を見つける問題
ハミルトン閉路: グラフのすべての頂点を一度だけ通る閉路

厳密解関連

Held-Karpアルゴリズム (1962)

いわゆるbitDP
頂点数nに対して \mathcal{O}(n ^ 2 2 ^ n)で厳密解を求められる

Held-Karp下界 (1970)

The Traveling Salesman Problem and Minimum Spanning Trees (Held and Karp, 1970)

一般に、枝刈り探索は良い下界(最適解はこの値より小さくならないよという値)があると高速になる

まず、グラフの最小1-木の大きさはTSPの解の下界になっている

1-木とは、頂点1, 2, 3, ..., nで構成されるグラフについて、頂点1を除いた2, 3, ..., nのグラフの全域木と、頂点1からそれ以外の頂点への2本の辺で構成されるグラフのことである(1-木という名前だが木ではない)

ここで、グラフのすべてのハミルトン閉路は1-木であるから、最小1-木は最小のハミルトン閉路よりも小さい(巡回セールスマン問題の下界となる)

最小1-木が運良くハミルトン閉路であった場合、その1-木はTSPの解に等しい

グラフの最小1-木を求めるには、まず頂点1を除いたグラフの最小全域木クラスカル法などで求め、そこに頂点1に繋がる辺のうち最も短い2つを足せば良く、辺の数  m に対して  \mathcal{O}(m \log m) で求められる

Held-Karp下界では、グラフの辺の重みをうまく変えて最小1-木を求めることによってより良い下界を求める

具体的には、グラフの各頂点についてペナルティ  \pi _ 1 , \pi _ 2 , ..., \pi _ n を定め、
頂点 i, j を結ぶ辺の重み  c _ {ij} を、すべて  c _ {ij} + \pi _ i + \pi _ j に変えたグラフで最小1-木を求める

この最小1-木の大きさから  2 \sum _ {i=1} ^ n \pi _ i を引いた値は、TSPの下界となっている

なぜなら、上記の方法で辺の重みを変えると任意のハミルトン閉路の大きさは  2 \sum _ {i=1} ^ n \pi _ i だけ等しく変わり、
最短路自体は変化しないためである

式で書くと以下の通り

 \
(重み修正グラフのTSPの解)  \geq (重み修正グラフの最小1 \unicode{x2d} 木の大きさ)  \\
\displaystyle \Leftrightarrow (元のグラフのTSPの解) + 2 \sum _ {i=1} ^ n \pi _ i  \geq (重み修正グラフの最小1 \unicode{x2d} 木の大きさ)  \\
\displaystyle \Leftrightarrow (元のグラフのTSPの解)  \geq (重み修正グラフの最小1 \unicode{x2d} 木の大きさ) - 2 \sum _ {i=1} ^ n \pi _ i  \\

良い下界(厳密解に近い値をとる下界)が得られるように  \pi _ i を定めるには、まずペナルティ無しで最小1-木を作り、次数が2より大きい頂点についてはペナルティを増やし、次数が2より小さい頂点についてはペナルティを減らして、最小1-木を再計算する…といったことを何度か繰り返す

参考: 巡回セールスマン問題 - 日本オペレーションズ・リサーチ学会 (1979)

整数計画問題を使った解法

特殊な形の整数計画問題に帰着して解く つよい でもよくわからない

組合せ最適化の黄色い本に載ってた気がする

85,900都市の問題を解いたTSPソルバのConcordeもこれを元にしている

Certification of an Optimal TSP Tour Through 85,900 Cities (Applegate et al., 2009)

近似解

構築法と改善法があるけど改善法のが重要なはず

2-opt, 3-opt, Or-opt

いつもの

Lin-Kernighan (LK) (1973)

k-optの一般化と呼ばれるやつ

現時点での使う辺と使わない辺を交互に辿る閉路を作って、使うか使わないかを反転させる

効率を高めるヒューリスティックな工夫が色々ある

Iterated Lin-Kernighan (ILK) (1991)

Lin-Kernighanで実現できない遷移(double bridge move)によって局所最適から脱する

Chained Lin-Kernighan (CLK) (2003)

ILKの進化したやつらしい

concordeに実装があるけどよくわからない

github.com

Lin-Kernighan-Helsgaun (LKH) (2000)

Lin-Kernighanを効率的にやる つよい

論文が教科書みたいに丁寧
引用数がすごい

An Effective Implementation of the Lin-Kernighan Traveling Salesman Heuristic

LKH (Keld Helsgaun)

巡回セールスマンみたいな問題のなるべく良い近似解が欲しくなったらとりあえずこれを調べると良さそう

最近の

EAXとかACOとかめっちゃ強いのがあるらしい

まとめ

ラソンマッチはたいへん