MATSim実践編――「深夜ラッシュ」の謎を解く:リタイア直前エンジニアの社会人大学漂流記(7-2)(2/3 ページ)
今回のMATSim(マルチエージェントシミュレーション)実践編では、1万人のエージェントを通勤させた際に発生した「深夜のラッシュ」の要因を探ってみます。
自動車で出勤し、歩いて帰宅する
MATSimでは、自動的に「こんなの欲しいな」というグラフをデフォルトで作成してくれます。上記の0.legHistogram_all.pngも含めて、以下のようなグラフを作ってくれます。
で、今回調べていたのですが、特に「徒歩のエージェント」が変な動きをしています。 以下のグラフは、イテレーション0回目の徒歩ユーザの推移です(matsim-example-project\output\berlin2\ITERS\it.0\0.legHistogram_walk.png)。
結論から言うと、「自動車で職場にやってきたにもかかわらず、仕事を終えた16時以降、歩いて帰宅しているエージェントが同時に620人登場している。その中には、午前6時に自宅に到着するエージェントもいる」です。
――自動車で職場にやってきて、歩いて帰宅する人間なんかいるか?
これ何? と思いましたので、matsim-example-project\examples\berlin2\plans_hwh_1pct.xml.gzのエージェント1万5931人分の中身を調べてみました。
全員分のエージェントを確認した結果、往路・復路の組み合わせは以下の通りとなっていました。
で、さらに興味本位で、自動車で来社して、歩いて帰宅する人を調べてみたら、24時以降が33人、30時以降が13人、40時以降も3人いまして、どう考えても、このエージェントの設定は「バカげている」としか思えません。
これに対処するためには、plans_hwh_1pct.xml.gzに記載されているエージェントの内容を、妥当なものに書き直す必要がある、ということが分かりました。
加えて、今回のシミュレーションで分かったことなのですが、legHistogram_all.png、legHistogram_car.png、legHistogram_pt.png、legHistogram_ride.png、legHistogram_walk.pngの全部のグラフで、エージェントの数が2倍になるのです ―― きっちり2倍。
例えば、legHistogram_walk.pngでは、Walk(歩行)エージェントは354人なのですが、グラフでは708人として表示されるのです(前図のグラフ参照)。
「MATSimのバグ?」と思って、いろいろ調べてみたのですが、私はそのような報告を見つけることができませんでした。ただ、私の環境ではきっちり2倍となるので、あまり気にしないことにしました(どなたか、この理由と対策をご存じの方がいらっしゃいましたら、江端にご連絡ください)。
まあ、シミュレーションの傾向を見るのであれば、十分に役に立ちますし、資料や論文に使うのであれば、”0.events.xml.gz”から自力で作り直せば済むことです。
それはさておき、帰宅時に90kmを歩いて、朝の6時に自宅に到着するだなんて、いくらなんでも「そりゃないだろう」と思いましたので、plans_hwh_1pct.xml.gzを、私なりに修正してみることにしました。
このファイルについて、Walk時間が1時間以上となっているエージェントは、復路(帰宅)もCarに変更して作り直しました。
- 元のwalk leg:354件
- 徒歩時間が1時間以上のためcarへ変更:295件
- 1時間未満なのでwalkのまま:59件
- 修正後に残る1時間以上のwalk:0件
変更したlegでは、徒歩用の所要時間・到着時刻・空routeを削除しています。これにより、MATSim側でcar経路を再計算できる形にしています。
結果はこんな感じになりました。相変わらずきっちり2倍のままではありますが、帰宅に1時間以上かけている人(エージェント)はいなくなり、妥当な結果になっています。
「深夜ラッシュ(24時付近)」って何だ? に対しては、config.xmlの設定を変更することで、妙なエージェント(朝までかけて帰宅するエージェント)が登場することについては、plans.xml(ここでは、plans_hwh_1pct.xml.gz)の修正によって、おおむね妥当なシミュレーションが行われることが確認できました(ちなみに江端が修正した、plans_hwh_1pct.xml.gzが必要という方がいらっしゃったら、こちらにアップしてありますので、ダウンロードして、plans_hwh_1pct.xml.gzにリネームして使ってください)。
実はMASというのは、このBerlinサンプルのように、数万のエージェントを同時に動かすので、私の作ったようなビューアツールを使って、エージェント全員を追跡することは、かなり(というか、絶望的に)難しいです。
仮想世界で好きなだけ失敗できる
今回は、MATSimに標準装備されているグラフ(PNGファイル)を使うことで、シミュレーションの妥当性を、ある程度読み取れることが分かりました。例えば、素のBerlinサンプルに収録されている約1万6000人分のエージェント設定が、かなりアバウトであることも見えてきました。
今回、私が相手にしたのは、深夜まで歩き続けるエージェントを収録したplans.xmlと、同じ活動に異なる終了条件を与えているconfig.xmlと、実数のきっちり2倍を表示するグラフでした。
MASは、入力されたデータと設定に従って、極めて真面目に計算します。そこに「こんな人間がいるはずがない」と判断する常識はありません。徒歩で90km帰宅せよと命じられれば、黙って翌日の夜まで歩かせます。
だから、シミュレーション結果が得られたことと、その結果が自分の意図通りに動いていたことは、全く別の話です。入力データを疑い、設定を確認し、出力を別の方法で数え直し、不自然なエージェントを一人ずつ追跡する。結局、シミュレーションで一番手間がかかるのは、計算そのものではなく、自分でその結果を信じるに足る確信を得るプロセスなのです。
さらに言えば、計算プロセスが妥当であると確信できたとしても、その結果が現実世界を正確に反映している保証にはなりません。
「じゃあ、なんでシミュレーション、特にマルチエージェントシミュレーションなんぞをやるんだ」と問われれば、理由は簡単です。
―― 現実の世界で試すより、安くて、早くて、誰も死なないからです。
現実の都市に一万人の仮想住民を放り込み、道路を封鎖し、バス路線を減らし、料金を上げ、災害を起こし、住民の行動を観察する――などという実験は、普通は許されません。
許されるとしても、予算、倫理審査、住民説明会、行政手続、謝罪会見、その他もろもろで、実験を始める前に私が先に死にます。
その点、シミュレーションの住民は文句を言いません。午前6時まで歩かせても、SNSで炎上させても、労基署に駆け込んでもきません。しかも、失敗しても都市は壊れず、住民も怒らず、責任者も辞任しなくて済みます
要するに、シミュレーションとは、
―― 現実で失敗すると怒られるので、先に仮想世界で好きなだけ失敗しておく仕組み
なのです。
もちろん、仮想世界でうまくいったからといって、現実世界でうまくいく保証はありません。
しかし、少なくとも、
―― やる前からダメだと分かることを、現実世界で盛大に実行してしまう
という、人類が何度も繰り返してきた失敗を、少しは減らせるかもしれません。
特に、先例主義で凝り固まった行政の役人や、数式やロジックでは説得できない政治家に対して、その政策がどのように破綻し、誰にしわ寄せが及び、どこで社会システムが壊れるのかを突きつける。
口で説明しても理解しないのであれば、グラフにして見せる。
グラフでも理解しないのであれば、仮想都市を丸ごと破綻させて見せる。
―― そういう連中に「あんたの計画の先にある失敗」を見せつけ、逃げ道ごと塞いで、MASで殴りつける。
そういうことであれば、私の力は、無尽蔵に湧いて出てくるのです。
ただし ―― MASが最初に殴ってくるのは、私自身の思い込みと、私自身が作ったモデルの方である可能性が高いですが。
Copyright © ITmedia, Inc. All Rights Reserved.




