一台一台に与えるのは、局所ルールだけ
Intelligent Driver Model(IDM)を使い、各車が自分の速度、前車との車間距離、前車との速度差から加速度を計算します。すべての車を同じ時刻の状態から更新し、特定の場所に「渋滞」を描き込んだり、車の停止位置を指定したりしていません。
dv/dt = a { 1 − (v/v₀)⁴ − (s*/s)² }
s* = s₀ + max(0, vT + v(v − v前)/(2√(ab)))
vは速度、v₀は希望速度、sはバンパー間の距離、Tは希望車間時間、aは加速の強さ、bは快適減速度、s₀は停止時の最小希望車間です。Tは反応遅延そのものではありません。
初期条件とプリセット
全長600 mの1車線環状道路。全車の長さは4.8 m、s₀ = 2.0 m、b = 2.3 m/s²、加速指数は4です。各車の性質は同一。最初は等間隔・平衡速度で配置し、#01の速度だけ15%下げます。継続的なランダム減速は加えていません。
「自由流」は16台・希望速度80 km/h・T = 1.5 s・a = 1.4 m/s²。「渋滞の発生」は36台・80 km/h・T = 1.0 s・a = 0.65 m/s²。「成長した渋滞」は「渋滞の発生」と同じ計算を240秒進めた状態です。条件は現象を観察しやすくするための例示で、実測に合わせた校正はしていません。
操作と読み方
車をクリックすると観察対象を変更できます。「一台をブレーキ」またはBキーで選択車に3秒間、少なくとも2.8 m/s²の減速を与えます。停止中は後退しません。Spaceで一時停止・再開、Rで現在のパラメーターの初期状態に戻せます。
車両数の変更は全車を再配置して時刻と履歴をリセットします。希望速度・車間時間・加速の強さは、その場で反映します。プリセット切替は計算を初期化して再生を開始します。リセットは再生/停止状態を保ちます。再生倍率は現象を変更せず、モデル内の時間の進み方だけを変えます。
車体の色は0〜80 km/hの固定スケールで、低速が赤、高速が青緑。時空間図は直近最大180秒を表示し、道路位置が右方向、時間が下方向に増えます。車は0 mから600 mまで走ると0 mへ戻るので、軌跡が両端で途切れるのは正常です。白い軌跡は選択車です。
流量の目安は「交通密度 × 空間平均速度」で算出した環全体の値であり、特定の地点で測定した通過台数ではありません。CSVには直近最大300秒の時刻、各車の位置・速度、集計指標、操作イベントを含めます。
数値計算と限界
0.05秒の固定刻みで、加速度一定として位置・速度を積分します。停止時は区間内の停止距離を使い、負の速度を防ぎます。急なパラメーター変更などに備え、減速度を9 m/s²までに制限し、必要な場合だけ車両の重なりを防ぐ数値上の補正を行います。物理計算の間は描画を補間し、車体には小さな画面での最小表示サイズを設けています。車線変更、反応遅延、事故、道路勾配、車種差は扱いません。
厳密には、最適化アルゴリズムとしての「群知能」ではなく、局所相互作用が集団パターンを生む「自己組織化」の可視化です。1ファイル内にHTML・CSS・JavaScriptを含み、実行に通信は不要です。動きが苦手な方は一時停止してください。非表示タブでは計算を休止します。
モデルの出典
Martin Treiber, “The Intelligent-Driver Model and its Variants”. モデル式・数値積分法の解説。リンクを開くときだけインターネット接続が必要です。
IDMの解説を読む ↗