交通シュミレータ(SUMO)を簡単に実行するパッケージを作った

A8バナー広告

SUMOってなんだ?

交通シミュレータ。百聞は一見にしかず。Youtubeのビデオを見るほうが早い。

SimCityみたいなもんだと思えばいいだろう。見た目はすごくよいのだが・・・SUMOを実行するのはなかなか骨が折れる。と、いうのもパラメタ数がめちゃくちゃ存在しているからだ。

さらに大変なことに、SUMOはインストール時に問題を起こしやすい。依存関係が多岐にわたっているからだ。少なくともぼくのUbuntu環境では apt install で済むような話ではなかった。依存関係をひとつひとつ手動で解決していく羽目になった。

Windows版で検証していないが、まわりの話を聞く限りではトラブルを起こしやすいとのことだ。

どうすればSUMOを簡単に使える?

ひとつのアイディアはdockerを使うことだ。なーんにも入ってない素のUbuntuイメージを用意し、SUMOをインストールすればいい。素のイメージならば、依存関係の問題は起きない。

となると、次に考えることはSUMOをインストールしたdockerコンテナと通信することだ。SUMOはXMLでconfigを記述する。SUMOの出力もまたXMLである。で、このXMLは簡単な構成ではない。ぼくが目にしてきたケースでは、configのXMLが5個〜ということが頻繁にあった。

XMLファイル群を管理しながら、dockerコンテナと通信をする。なかなか大変な作業である。こういう作業は自動化したいものだ。と、いうことで、自動化するためのPythonパッケージを作った。

どんな時に役立つ?

例えば、パラメタを少しづつ変化させた時の統計量を得たい時。例えば、統計量を観察しながらパラメタを調整したい時。こういうときは、SUMOを連続的に実行しないといけない。

でも、SUMOを連続的に実行するってかなり面倒くさい。たぶん、愚直にパイプラインを作るとすれば、XMLを操作するスクリプトを作って、bashスクリプトでも作るだろうか。

でも sumo_docker_pipeline を使えば、そんなパイプラインはもはや不要。

何ができる?

  • SUMO in dockerコンテナを1行のPythonコードで呼び出し
  • XML configファイルをテンプレートとして扱いが可能。パラメタ値を穴埋めするアイディア。
  • シュミレーション結果をndarrayで取得可能。たった1行で。

どうやって使う?

ここにサンプルコードを置いておいた。

Python

Posted by blog_author