RISKOptimizerアプリケーション例

9.セールスマン問題

あるセールスマンは、担当地域の全都市を一回ずつ訪問することになっています。全都市を訪問するのにかかる時間が最も短くなるようなルートはどれでしょうか。これは古典的な最適化問題ですが、ひねりが1つあって、各都市間の行程にかかる時間が不確実という点です。また都市の数が(50より)多くなると従来の方法で解くのが非常に難しくなるような問題です。
似たような問題は、工場内で行う作業の最適な順序を見つけるといってものになります。例えば白色に塗装した後で黒を塗る方が、その逆よりもずっと楽であるような場合などです。RISKOptimizerでは、この種の問題を解くにはorder解法を用いるのが最適です。

ファイル名

salesman.xls

目   的

1度ずつ訪れる都市がnだけある場合、訪問時間が最短になるようなルートを見つける

Solving Method

order

応用可能な問題

電子回路の穴あけに要する時間を最短にする計画

Sales1

モデルの詳述

 ファイルsalesman.xlsはテーブルにある都市間の移動時間を参照し、全都市を回る移動時間を計算します。どの2都市間における移動時間も、確率分布によって与えられています。列Aは都市のID番号、列Bは列Aの番号が示す都市名です(lookup関数で表示)。表示される都市およびID番号の順序が訪問する順番となっています。例えば、セルA3に9を入れるとOttawaが最初に訪問する都市になります。A4に6(Harifax)があれば、Halifaxが2番目に訪れる都市です。
 都市間の移動時間はC25から始まるテーブル内の確率分布で表わされています。これらの分布は、C48から始まる各都市間の実際の走行距離を表わすテーブルを参照しています。このテーブルにある距離は対称的なもの(AからBまでの距離はBからAまでの距離と同じ)ですが、より現実的なモデルにしたければ、(通行料、利用可能な交通機関、逆風、坂などの理由で)一方への移動が他方よりかかるような非対称なものにしてもかまいません。
 ここで、2都市間の移動時間の長さを計算するために関数が使用されます。全行程の長さはG2に表わされ、このセルが最適化の対象になります。そのためにRouteLength関数を使います。これはsalesman.xlsでカスタム定義されたVBA関数です。

解決法

A3:A22間のセルを調整することでG2の値を最小化しましょう。order関数を使って、最適化の前に調整可能なセル(A3:A22)に1から20の数値が入っていることを確認してください。
order解法では、RISKOptimizerは、各種の組み合わせを試しながら選択された変数を再調整していきます。