Distance Matrix API(旧Project Abu Dhabi)は、運送会社等が複数の場所を最も効率よく移動する方法を調べるためのサービスです。

まだアメリカにのみ対応していますが、面白そうだったので試してみました。

背景

複数拠点を最も効率よく移動する問題を、数学の世界では「Travelling Salesman Problem」と言い、距離または移動時間の長さを「移動コスト」という単位で様々な移動ルートを試し、最もその「移動コスト」が低いところが最適なルートであるとみなす方法なのです。普通の問題とは違い、最適化を用いる計算なので、最適という答えは実際にはわからない、奥深い問題なんです(確かそうだったはず)

デモサイトで試してみる

さて、数学の話をし始めると、永遠と話せそうなので、本題に戻ります。

このDistance Matrix APIは現在デモサイトが用意されているので、まずはそこで何ができるのか実際に動くものを見ながら説明します。

サイトはこちらです:

http://bmlabs.azurewebsites.net/v8-TSP/index.html

こちらから数字1-4までのものをどれかクリックし、「Solve TSP」をクリックしてみてください。

2を選ばれた方は以下のような表示になっているはずです。


表示内容を説明すると、例えばクロネコヤマトさんが、Aに倉庫を持っていたとして、今日の配達先のお客様がBからHのところ全てに配達する必要があるときにDistance Matrix APIが活躍します。

Distance Matrix APIはPoint 0から7の拠点から最適な組み合わせのルートを自動検索し、上記のように結果を教えてくれるのです。この例ではPoint 0から6、7、2、3、5、4、1の順で巡るのが最適であるという結果を出しました。素晴らしい!

APIの仕様

APIは非常にシンプルなものとなっています。

HTTPまたはHTTPSでGET処理を送るだけです。

https://api.labs.cognitive.microsoft.com/Routes/Matrix?optimize={optimize}&mode={mode}&origins={origins}[&destinations][&startTime][&subscription-key]

パラメータ:

名前 説明 必須
optimize 距離的に最適化するか、移動時間的に最適化するかを指定します 「distance」

「time」

はい
mode 移動手段を指定します 車:「driving」

徒歩:「walking」

「transit」

はい
origins 緯度、経度の組み合わせで出発地点を指定します 緯度1,経度1;緯度2,経度2;… はい
destinations 緯度、経度の組み合わせで到着地点を指定します 緯度1,経度1;緯度2,経度2;… いいえ
startTime 出発時間を指定します 2017-05- 05T08:00:00Z いいえ
endTime 指定すると、この時間帯においての平均移動時間のヒストグラムを提供します 2017-05- 05T08:00:00Z いいえ

アプリとかにうまいこと組み込むと、こんな感じでルートが確認できるんですね…すごい。


APIの作成方法ですが、今ちょうどCognitive LabsからBing Mapsへの移行途中のようで、まだ発行できませんでした。

またアップデートがありましたら更新します…すみません。