Movatterモバイル変換


[0]ホーム

URL:


Future Tech Blog
フューチャー技術ブログ
DataScienceカテゴリ

巡回セールスマン問題(TSP)の基本的な解き方(ILS)

SAIGアルバイトの後藤です。業務では、アルゴリズムの知識を用いた既存処理の高速化やスケジュールの自動作成による業務の効率化を行っています。

配送計画問題など、最適化問題に属する社会課題は、部分問題に巡回セールスマン問題(TSP: Travelling Salesman Problem)を含むことが少なくありません。したがってTSPの基本的なアプローチを知っていることは重要です。TSPは組合せ最適化の代表的な問題として古くから様々なアプローチが試みられており、本記事は専門家の方にとっては既知の内容だと思いますが改めて紹介します。この記事では、2/3-optの焼きなまし法(SA: Simulated Annealing)より良い解法として2/3-optの反復局所探索法(ILS: Iterated Local Search)を紹介します(競技プログラマへ: TSPは焼きなましより山登り + Kickが良いという話をします)。

TSPにおいて特に良いとされているILSには次の2つがあります[1]。

  • Lin-Kernighan heuristic ILS
  • 2/3-opt ILS

本記事では、この内の2/3-opt ILSについて紹介します。

目次

導入

巡回セールスマン問題(TSP: Travelling Salesman Problem)

TSPは次のような問題です。

個の頂点 がある。頂点 間には辺 が張られており、距離 が定められている。
このとき、巡回路(長さ の順列 を用いて と表せるような辺集合)のうち、距離の総和が最も短いものを求めよ。

巡回路は、頂点 から出発して、他のすべての頂点をただ一度だけ通り頂点 に戻ってくる経路と解釈できます。図に表すと、次のようになります。

図1: $N = 5$の場合

丸が各頂点です。矢印が巡回路を表しています。
頂点 に戻ってこないようなバリエーションも存在しますが、同様のアプローチが有効です。

最も距離の短い解(巡回路)を愚直に求めようとすると組合せ爆発が起こり、頂点数が多くなると現実的な時間内で解を見つけることができません。そこで、なるべく総距離の短い解(近似解)を一定時間内に見つけることを考えます。このようなアルゴリズムをヒューリスティックアルゴリズムと言います。短時間でより良い解が見つかるアルゴリズムが良いヒューリスティックアルゴリズムと言えます。この記事では、TSPのヒューリスティックアルゴリズムとしてよく紹介されるアプローチを実際に用いて、検証・比較を行います。

TSPの種類

TSPは距離の制約によりいくつかの種類があります。基本的な制約は次の3つです。

  • Metric: 三角不等式 が成り立つ。
  • Symmetric: 頂点 から への距離と、頂点 から への距離が等しい。すなわち、 が成り立つ。
  • Euclidean: 頂点間の距離が2次元ユークリッド空間上の距離になっている。すなわち、が成り立つ。ただし、 は頂点 座標、 は頂点 座標を表す。

EuclideanならMetricかつSymmetricです。また、Symmetricでない場合をAsymmetricと言います。
この記事ではSymmetricが成り立つTSP、すなわちSymmetric TSPのみを考えます。なお、Asymmetric TSPは適切な変形によりSymmetric TSPに帰着できます[2]。

現実の問題

TSPは現実では、次のような問題として現れます。

  • 郵便物配達のルート最適化
  • 作業スケジューリングの最適化

図1が郵便物配達時のルートを表しているとすると、頂点 が郵便局などの配達拠点、頂点 が配達先に該当します。頂点間の距離は移動にかかる時間などでも良く、その場合はなるべくすべての配達先を訪れてなるべく早く帰ってくるルートを探す問題になります。

作業スケジューリングの最適化は一見するとTSPには関係なさそうですが、次のような場合TSPと見なせます。

個の作業 がある。作業 を行った後に作業 を行うと、作業 の準備には, 分かかる。また、何も作業を行っていない初めの状態を作業 とし、同じく が定まっている。
このとき、作業 から始めて、すべての作業をただ一度だけ行い作業 に戻ってくる順番のうち、最も準備時間が短いものを求めよ。

イメージとしては、作業 は作業前の片付いた状態で、その状態から作業 の準備にかかる時間が 分です。そこからすべての作業を終えて、また作業前の状態に片付けるための最適な順番を求めるのが、上記のスケジューリング問題になります。

異なるアルゴリズムの結果を比較

異なる3つのアルゴリズムで127頂点のTSPを解いたときの巡回路をビジュアライズしました。

図2: 結果の比較

左からNearest Neighbor(貪欲法)、2-opt SA、2-opt ILS(今回紹介する手法)です。それぞれの巡回路の総距離は135737, 1186034, 118282となっています。2-opt ILSの巡回路は最適解で、最も総距離が短い巡回路です。
Nearest Neighborは、頂点 (またはランダムな頂点)からまだ訪れていない頂点のうち最も近いものから訪れることを繰り返す単純な手法ですが、最後の方に余った頂点に訪れなければいけないため、明らかに効率が悪くなっている経路があります。
2-opt SAと2-opt ILSの違いは分かりにくいですが、よく見ると中央付近のルートが異なります。

アルゴリズム

2/3-opt

2-opt(3-opt)はある巡回路から2つ(3つ)の辺を削除して2つ(3つ)の辺を繋ぎ直すことを改善ができなくなるまで繰り返すアルゴリズムです。
2-optは次の図のようなイメージです。図では頂点番号を省略しています。

2-optのイメージ

左の順回路から赤い2つの辺を削除して、その後に青い辺で辺が削除された頂点を繋ぎ直しています。これにより、巡回路が効率的になっています。このような変更をどの辺の組に対して行っても改善ができなくなるまで行うのが2-optです。改善できないような組に対しては変更を行いません。3-optの場合は、3つの辺を削除し3つの辺を繋ぎ直す組み合わせをすべて試し、最も距離が短くなるような繋ぎ方に繋ぎ直します。

一般に、 個の辺を削除し 個の辺を繋ぎ直して改善することを改善ができなくなるまで繰り返すアルゴリズムを-optと言います。

局所探索法(LS: Local Search)

ILSを紹介するにあたり、まずLSを紹介します。

現在の解 から、ある操作を行って得られる解の集合 の近傍と言います。LSは、この近傍の中から よりも良い解、すなわち となるような に遷移し続けて、遷移ができなくなるまで繰り返す手法です。2-optもLSの一種であり、近傍 は巡回路 から2本の辺を繋ぎ直して得られる巡回路の集合です。
これ以上改善が行えないような解、すなわち となるような が存在しないような を局所解と呼びます。

deflocal_search(x):
whileTrue:
updated =False
for x2in sigma(x): // xの近傍をすべて見る
if score(x2) < score(x):
x = x2
updated =True
break
ifnot updated:
break
return x

反復局所探索法(ILS: Iterated Local Search)

LSでは局所解に達したときに必ずそれが最適解であるという保証は通常ありません。そこで、LSで局所最適解に到達した場合にKickまたはPerturbationと呼ばれる遷移[3]により局所解を脱出し、再びLSを適用することにより別の局所解へと遷移することを期待する手法がILSです。そのためKickはLSでまた同じ局所解へと到達しにくい遷移である必要があります。しかし一方で、できるだけ変更の小さな遷移が良いとされています。現在の比較的良い解を壊しすぎてしまうと、ランダムに解を作成してLSを適用するのと変わらなくなってしまうためです。

defiterated_local_search(x):
x_global = x
for iinrange(num_iterated):
x = x_global
x = kick(x)
x = local_search(x)
if score(x) < score(x_global):
x_global = x

return x_global

Double-Bridge

TSPで近傍を2/3-optにする場合、KickはDouble-Bridgeという遷移が良いとされています[3]。
Double-Bridgeでは、次のように赤い辺を4つ削除し、青い辺で繋ぎ直します。

double-bridge

一見、2-optを2回適用することで同じ遷移ができるような気がしますが、途中で巡回路を2つに分離してしまうため、2回では不可能です。また、辺を変える本数も4本と2/3-optにない遷移の中で最低の本数であるため、元の解からの変更は最小限です。そのため、2/3-optのKickとしてDouble-Bridgeは適しているとされています。本来Double-Bridgeはこの記事では紹介しないLin-Kernighan heuristicの近傍に含まれないような最小の変化から来ています

焼きなまし法(SA: Simulated Annealing)

SAは確率的に近傍から解 を選びます。 である場合は に遷移し、の場合はスコアの悪化具合と実行時間やループ回数に応じて確率的に遷移します。スコアが悪化するほど遷移する確率は低く、実行時間が長い/ループ回数が多いほど遷移する確率は低くなります。
記事にある2/3-opt SAは、近傍を2/3-optの近傍にしたものです。2-opt(3-opt)で削除する辺を2つ(3つ)ランダムで選び辺を繋ぎ直して遷移をします。

温度などSAの詳しいことについてはこの記事では説明しません。

SAの擬似コードです。

defsimulated_annealing(x):
temp = start_temp // 初期温度の設定
while elapsed() < time_limit: // 一定の時間ループを回す
x2 = choose_from_sigma(x) // 近傍からランダムで遷移先を選ぶ
diff = score(x2) - score(x)
if diff <0or prob(diff, temp):
x = x2
temp = update_temp(elapsed(), time_limit) // 温度の更新

2-opt ILS

今回紹介する手法は、2-opt ILSです。LS部分を2-optにして、KickをDouble-Bridgeにします。
今回の手法ではランダムに選んだ4本の辺を使ってDouble-Bridgeを行います。この時、選ぶ4辺に制約や遷移後の解の総距離による遷移の制限はありません。完全にランダムで1度だけDouble-Bridgeを行ってから2-optによるLSを行うことを繰り返します。

擬似コードは次の通りです。

defiterated_local_search(x):
x_global = x
for iinrange(num_iterated):
x = x_global
x = double_bridge(x)
x = two_opt(x)
if score(x) < score(x_global):
x_global = x

return x_global

2-optの実装上の工夫

頂点が 個の場合、削除できる辺が 個ありそこから2つ選ぶので、2-optの近傍は全部で 個あります(同一視の仕方にもよります)。しかし、スコアが改善できる解 があるかどうかを調べるのに、実はすべての近傍を見る必要はありません。この工夫により、2-opt ILSの性能は飛躍的に良くなります。

今、巡回路中に および があるとします( は相異なります)。

改善結果

このとき、2-optで2つの辺 を繋ぎ変えてスコアが良くなるには、次の条件を満たしている必要があります。

この条件は次の条件を2つとも満たしている場合、成り立ちません。

各不等式の和を取ると になるからです。

したがって、2-optで2つの辺 を繋ぎ変えてスコアが良くなるには、次の条件のどちらかを満たしている必要があります(十分でない)。(条件1)

以上から、2つの条件のどちらかを満たしている辺をすべて調べ上げれば、現在の巡回路から2-optで改善できるかどうかが分かります。
具体的には次の通りです。

今、辺 を削除する1つ目の辺とします。この時、削除する2つ目の辺の候補として次の条件のうちどちらかを満たす を調べれば十分です。


1つ目の式は になる場合、2つ目の式は になる場合です。2つ目の式ではSymmetricであることを使いました。
つまり、 よりも から近い頂点が の候補に、 よりも から近い頂点が の候補になります。 のどちらかが決まればもう一方も決まることに注意してください。

これを巡回路中の全ての辺に対して行えば、条件1を満たす全ての辺の組を探索できます。

上の条件を満たす頂点を効率的に探すには、あらかじめ各頂点から近い順に他の頂点のリストを持っておけばよいです。これは、構築時に で処理することが可能です。

同様の工夫を3-optに対して行うことも可能です。

[4]のHow to Make 2-Opt and 3-Opt Run Quicklyに条件1のうち片方だけ見れば良いと書いていたので、片方だけ見る実装も実験に加えました。しかし、条件を片方だけ見れば良いというのは嘘で、例えば1つ目の条件だけを見ていると次のようなケースを見逃します(もし間違いであればご指摘お願いします)。

反例

その他の工夫

その他にも、頂点 から最も近い 点のみを探索する、辺を削除した頂点の近くの頂点のみを探索するなどの高速化方法がありますが[4]、今回は実装していません。

実験方法

比較方法

比較するアルゴリズムは次の通りです。実行時間と発見した解の総距離を比較します。

  • Nearest Neighbor
  • 2-opt LS (実装上の工夫なし)
  • 3-opt LS (実装上の工夫なし)
  • 2-opt SA
  • 3-opt SA
  • 2-opt ILS (実装上の工夫なし)
  • 3-opt ILS (実装上の工夫なし)
  • Improved 2-opt ILS (実装上の工夫あり)
  • Improved 2-opt ILS one-side (実装上の工夫あり) (条件1のうち片方の条件のみを見る)

LSは局所解に達するまで実行し局所解に達したときの時間を実行時間としています。
SA/ILSは10秒間実行した時の解を出力します。Kick + LSの実行が終わったタイミングで時間制限を過ぎていた場合、そこまでに発見した解を出力とします。したがって、実行時間が10秒を過ぎる場合があります。

使用したテストケース

TSPLIBSymmetric TSPインスタンスの中から、EDGE_WEIGHT_TYPEがEUC_2DかEXPLICITであり頂点数が5000以下のものをすべて選び実験を行いました。EDGE_WEIGHT_TYPEはグラフの辺の重みの指定の仕方です。EUC_2Dは各頂点の位置が2次元ユークリッド空間上の点として与えられ、頂点間の距離はユークリッド距離を整数に丸めたものです。EXPLICITは頂点間の距離が明示的に与えられます。EDGE_WEIGHT_TYPEは他にもありますが、今回の実験ではこの2つのみを使用しました。理由は、インスタンスを読み込むプログラムを作る時間的コストと使用できるインスタンスの個数の兼ね合いです。頂点数の制約は実行時間から来ています。特に、3-optは破滅的な時間がかかります。

使用した言語

Javaを使って実験を行いました。

備考

巡回路は、頂点番号の動的配列として表現しました。この場合、2-optや3-optでは区間反転操作を行う必要が出てきますが、線形時間かけて愚直に行っています。
SAの温度管理には、頂点間の距離の平均を とおき、初期温度を、最終温度を とする指数スケジューリングを用いています。

実験結果

最も良いスコアを太字にしています。最もスコアが良い手法が複数ある場合は、その中で計算時間が最も少ない手法のスコアと計算時間を太字にしています。また、optimumはそのインスタンスの最適解であり、見つかった解が最適解である場合はoptimumの列を太字にしています。
また、3-optなど実行が10秒以内に終わらなかったものは太字にする処理の対象外としています。機械的に実行時間が11000msより大きい場合は対象外としています。

※ 追記(2021/12/06)

  • 解と最適解のスコアの比(score / optimum)を表に追加しました。
  • 行の順番を頂点数の少ない順にしました。
instanceoptimumNearest Neighbor score2-opt score2-opt SA score2-opt ILS score3-opt score3-opt SA score3-opt ILS scoreImproved 2-opt ILS scoreImproved 2-opt ILS one-side scoreNearest Neighbor time [ms]2-opt time [ms]2-opt SA time [ms]2-opt ILS time[ms]3-opt time [ms]3-opt SA time [ms]3-opt ILS time [ms]Improved 2-opt ILS time [ms]Improved 2-opt ILS one-side time [ms]Nearest Neighbor score / optimum2-opt score / optimum2-opt SA score / optimum2-opt ILS score / optimum3-opt score / optimum3-opt SA score / optimum3-opt ILS score / optimumImproved 2-opt ILS score / optimumImproved 2-opt ILS one-side score / optimum
0gr1720852187209520852085208520852085208520850015040017760111.0491.0051.0001.0001.0001.0001.0001.0001.000
1gr2127073333287727072707270727072707270727070022990021561001.2311.0631.0001.0001.0001.0001.0001.0001.000
2gr2412721553128612721272131412721272127212720125311025040001.2211.0111.0001.0001.0331.0001.0001.0001.000
3fri26937111210169379379379379379379370028250131301101.1871.0841.0001.0001.0001.0001.0001.0001.000
4bayg2916102005168516101610161016101610161016100033651134453001.2451.0471.0001.0001.0001.0001.0001.0001.000
5bays2920202258207820202020207020202020202020200029390129022221.1181.0291.0001.0001.0251.0001.0001.0001.000
6dantzig426999566996996996996996996996990035500040550001.3681.0001.0001.0001.0001.0001.0001.0001.000
7swiss4212731630137012731273127312731273127312730036892338802111.2801.0761.0001.0001.0001.0001.0001.0001.000
8gr485046609851075046504651385075504650465046014558531000029461.2081.0121.0001.0001.0181.0061.0001.0001.000
9hk4811461131811244111461114611180511461114611146111461014310424442171131.1501.0861.0001.0001.0301.0001.0001.0001.000
10eil514265114444264264324264264264260941874259446716357451.2001.0421.0001.0001.0141.0001.0001.0001.000
11berlin5275428980878575427542798675427542754275420143352654674141161.1911.1651.0001.0001.0591.0001.0001.0001.000
12brazil5825395307742739025395253952562225395253952539525395025475198556912321.2121.0791.0001.0001.0091.0001.0001.0001.000
13st70675830708675675684675675675675415461884066571030754841.2301.0491.0001.0001.0131.0001.0001.0001.000
14eil76538642562538538557543538538538034432774100042661661.1931.0451.0001.0001.0351.0091.0001.0001.000
15pr7610815915346211834310912510815911213010815910815910815910815901100073041760991836121.4191.0941.0091.0001.0371.0001.0001.0001.000
16rat99121115541321121412111265122212111211121108100037223510005333145121.2831.0911.0021.0001.0451.0091.0001.0001.000
17kroA100212822780722844213882128221305212822128221282212820101000025844689218518221.3071.0731.0051.0001.0011.0001.0001.0001.000
18kroB100221412915822927222842214122304222762214122141221410910011444771000180582371.3171.0351.0061.0001.0071.0061.0001.0001.000
19kroC10020749262272136920852207492085220749207492074920749091000916347680650822261.2641.0301.0051.0001.0051.0001.0001.0001.000
20kroD100212942694722279212942129421929212942129421294212940105539453467953319966413281.2651.0461.0001.0001.0301.0001.0001.0001.000
21kroE100220682746023383221602210622160221002206822121221210101000010000731001519010000100051.2441.0601.0041.0021.0041.0011.0001.0021.002
22rd10079109938852379107910804779497910791079100115855288271001078338511.2561.0771.0001.0001.0171.0051.0001.0001.000
23eil101629803690638630651638629629629081000310000431000956703591.2771.0971.0141.0021.0351.0141.0001.0001.000
24lin105143792035615893143791437914577143791437914379143790105832228386611985891.4161.1051.0001.0001.0141.0001.0001.0001.000
25pr10744303466804648544387443034461744522443034430344303061000422655100012176119801.0541.0491.0021.0001.0071.0051.0001.0001.000
26gr120694293517341700569617146696769566942694211910000100009210000100004897281.3471.0571.0091.0031.0291.0041.0021.0001.000
27pr12459030692976566859608590305907659548590305903059030012100095810010005602110261.1741.1121.0101.0001.0011.0091.0001.0001.000
28bier127118282135737123709118604118657121145120692118282118282118282114100001000092100008623506751.1481.0461.0031.0031.0241.0201.0001.0001.000
29ch130611075796502613661286248616761246110612811510007100009410001100124584100001.2401.0641.0041.0031.0231.0091.0021.0001.003
30pr13696772120769105133972329677299635972519846496772967720291001139371331001010052177635031.2481.0861.0051.0001.0301.0051.0171.0001.000
31pr1445853761652618475860058537587635859058537585375853709100121441251000323662641.0531.0571.0011.0001.0041.0011.0001.0001.000
32ch150652881916725654965286730652865496528652805610000206728271281000851157241.2551.0301.0031.0001.0311.0001.0031.0001.000
33kroA15026524336332809426701265252790926961265242652426524025100101000014010000762432435801.2681.0591.0071.0001.0521.0161.0001.0001.000
34kroB1502613034499275682627926132271352622826141261412613004310000100017210000100051000026511.3201.0551.0061.0001.0381.0041.0001.0001.000
35pr15273682856997541074084736827401773880738187368273682091000736311401000110047182911.1631.0231.0051.0001.0051.0031.0021.0001.000
36u15942080546754298142460420804239642479420804208042080111000038818710000227912331.2991.0211.0091.0001.0081.0091.0001.0001.000
37si175214072226321638214312141521557214452140721407214140141000010000417100005126940100001.0401.0111.0011.0001.0071.0021.0001.0001.000
38brg180195012360203026601950195026101950195019500310000220821000056028246.3381.0411.3641.0001.0001.3381.0001.0001.000
39rat195232327522484235523232390237423562328232809100008148457100001002410000100001.1851.0691.0141.0001.0291.0221.0141.0021.002
40d198157801824016153158421580515939158331578815783157830401000010000617100021020410000100001.1561.0241.0041.0021.0101.0031.0011.0001.000
41kroA2002936835859312692988229368302303003529606293682936801171001075086811000710260294950961.2211.0651.0181.0001.0291.0231.0081.0001.000
42kroB200294373698031267296732944830209298532958629437294380105100151000071510002102124537100001.2561.0621.0081.0001.0261.0141.0051.0001.000
43ts2251266431524931341871272451266431332821320561266431266431266432101000014426531000029923278301.2041.0601.0051.0001.0521.0431.0001.0001.000
44tsp2253916503040824002391940763992394839483916354100001000111501000010106100006361.2841.0421.0221.0011.0411.0191.0081.0081.000
45pr22680369946838606581341803698215081307803698036980369091000218298591001341996944221.1781.0711.0121.0001.0221.0121.0001.0001.000
46gil2622378320825032399238125192452241123952380026710013100011272100101001710000100091.3491.0531.0091.0011.0591.0311.0141.0071.001
47pr264491355802357512501344913550339502584920349135491350371000044651822100101021913815501.1811.1701.0201.0001.0251.0231.0011.0001.000
48a2802579315727242603257926802695262625792579625100005364178510002105312781561.2241.0561.0091.0001.0391.0451.0181.0001.000
49pr299481915989052667485564874948793495224899148224481910761000610000169010010101191000077761.2431.0931.0081.0121.0121.0281.0171.0011.000
50lin3184202954019448494297242524430704360042992420294216302121000710001341010005111006317100111.2851.0671.0221.0121.0251.0371.0231.0001.003
51rd40015281191831637615696155381593316129158551542815287080710015100067920100081018710000100051.2551.0721.0271.0171.0431.0551.0381.0101.000
52fl41711861150131268311963119201204812590119251186611865033110010100038843100001075010001100061.2661.0691.0091.0051.0161.0611.0051.0001.000
53pr4391072171312811162751117231078801114571153611108941072501072920165100061000111019100141067010001100111.2241.0841.0421.0061.0401.0761.0341.0001.001
54pcb44250778619795717151491521765260654374527865095651127038610008100059063100051044910000100131.2211.1261.0141.0281.0361.0711.0401.0041.007
55d493350024166537463355603593736519377223601235223351831132410009100069975100131463410000100011.1901.0701.0161.0271.0431.0781.0291.0061.005
56si535484505014449013485414850348662493484865048472484691499100001000318432100001257710001100001.0351.0121.0021.0011.0041.0191.0041.0001.000
57pa56127633422315128532838287631702898278527841381100001000215822100001434810000100001.2391.1401.0331.0271.0411.1471.0491.0081.008
58u57436905504593926638279383973851043293385733738337080554100001000533905100001736210001100001.3671.0641.0371.0401.0431.1731.0451.0131.005
59rat57567738605747170527074708379237066681168631205100051001128656100022074410002100041.2701.1031.0411.0441.0461.1701.0431.0061.013
60p6543464343457371103583534843352334200835135346693468121696100031001126871100052014410003100111.2541.0711.0341.0061.0171.2131.0141.0011.001
61d6574891261627522065002950982503495843150721492344918601529100091001598604100142762810000100021.2601.0671.0231.0421.0291.1951.0371.0071.006
62u7244191052943455314324643735435535337143106421764223513821100001002175655100004813410001100001.2631.0861.0321.0441.0391.2731.0291.0061.008
63rat783880611054948092529353917211676912689218942152519100081002556809100146541810001100041.2551.0771.0511.0621.0421.3261.0361.0131.015
64pr1002259045331103281036270069273466270183381306273080262842263929415011000310010130736100017328410003100011.2781.0851.0431.0561.0431.4721.0541.0151.019
65si10329265094571930229306392717930251035729329492650926501183110000100011371121000085388404921741.0211.0041.0041.0011.0041.1181.0071.0001.000
66u1060224094308980247073235187235853233363339920232942226448227283278210000100312517371000016739410000100031.3791.1031.0501.0521.0411.5171.0391.0111.014
67vm108423929730147726305125795525275225213641213625097124132924087021601210000100323658331000028892210004100011.2601.0991.0781.0561.0541.7221.0491.0081.007
68pcb11735689271978625126008360960593669746759151576915810711666510001100042356881000023456710000100031.2651.0991.0561.0721.0431.7131.0401.0141.021
69d129150801602145697955971536195326810224052598513695115921431910014100546348151001418931410000100101.1851.1221.1021.0551.0492.0131.0351.0111.007
70rl1304252948335779285536274109270205262659546642269500258063256374162305610011100195733471001345568610003100071.3271.1291.0841.0681.0382.1611.0651.0201.014
71rl1323270199332103294672288616286293280884566533277973272076272432173239110006100915735621000451017110005100061.2291.0911.0681.0601.0402.0971.0291.0071.008
72nrw137956638689646211160591603955870310131858844577575759272090310005100886170461001344740510004100031.2181.0971.0701.0661.0361.7891.0391.0201.017
73fl140020127274472191421453208632078932998204532032120386143652910014100626194341000037201610003100131.3641.0891.0661.0371.0331.6391.0161.0101.013
74u14321529701888071695281657061673631607362789531607271565961567103182710000101305965661000087041710001100001.2341.1081.0831.0941.0511.8241.0511.0241.024
75fl157722249279962510324470239092272951493227242234622437151043710001101299625871001158044010002100091.2581.1281.1001.0751.0222.3141.0211.0041.008
76d1655621287403369805680476742765530136592652176327363715173010010008101578753321000693360810002100101.1921.1241.0951.0851.0552.1991.0501.0181.026
77vm17483365564081023635173673073623143528358170113532313417023452196799731000010190182951410000137270110004100311.2131.0801.0911.0771.0482.4281.0501.0151.026
78u1817572017203064249644136256760268142201606865846559107453371000010105113268910000109462310000100021.2591.1231.1261.0941.0542.4861.0611.0221.033
79rl1889316536389270342694356890342276331589896820331915324475323870101050241000010312251734410004238999910007100111.2301.0831.1271.0811.0482.8331.0491.0251.023
80d2103804508665385621935198772083675224084851768269083063177060100111016820460861000694451210000100071.0771.0641.1621.0901.0402.7851.0591.0281.032
81u21526425379260725827432771186677411795306845566889664047100631000010072314031510000296850010013100041.2341.1301.1571.1081.0542.7941.0651.0411.033
82u2319234256278765254330247570250419240484511622241262239887239019796421000010111472559010000340301010015100001.1901.0861.0571.0691.0272.1841.0301.0241.020
83pr2392378032461170378032429248378032378032109343337803237803237803219581001301126921001407807521.2201.0001.1351.0001.0002.8921.0001.0001.000
84pcb3038137694176310150588164337152590143486438703143891144821143379121183971000010025970622010000524270110019100041.2801.0941.1931.1081.0423.1861.0451.0521.041
85fl379528772352853093447278325063034515561830349296022928511714219100031337426571284100001372855410007100461.2261.0751.6431.1301.0555.4091.0551.0291.018
86fnl446118256622996319878125085020260119074875411219041719496219410532584440100111122249703258100145084516510049100151.2601.0891.3741.1101.0454.1311.0431.0681.063

次に2-opt SAとImproved 2-opt ILSで見つかった解が最適解の何倍であるかをプロットした図を示します。

散布図

横軸が頂点数、縦軸が見つかった解の総距離/最適解の総距離です。点がグラフの下にプロットされているほど最適解に近く、良い解が見つかっています。

Improved 2-opt ILSの条件を2つとも見た場合と1つだけ見た場合の比較です。

比較した散布図

頂点数が多いインスタンスでは、片方の条件のみを見た方が良い解が見つかる傾向にありそうです。これは制限時間10秒では、片方の条件を見ずに多少改善を見逃すことよりも、多くの回数のKick + LSを行った方が良いからだと考えられます。

さいごに

多くの場合に単純な2-opt SAより2-opt ILSの方が時間内に良い解を出せることが実験から分かりました。
自分でTSPやTSPに類似した問題のソルバを書かなければならない場合はこの知識が役に立つかと思います。しかし、自分で書く必要がなくライセンス条件を満たす場合は既存のヒューリスティックソルバ[5]を使ったほうが圧倒的に性能が良く、手間もかかりません。
また、厳密に解くソルバも存在します。TSPを厳密に解くのは数十頂点ですら難しいと思われがちですが、このソルバで厳密に解けている数万頂点の問題もあります[6]。各インスタンスの最適解がどうして分かるのか疑問に思った方もいると思いますが、このような厳密に解くソルバによって最適解が求まっています。

参考

[1] Hong, Inki, Andrew B. Kahng, and Byung-Ro Moon. 1997. “Improved Large-Step Markov Chain Variants for the Symmetric TSP.” Journal of Heuristics 3 (1): 63–81.https://doi.org/10.1023/a:1009624916728.

[2] Johnson, David S., Gregory Gutin, Lyle A. McGeoch, Anders Yeo, Weixiong Zhang, and Alexei Zverovitch. 2007. “Experimental Analysis of Heuristics for the ATSP.” In The Traveling Salesman Problem and Its Variations, edited by Gregory Gutin and Abraham P. Punnen, 445–87. Boston, MA: Springer US.https://doi.org/10.1007/0-306-48213-4_10.

[3] Martin, Olivier, Steve W. Otto, and Edward W. Felten. 1992. “Large-Step Markov Chains for the TSP Incorporating Local Search Heuristics.” Operations Research Letters 11 (4): 219–24.https://doi.org/10.1016/0167-6377(92)90028-2.

[4] Johnson, D., and L. A. McGeoch. 1995. “The Traveling Salesman Problem: A Case Study in Local Optimization.”https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.70.7639&rep=rep1&type=pdf.

[5] K. Helsgaun. 2019. “LKH-3”http://webhotel4.ruc.dk/~keld/research/LKH-3/

[6] “Concorde TSP Solver”https://www.math.uwaterloo.ca/tsp/concorde.html

目次

  1. 目次
  2. 導入
    1. 巡回セールスマン問題(TSP: Travelling Salesman Problem)
    2. TSPの種類
    3. 現実の問題
    4. 異なるアルゴリズムの結果を比較
  3. アルゴリズム
    1. 2/3-opt
    2. 局所探索法(LS: Local Search)
    3. 反復局所探索法(ILS: Iterated Local Search)
      1. Double-Bridge
    4. 焼きなまし法(SA: Simulated Annealing)
    5. 2-opt ILS
    6. 2-optの実装上の工夫
    7. その他の工夫
  4. 実験方法
    1. 比較方法
    2. 使用したテストケース
    3. 使用した言語
    4. 備考
  5. 実験結果
  6. さいごに
  7. 参考

カテゴリー


[8]ページ先頭

©2009-2025 Movatter.jp