使い方

巡回セールスマン問題を解く

都市のパネルで地点の集まりを選び、実行を押します。地図はドラッグで動かし、ホイールで倍率が変わります。倍率は右下の欄に直接打ち込めます。右上の名前で各パネルが開閉し、パネルはドラッグでどこへでも動かせて互いに吸着します。パネルのタイトルをダブルクリックすると、1 枚だけを右上に固定する並べ方に変わります。

巡回セールスマン問題は、すべての都市を一度ずつ回って出発地へ戻る最短の順を求める問題です。道順の数は都市数の階乗で増えるので、数十地点を超えたあたりで総当たりは望みがなくなります。現実的なのは、ひとまず筋の通った経路を作り、そこから改善を重ねるやり方です。

初期解は 3 通りから選べます。最近傍法はいちばん近い未訪問の都市へ移り続けるやり方で、速い代わりに、取り残した都市を拾いに戻る長い辺が最後にできます。貪欲辺法は短い辺から順に採り、輪を早く閉じる辺と、一つの都市に三本目がつく辺を拒みます。ランダムは土台で、改善だけでどこまで届くかを見るためのものです。

2-opt は 2 本の辺を切って逆向きにつなぎ直す操作で、これはまさに交差をほどく動きです。短くなる場合しか受け入れないので、たどり着いた局所最適でそのまま止まります。焼きなまし法は長くなる変え方も受け入れます。受け入れる確率は温度が決め、その温度は進むにつれて下がります。初めは広く歩き回り、終わりには改善しか採らなくなる。だから二つを続けると、どちらか一方より短くなります。Or-opt はもう一種類の近傍で、短い区間を抜き出して別の場所へ、そのままか裏返して差し込みます。

距離は大圏距離(km)で測るので、平面の絵ではなく球の上での長さになります。実行中、太い線はそれまでの最良解、細い線はいま探索が居るところです。グラフは反復に対する両方の長さで、温度の帯はまだどれだけ自由が残っているかを示します。