交通流のモデル

沢山の人が歩道をひとつの方向に歩いています。歩道といっても 敷石が並べてあるもので,人はそれらの上を 1歩ずつ動きます。

皆が同じ歩調で歩きたいのですが,ところどころ混み合っているところがあり, すぐ前の石に人がいる場合には,足を踏み出せないということになっています。 そうでないときには前に進むことができます。このような状況では, 混雑と流れの円滑さに相関があるでしょう。 そのことを実験で確かめてみます。 なお,ここで紹介してるモデルについては『渋滞学』西成活裕,新潮選書(2006)に 詳しい紹介があります。


一本道上の行列

道の上で歩行者(エージェント)が下の図のような進み方をすると仮定しよう。
Passengers on a Single Lane

大急ぎでことばを紹介しておくと,シミュレーションで動き回る仮想的な人のことを エージェントという。人以外の動物や車などでもよい。以下のシミュレーションでは 複数のエージェントが動き回るので,マルチエージェントシミュレーションと呼ばれる。

さて,原理的には,すべての人がこの状態で右に1歩進むことはできるはずだが, 実際には自分の進むべき場所に人がいるとそこが空くまでは進まない。 歩行だけでなく,車の運転でもそういう傾向が見られる。つまり, 前方に余裕がないと進めないという心理的な傾向があるらしい。 このとき,人々の集団はどのような動きを見せるだろうか。

このようなモデルは ASEP (Asymmetical Simple Exclusion Process, 非対称単純排除)モデルと呼ばれていて,もっとも単純な交通流モデルになっている。

シミュレーション画面

このモデルでは,前方に隙間がない人は立ち止まって待っていて, 隙間があれば右に動くために,固まった集団はなかなか進まず, 空いているとスムーズに進むことができる。 ソースをいじって,簡単な実験を行ってみよう。

ASEP モデルで実験する

簡単なソース

このモデルを実装した Java のソースをダウンロードして, コンパイルしてから実行してみよう。

ASEP モデルの簡単な Java プログラム

やや規模の大きいモデル

このプログラムはコマンドライン引数から初期の密度を指定するようになっていて, 次のように実行する。

> java ASEP001 0.6

上のコマンドライン引数の 0.6 は,指定された範囲の各点に 0.6 の確率で石を置くことを意味している。この値を変更することで 混雑の度合いを調節できる。

ソースを改良する

人の流れを循環させる

上のモデルでは右端に達した人は消えてしまうので, 混雑度を一定にした実験は行えない。そこで,右端に来た人は その次の瞬間に左端に現れるようにしたい。それには 剰余算を利用するとよい。

  平均歩行速度を計測する

このシミュレーションによって混雑がおよぼす交通流への影響を見積もりたい。 ある人が1サイクルの間に1歩進んだら速度は1,進めなかったら速度は0とする。 これを全員について行って平均速度を求め,コンソールから出力するように したい。

課題

上の改良を行ったプログラムを使って,人の密度と平均速度の関係を 求め,GNUPLOT でそのグラフを描いて得られる PNG ファイルを提出しなさい。 結果について簡単にまとめた文章(数行でよい)も添えること。


フロアフィールドモデル

フロアフィールドモデル(Floor-Field Model) というのは,文字通り床の上という場を人が 動き回るような交通モデルだ。 ここでは,部屋の壁の中央に出口があってそこへ人が逃げていくような,脱出の 動きのシミュレーションを紹介しよう。

動きをつくる

下の図の赤で示されたエージェントは, 緑の出口に向かってランダムさをもちながら,ふらふらと進む。 この仕組みは,図に示された4本の矢印の長さに比例した確率で 上下左右への進路を選択していくというものである。 数学的な詳細は,ここでは省く。
Field Map

プリミティブなモデル

最初に登場するのは,エージェントが出口に引力のようなもので引き付けられるだけの モデルだ。この場合,エージェント同士は同じ位置に重なって立つことができるので, 最終的に出口のところにみんなが立つことになる。

プリミティブなモデルによるシミュレーション画面

Java のソース

シミュレーションを実行するには,ソースをコンパイル後,次のように適当な数値を 与えて起動する。この数値が大きいほど,入り口に引き付けられる力は強くなると 考えてよい。

java FloorField01 0.5

排除効果をもたせたモデル

次に,エージェントが動くときに,あらかじめ他人がいる場所には進入できないという 制限を設けよう。このような制限はしばしば排除(Exclusive)効果と呼ばれる。

Java のソース

実際にプログラムを走らせてみると, 最後は出口付近にみんなが集まって動きがとれなくなってしまう。

出口から脱出できるモデル

今度は出口に達したエージェントが消えていく,つまりどこか外に出ていくという モデルに改良してみよう。

Java のソース

今度はかなりリアリスティックな動きが見られる。さて,このモデルで渋滞が 引き起こされるのはどんな状況でだろうか?引力のパラメータを変化させたり, ソースの中に書かれているエージェントの数を変更したりしてみると,それなり に面白い結果がえられるかも知れない。