交通シュミレータ(SUMO)を簡単に実行するパッケージを作った
目次
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行で。
どうやって使う?
ここにサンプルコードを置いておいた。
ディスカッション
コメント一覧
まだ、コメントがありません