戻る 難問 ? 巡回セールスマン問題


「巡回セールスマン問題」 が難問である理由は、その膨大な計算量にあります。

いま、訪問すべき得意先が3軒の場合を考えてみます。

巡回経路は6通り

最初に訪問する得意先は3軒の内の1軒ですから、3通りの選択肢があります。
2番目の訪問先は残った2軒のうちのどちらかになります。選択肢は2になります。
3番目の訪問先は残された最後の1軒です。選択肢は1です。

したがって巡回経路の数は 3×2×1=6 ですから、全部で6通りあります。 しかし、3軒の得意先をそれぞれA、B、C とすると、 巡回経路は A-B-C、A-C-B、B-A-C、B-C-A、C-A-B、C-B-A の6種類です。 この中にはそれぞれ逆回りコースが含まれているため、 距離だけを考えるなら (3×2×1)÷2=3 でいいことになります。

訪問先が4軒ある場合は、(4×3×2×1)÷2=12 通り、 訪問先が5軒の場合は、(5×4×3×2×1)÷2=60 通りの巡回経路があります。

このような、n × (n−1) × (n−2) × … × 2 × 1 という計算は n! と書き、 「階乗」 といいます。
訪問先が3軒の場合は 3!/2 = 3 通り、4軒の場合は 4!/2 = 12 通り、 5軒の場合は 5!/2 = 60 通りです。

コンピュータでこのような問題を解く場合、しばしば、すべての巡回経路の長さを計算して、 いちばん短かいものを選ぶという、総当たり式プログラムを作ります。 ばかばかしいようですが、コンピュータは圧倒的な早さで計算し、疲れも知らず、 プログラムは単純で、しかも結果が確実だからです。

では、訪問先が32軒の場合、何通りの巡回経路の長さを計算すればいいでしょうか。
この問題では、すでに1軒目の訪問先にいることになっているので、 31!/2 でいいことになります。 これを計算すると、

31!= (31×30×29× …… ×4×3×2×1)/2 ≒ 4.11 ×10 33 通りになります。




この、4.11 ×10 33 という数字が ピンとこない人は、ガマンしてもう少しおつきあい下さい。

いまここに、32 軒の巡回経路の長さを 1秒間に1兆回 計算できるスーパーコンピュータ があるとします

1秒間に 1兆回 (1012 回) の計算ができます。
このスーパーコンピュータを使って 4.11 ×1033 回の計算をするには 4.11 ×1021 秒が必要です。

1年は、約 60×60×24×365=31536000≒ 3.15 ×107 秒ですから、 4.11 ×1021 秒を 1年≒ 3.15 ×107 秒で割ると、 答は 1.3 ×1014 年です。 すなわち、130 兆年 かかることになります。

この先 130 兆年の間、コンピュータは故障せず、停電もせず、人類も地球も宇宙も滅亡せず、 ひたすら動き続ければ… の話ですが、 残念なことに太陽の寿命はあと約50億年で、50億年後には太陽は赤色巨星と化して火星の軌道に近い大きさとなり、 水星も金星も地球も、みな太陽に飲み込まれてしまう運命のようです。 コンピュータだけが 130 兆年動き続けることは極めて困難なように思われます。

もちろん、近い将来、もっと高性能のコンピュータや、このような問題をまったく別の方法で、 短時間のうちに解いてしまうコンピュータが出現する可能性はあります。

しかし、少なくとも現在のコンピュータで、このような問題を総当たり方式で解くことは とうてい不可能だということはお分かりいただけたでしょう。

このような理由によって、巡回セールスマン問題は 「難問」 とされています。




しかし、それでも、コンピュータに巡回セールスマン問題を解かせたい場合があります。

たとえば、コンピュータなどに使われているプリント基板には、 数千個もの小さい穴を開けなくてはなりません。
もちろん超高速の専用の機械を使いますが、穴は原則的に1個づつドリルで開けます。 どういう順序で開けていくとドリルの移動時間を最短にできるかという問題は、 「巡回セールスマン問題」そのものです。

穴は 数千個 もありますから、コンピュータの総当り方式は論外です。 人間は直感的に効率的な経路を判断できますが、 何千箇所もの加工経路を指示するという単純作業は苦手です。 1箇所でも忘れるとたいへんなことになります。

一般的には、コンピュータで近似解を求める方法が採られています。 必ずしも最短でなくてもいいから、できるだけそれに近いものを短時間で求めるために、 様々な工夫がされています。



講義資料 に戻る   巡回セールスマン問題 に戻る   戻る


*1 現在では、これほど高速のスーパーコンピュータはおそらくないでしょう。 1秒間に 65兆回程度の計算ができるものはありそうですが、 この問題の場合は、得意先間の距離をそれぞれピタゴラスの定理で計算し、 それを32回加えることによってはじめてひとつの訪問ルートの距離が計算できます。 訪問ルートひとつを計算するのに、乗算や開平や加算を何百回も繰り返さなくてはなりません。

last update: 2004.11.18  ueyama@infonet.co.jp