検索
連載

MATSim実践編――「深夜ラッシュ」の謎を解くリタイア直前エンジニアの社会人大学漂流記(7-2)(2/3 ページ)

今回のMATSim(マルチエージェントシミュレーション)実践編では、1万人のエージェントを通勤させた際に発生した「深夜のラッシュ」の要因を探ってみます。

Share
Tweet
LINE
Hatena

自動車で出勤し、歩いて帰宅する

 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.

ページトップに戻る