MASのモデル

団子バスモデル

 路線バスが何台も連なってやってくる現象を、マルチエージェント・シミュレーションを用いて再現したモデルです。

 4台のバスが、反時計回りに町を周回しています。等間隔で設置されている4カ所の停留所には、一定時間ごとに新たな乗客が現れます。バスは停留所に着いたら新たな客を乗せてから出発します。道路には、青色の一般車も周回しています。バスと同じく、前が詰まったら減速し、空いたら制限速度まで加速してゆくという、一般的な道路渋滞モデルと同じ挙動をします。道路は2車線あるので、バスが止まって車線が塞がっていたら、右の車線に移動します。渋滞してスピードが落ちると色が濃くなって、渋滞の発生が分かりやすいようになっています。一般車の数はコントロールパネルで設定できます。

 

団子バスモデルをダウンロード

モデルの実行にはartisoc または artisoc player(無償)が必要になります。

 

モデルの見どころ

 偶然起きた小さな渋滞によってバスの間隔がほんの少し開くと、その間に停留所に現れる乗客が増えます。すると、後ろのバスはその分だけ、停留所で長い乗降時間が必要になります。前のバスとの間隔はさらに開き、その次の停留所ではさらに多くの乗客を乗せなければなりません。逆にバスとバスとの間隔がほんの少し縮まれば、停留所で後ろのバスを待つ乗客は少なくなりますから、乗降にかかる時間は短くなり、ますます前のバスに追いついてしまいます。つまり、このモデルでは、①最初に小さなタイミングのズレが生じ、②そのズレが停留所での乗客数の変化によって拡大再生産されて、団子現象が発生します。

 では、「運転間隔の小さなズレ」と「ズレの拡大再生産」という2つの要因をモデルで確かめてみましょう。

 まずは、運転間隔の小さなズレの影響を調べます。このモデルでは、時間ごとに一定数の乗客が現れますし、バスの加速力や最高速度は同じです。ですから、遅れや進みの主な原因は、一般車の渋滞と考えられます。そこで、一般車の数をゼロにしてモデルを動かしてみましょう

 

 

 バスはなかなか団子になりません。一般車によるほんの小さな渋滞や車線変更のもたつきなどが積み重なって、そのきっかけになっていたことが確認できます。

※一般車が「0」なら団子は発生しないはずです。しかし実は、移動先の座標を指定するときに割り切れなかった小数などから微小な誤差が生じています。その結果、一般車の台数を「0」にしたときでも4000~5000ステップくらい経つと団子が発生します。一方、一般車が「100」の時には、2000ステップ前後で団子ができます。一般車が生む渋滞やズレが団子の形成を促進していることと同時に、小数点以下何桁の小さな誤差でも積み重なれば団子のきっかけになることが分かります。

 つぎに、ズレが拡大再生産される原因を取り除いてみましょう。乗客です。乗客ボタンを一回押してオフにすると、乗客が現れなくなります。一般車の数を元に戻してから実行してみましょう。

 

 

 なかなか団子になりません。ずっとシミュレーションを続けると、時々2台が近づくこともありますが、しばらくするとまた離れてしまいます。広がった間隔がさらに広まり、狭まった間隔がさらに狭まるようなフィードバックが働くためには、乗客が必要なのです。

 

解決法の模索

 この実験から、「運転間隔の小さなズレ」または「乗客」のどちらかが存在しなければ、団子現象は生じないことが分かります。このふたつの要素について順番に考察してみましょう。

 まず、現実の世界で「運転間隔の小さなズレ」をなくすのは、容易ではありません。モデルは単純化された世界です。モデルの中ではこのズレの原因は他の車でしたが、現実には他にも沢山原因があります。信号のめぐりあわせ、横断歩道の歩行者、料金支払いで両替やチャージが必要な乗客もそうでしょう。また、新たな乗客の出現間隔も一定ではありません。しばらく誰も来ないこともあれば、連続してくることもあります。こうして発生した待ち行列の長さの違いも「きっかけ」になってしまいます。(ちなみに、このような出現間隔の長さの分布は、専門的にいうとポアソン分布という分布で近似できることが知られています。ArtisocではPoissonRnd()という関数を用いると、こういう状況を作り出すことができます。しかし、このモデルでは、そのようなランダムさを除いても団子現象がしぶとく発生することを示すために、あえて乗客の出現間隔を一定にしています。もちろん、PoissonRnd()を用いれば、もっと簡単に団子現象が発生します。)「運転間隔の小さなズレ」を起こらなくするのは、どうも難しそうです。

 かといって、そのズレを拡大する「乗客」を乗せないのでは、バスを走らせる意味がありません。本末転倒です。ではどうしたらよいのでしょうか?

 複雑なルールでも簡単に試しやすいのが、コンピュータ・シミュレーションの利点です。たとえば、「前のバスに追いついたら後ろのバスが前のバスを追い越す」「定員に達したバスは停留所を素通りする」「バス停の数や間隔を変える」「後ろのバスが遅れたときに前のバスが出発を遅らせる」「停留所の乗客に次のバスの接近状況と混雑状況を伝える」などしたらどうなるでしょうか。これらを複数組み合わせる方法もあるかもしれません。昔から研究されてきたテーマではありますが、いろいろな対策を実験したら、新たな解決策が見つかるかもしれません。「我こそは!」という方は、是非、画期的な方法を探求してみてください。私は黙って団子の2番目の空いているバスに乗ることにしますけれど。

(2019年3月15日 鈴木一敏)

(2019年9月6日 修正)

 

団子バスモデル 基本情報

【モデルタイトル】:団子バスモデル
【サンプルモデル作成者】:鈴木一敏