検索
連載

MATSim実践編――「あなた」というエージェントを作って散歩させてみようリタイア直前エンジニアの社会人大学漂流記(3-2)(3/4 ページ)

今回からMATSim実践編に入りたいと思います。MATSimを理解するには「3つのファイル」を知っておけばOKです。3つのファイルを使い、まずは1人目のエージェントとなる「あなた」を作って、自宅周辺を散歩させてみましょう。

Share
Tweet
LINE
Hatena

「あなた」というエージェントを作ろう

 では次に、あなた(のエージェント)を作りましょう。エージェントは先程述べたように、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.

ページトップに戻る