一次元交通流

モデルを作る

高速道路上での渋滞形成を念頭に置いて,自動車の流れをシミュレーションする セルオートマトンモデルを作ろう。

追い越しを考慮しなくてよければ,道路は一次元空間であるから,一次元のセルオートマトン でよい。 高速道路上の自動車を表現するために、以下の規則を考える。 これは,Nagel-Schreckenbergモデルと呼ばれるモデルの簡易版である.
  1. 各車両は速度vを持つ。これは次の1ステップで何マス進むかを表わす。最高速度Vmax があり、それ以上速くは走らない。
  2. 各車両は最高速度以内で、できるだけ速く走ろうとする。ただし、加速には時間がかかり、 加速時には1ステップごとにvが1ずつ増えるものとする。
  3. 衝突を避けるため、距離v以内に別の車がいるときは、現時点での前車の位置より1マス前の 位置まで進んで停止する(位置を進めるのに加え、速度をv=0とする)。
これだけである。

また、道路の設定と初期条件であるが、今回は簡単のために
  1. 道路は両端がつながったサーキットとする。
  2. スタート時は全車両が停止している
  3. スタート時の位置はランダムまたは好きな配置が選べるものとする
とした。実は現実の道路とサーキットとでは渋滞の発生のしかたが違うのだが、それはまた 考えてもらうことにしよう

準備

以下のURLから、traffic.tarというファイルをダウンロード。

http://www.cp.cmc.osaka-u.ac.jp/~kikuchi/kougi/simulation/traffic.tar

例によって、これを適当なディレクトリで展開すると、 実行プログラムと、入力データファイルのサンプルができる。

入力データファイルをtr.inとして実行するには

%./traffic tr.in
とする。入力データファイルがなければ、Vmax=5で、全格子点の2割に ランダムに車両を配置してシミュレーションを開始する。

なお、このプログラムに限り、実行制御用のボタンがついている。

入力データファイル

入力データファイルは3行または4行以上からなり、
5
s
1 1 1 1 1 1 1
あるいは
5
r
0.4
のようなもの。
一行めは、最高速度を設定する。5であれば、速度として取りうる値は0,1,2,3,4,5の 5通りである。
二行めは、初期配置をランダムにするか好きに設定するかを選ぶ。この行にrと書かれていれば、 三行めに車両密度を設定する。上の例では全格子点の四割にランダムに車両が置かれる。
二行めがそれ以外のときは、三行め以降に初期配置を書く。上の例は七台が連なった初期状態である。 初期配置は何行にわたってもよい。ひとマス置きに3台並べたいときは
1 0 1 0 1
とする。