MATSim実践編――「あなた」というエージェントを作って散歩させてみよう:リタイア直前エンジニアの社会人大学漂流記(3-2)(3/4 ページ)
今回からMATSim実践編に入りたいと思います。MATSimを理解するには「3つのファイル」を知っておけばOKです。3つのファイルを使い、まずは1人目のエージェントとなる「あなた」を作って、自宅周辺を散歩させてみましょう。
「あなた」というエージェントを作ろう
では次に、あなた(のエージェント)を作りましょう。エージェントは先程述べたように、plans.xmlで行動を決めます。
さて、このplans.xmlも、前述した「MATSimは、原則として、緯度・経度の座標を取り扱わない」を継承しているのですが、以下の図中のコメントから、私がこのplans.xmlでも「大混乱」している様子をご理解頂けるかと思います。
次に、エージェント1人1人をplans.xmlで設定する、ということに私は驚がくしました。私が対象としてきたエージェントは数千から数万規模です。「そんな大量のエージェントを、全部手書で記述できるかぁ!」と、叫びそうになりました(多分、集合的記載方法はあるはずです(現在、調査中))。
エージェントが通過するNodeも番号で指定できるようですが、普通はそんな面倒なことはやりません(大抵はダイクストラ計算ライブラリに丸投げです。MATSimでもデフォルトではDijkstra / A* 系という最短経路検索を使っているようです)。あと、行動パターンも、自宅→職場or学校 → 自宅、というテンプレ記述がデフォルトのようです。
さて、まあ、plans.xmlにケチをつけるのはこれくらいにしておいて、実際に「自宅の周りを散歩する、あなた(のエージェント)」を作ってみましょう。極めてショボイ例ではありますが、一応、私の方では動いています。
このplans-test1.xmlをこちらにアップしておきましたので、ダウンロードして使ってください(ただ、これ江端家の近所だけで有効なものですが)。
「自宅の周りを、朝6時から“車”で散歩するの?」というツッコミはあると思いますが、現時点では、これは諦めてください(実は、これもMATSimの設計思想と深い関係があります)。
面倒なのは、出発地点や中継地点の選び方です(link=”153100623_0_fwd”とか書かれているところ)。これ、先程作成したnetwork.xmlから読み取ってください。ただ、network.xmlの座標は、緯度・経度になっていませんので、先程紹介した江端自作の座標変換サイトで、ざっくり位置を探してください(この辺は、Google Mapと連携させて作業すると良いでしょう)。
「なんで私が変換サイトまで作らにゃならんのか」と、泣き言を言いそうになりました。というか、その程度のツール、MATSimが普通に提供してくれればいいのに「ない」。他のツール(例えばQGIS等)すらも持っていない。
さっきから何度もしつこいですが、これもMATSimの思想です ―― MATSimにとっては『地図は、どーでもいい』ものであって、MATSimの興味は徹頭徹尾、“道路の渋滞”と“到着時間”の超厳密な計算結果なのです ―― ぶっちゃければ、MATSimにとって地図は“おまけ”みたいなものなのです(ちょっと信じられませんが)。
私(江端)は、地図上に大量のエージェントを登場させて、その動きをワラワラと示して、学会で“ウケ”を取り、依頼元から“研究資金”を引き出す『地図を使った大道芸人』です。比してMATSimからは、学会や出資先に『媚(こび)を売らない無骨な研究者』の姿が浮び上がってきます。
最後に、ここまで作ってきたplans.xml、network.xmlを動かす設定(棋士)である、config.xmlを作成します ―― が、このconfig.xmlも私を懐疑の闇に落とすのです。
リプラン(再設計)、スコアリング(評価値) ―― いらんなぁ、そんなもん。これは繰り返し計算で、大量のエージェントの”最適”を決める機能のようなのですが、その”最適”というのが、(現時点の私には)よく分かっていません。
「渋滞を回避する」とかの内容でしたら、「みんな、会社も学校もサボっちゃえ」が、渋滞を回避する方法としては最適です ―― 実際に、私達は、あの新型コロナの時代、そうやってきましたしね。いずれにしても、もっとMATSimを深く理解しなければならない、ということだけは確かなようです。
以下の図は、私(江端)が結構な数の試行錯誤を繰り返して、ようやく「MATSimが食べて(読み込んで)」くれた『至宝のconfig.xml(の例)』です。
このconfig-test1.xmlもこちらにアップしておきましたので、ダウンロードして使ってください(ただ、これ江端家の近所だけで有効なものですが)。
(現時点の)私はリプラン(再試行)やスコア(評価値)には1mmも興味がないのですが、そのどちらもMATSimの“魂”のようです。これを記載しないと、MATSimが全く動かないことは確認済みです。ここはダミーでも良いので設定を記載しておく必要があります。
上記の例では「おまじない」の嵐ですが、MATSimにおいて「おまじない」は侮れない要素です。
さて、これにて、ようやくnetwork.xml(サンプルではnetwork-test1.xml)、plans.xml(サンプルではplans-test1.xml)、そして、config.xml(サンプルではconfig-test1.xml)がそろいました。
MATSimをインストールしよう
ここからMATSimのインストールを始めたいと思います(普通は、インストールの説明が先なのですけど、この3つのファイルで、(私と同様に)あなたも、「大混乱するだろうな」と予想できましたので、そちらの説明を先行しました)。
コピペ用に平文でも書いておきます。
# 1. プロジェクト取得
$ git clone https://github.com/matsim-org/matsim-example-project.git
$ cd matsim-example-project
# 2. Mavenでビルド(ここが必要)
$ sudo apt update
$ sudo apt install maven
$ mvn clean package
# 3. target/ に JAR ができる
$ ls target/
matsim-example-project-0.0.1-SNAPSHOT.jar
# 4. JAR を実行
$ java -jar target/matsim-example-project-0.0.1-SNAPSHOT.jar
これを実行すると、以下のようなGUI画面が立ち上がってくるはずです(いや、最初からは立ち上がってこないでしょう。申し訳ありませんが、ここはご自身でドタバタしてください(個別のアドバイスは、さすがに私も無理なので))。
取りあえず、この画面が出てきたらほぼ勝ったも同然です(なんか、ChatGPT風な書き方になってきて自分でもちょっと不快ですが)。
では次に、先程作った3つのファイルを設定します。以下の図に従って実施してください。エラーなく完了したら、あなたの散歩のデータが格納されます。
エラー表示が出なくなってmatsim-example-project\scenarios\equil2\outputというディレクトリにoutput_counts.xml.gz, output_network.xml.gzというファイルが出力されれば、成功です。この中身に、あなたの散歩のデータが格納されているはずです。
―― というところで、紙面を使い果たしてしまいました。今回はここまでとさせてください。みなさん、ここまでで、間違いなく、どこかで「嵌(はま)ります」。一通りハマって頂き、それを突破したころ(次回)に、またお会いしましょう。
私、既に、QGISを使って「あなたの散歩を上空から動画でレビューする」ところまでは確認しているのですが、―― この説明が、恐ろしく面倒くさい ―― ので、来月までに自作ビューアーの作成を試みます。
MATSimであなたに苦労させるのは仕方がないとは思うのですが、QGISというツールであなたを苦しめるのは私の本意ではありませんので(ただ、QGISでの使い方をすぐ教えて欲しい、という方がいらっしゃったら、ご連絡ください。資料を送付します)。
最後に、「なぜMATSimは緯度・経度を使わないのか?」をまとめて、今回の総括にしたいと思います。
■理由1:緯度・経度は「平面距離」にならない
緯度・経度は球面上の角度であり、
(1) 直線距離の計算を単純化できない
(2) 交通リンク距離(link.length)を“自動計算”できない
→ 大規模シミュレーションでは致命的。
■理由2:大陸スケールでは歪みが大きすぎる
緯度・経度をそのまま平面に扱うと、ヨーロッパ、アメリカ、中国など、距離の縮尺が大きく変わる
→ 速度・所要時間の整合が崩れる。
■理由3:均衡計算(replanning)で収束しなくなる
距離や速度が場所によって不均一 → ルート選択、モード選択、再計画 (replanning)の一貫性が損なわれる
→ 収束しづらくなる/不安定化する
■理由4:“渋滞計算“が考え方のコア
距離(m)、速度(m/s)、リンク長(m)、道幅(m)、交通流動量(veh/h)という、交通量(特に渋滞による遅延)の考え方が、当初から組み込まれている
→ 数学モデル
なんか、「これ(座標の取り扱い)」こそが、MATSimが日本でいまひとつ流行らない理由の大きな一つではないかな、と思い始めています。
MATSimは「いつ」「どこで」を気にしません。ぶっちゃけ、100年前でも100年後でも、海上でも、月面でも、火星でも、そのシミュレーション環境を決定する要素(エージェントと道路)さえそろえれば、交通量と移動時間をひたすら計算するシミュレータなのです。
これまで、私もいろいろな解説を書いてきましたが、「MATSimの解説は、恐ろしく難しい」 ―― 今、それを痛感しています。
では、また次回にお会いしましょう。
Copyright © ITmedia, Inc. All Rights Reserved.






