渋滞のサイエンスとその解消法
藤井涼平
2016 年 6 月 3 日
1 渋滞と物理
車の流れは1次元上を動く多体粒子系だと考えら れる. しかし,車の間に働く相互作用はニュートン 力学とは異なっている. 例えば,走っている車は前 の車の影響は受けるが,後ろの車からの影響は受け ない. すなわち,車の運動には作用反作用の法則を 破る非対称性がある. このような系は,連成振動の ような系とは全く異なる不安定性を示す.
高速道路では,車の密度が1kmあたり25台以上 になると渋滞相に移行する. これは相転移として扱 える. あるいは,渋滞を流れの上流に向かう衝撃波 として扱うこともできる.
2 渋滞の定義
図1 東名高速道路における基本図
図1は,東名高速道路における流量(ある地点を 一定時間に通過する車の数)を横軸に,車の密度を 縦軸にとった図で,基本図と呼ばれている. この図 から,ある一定密度(臨界密度)までは流量が増加 し,それ以上では逆に流量が減少することがわかる.
図2 基本図を模式的に表したもの
図2は,基本図のもつ性質を模式的に表したもの である. 密度が増えるに従って流量が増していく状 態を非渋滞,減っていく状態を渋滞と定義する.
3 渋滞のセルオートマトンモデル
先述の通り,渋滞を相転移や流体としてとらえる ことも可能だが, ここでは最も簡単な1次元セル オートマトンモデルを紹介する. このモデルでは, 車を■で表し,空いた道路を□で表す. 自分の前が 空いていれば右に1マス進み,開いていなければ動 かないというルールを課し,すべての車を一斉に動 かす.道路の端と端はつなげる(周期境界条件). 3.1 セルオートマトンモデルの基本図
道路の長さをL,車の台数をMとすると,密度は M/Lとなる. 速度u(t) は,ある時刻tに動いた車 の数をK(t)とすると, u(t) K(t)/Mとなる. 一 定時間が経過すると,多くの場合K(t)は一定値に
1
収束する.以上より,流量はQ ρu K/Lとなる.
ρ ≤ 1/2であれば,いつかはすべての車が動ける
ようになる. 従って, u 1, Q ρとなる. ρ > 1/2 であれば,動ける車の数は空いている道路の数に等 しいから, K L − M, Q 1 − ρとなる.
以上をまとめると,
Q
{ ρ (ρ ≤ 1/2) 1 −ρ (ρ > 1/2)
となる. 図3は,セルオートマトンモデルの基本図
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5
0 0.2 0.4 0.6 0.8 1
流量
密度
図3 セルオートマトンモデルの基本図
をプロットしたものである. 自由相,渋滞相が存在 し,定性的な交通流の性質を再現している.
3.2 渋滞を解消するには
■渋滞に進入するとき 蟻の行列には渋滞相が存在 しない.この原因は不明だが,観察から,蟻は混んで くるとお互い詰めなくなることがわかった. これを ヒントに,渋滞を解消する方法を考えてみる.
図4は,渋滞の前に車間を空けなかった場合の図 である(赤:注目する車. 緑:渋滞.). 赤い車が渋 滞に巻き込まれ, 4ステップ後に抜けていることが わかる1).
一方,車間を空けて渋滞に近づいたのが図5であ る. 同じ車の台数にもかかわらず,より早く渋滞が 解消され,赤い車も渋滞に巻き込まれていないこと がわかる. すなわち,渋滞に近づくときには,減速し
1)※注:図 4 は, 元記事と車の配置を少し変えている. 元記 事では車の数のほうが空いている道路よりも多く, 渋滞を 免れることはできない. これはアンフェアだと思うので, 1 台車の数を減らした.
■□■□■□■□■□■□■□■□■■■□□□■□
□■□■□■□■□■□■□■□■■■□■□□□■
■□■□■□■□■□■□■□■■■□■□■□□□
□■□■□■□■□■□■□■■■□■□■□■□□
□□■□■□■□■□■□■■■□■□■□■□■□
□□□■□■□■□■□■■■□■□■□■□■□■
■□□□■□■□■□■■■□■□■□■□■□■□
□■□□□■□■□■■■□■□■□■□■□■□■
■□■□□□■□■■■□■□■□■□■□■□■□
□■□■□□□■■■□■□■□■□■□■□■□■
■□■□■□□■■□■□■□■□■□■□■□■□
□■□■□■□■□■□■□■□■□■□■□■□■ 図4 車間距離を空けない場合.
■□■□■□■□■□■□■□□□■■■□■□■□
□■□■□■□■□■□■□■□□■■□■□■□■
■□■□■□■□■□■□■□■□■□■□■□■□ 図5 車間距離を空けた場合
て渋滞との距離をとれば渋滞に巻き込まれるのを防 げることがわかった.
✓補足 ✏
図4を見ればわかるように,渋滞は進行方向の 逆に,空いた道路は進行方向に進む. これらが 衝突することで,対消滅(=渋滞が解消)する. 車間をとると,自分の前に空いた道路を作るこ とができる.これが自分の前の渋滞にぶつかる ことで,渋滞を削ることができる.
車間を取るために減速すると,自分の後ろに渋 滞ができることを心配するかもしれない.しか し,渋滞は進行方向の逆に進むから,仮に渋滞 ができたとしても自分には影響しない. ただ し,後続車のことを考えれば,少々の減速で渋 滞が発生しない段階で車間を広げておくほう がよい.
✒ ✑
■渋滞から抜けるとき 渋滞を抜けるときも注意が 必要である. 図4を見れば,渋滞の前に車間があっ ても渋滞の解消にはつながらないことがある. すな わち,一旦渋滞に巻き込まれてしまった場合,渋滞か
2
らは速やかに抜けるほうが望ましい. 渋滞に巻き込 まれたことで前方に注意を払わず,前の車にすぐに 追従しなくなってしまうと,いつまでたっても渋滞 が解消しない.
これをセルオートマトンで実践したのが図6, 7で ある.
■■■■■■■□□□□□□□□□□□□□□□□□□
■■■■■■□■□□□□□□□□□□□□□□□□□
■■■■■■□□■□□□□□□□□□□□□□□□□
■■■■■□■□□■□□□□□□□□□□□□□□□
■■■■■□□■□□■□□□□□□□□□□□□□□
■■■■□■□□■□□■□□□□□□□□□□□□□
■■■■□□■□□■□□■□□□□□□□□□□□□
■■■□■□□■□□■□□■□□□□□□□□□□□
■■■□□■□□■□□■□□■□□□□□□□□□□
■■□■□□■□□■□□■□□■□□□□□□□□□
■■□□■□□■□□■□□■□□■□□□□□□□□
■□■□□■□□■□□■□□■□□■□□□□□□□ 図6 渋滞からの脱出に遅れた場合
■■■■■■■□□□□□□□□□□□□□□□□□□
■■■■■■□■□□□□□□□□□□□□□□□□□
■■■■■□■□■□□□□□□□□□□□□□□□□
■■■■□■□■□■□□□□□□□□□□□□□□□
■■■□■□■□■□■□□□□□□□□□□□□□□
■■□■□■□■□■□■□□□□□□□□□□□□□
■□■□■□■□■□■□■□□□□□□□□□□□□ 図7 渋滞から迅速に脱出した場合
4 まとめ
セルオートマトンにより検証から,渋滞にはゆっ くりと車間を広げながら近づき(スローイン),渋 滞に巻き込まれたら前方に注意を払い続け,素早く 抜ける(ファーストアウト)ことで渋滞が減らせる ことがわかった. 以上のすべてのルールを設定した オートマトンが図9である.
このルールでは,渋滞までの距離が2未満になる と,後ろに車間距離がある場合はその場に停止する.
■□■□□□■□■□■■□□■□■■■□□□■□
□■□■□□□■□■■□■□□■■■□■□□□■
■□■□■□□□■■□■□■□■■□■□■□□□
□■□■□■□□■□■□■□■■□■□■□■□□
□□■□■□■□□■□■□■■□■□■□■□■□
□□□■□■□■□□■□■■□■□■□■□■□■
■□□□■□■□■□□■■□■□■□■□■□■□
□■□□□■□■□■□■□■□■□■□■□■□■ 図8 最初に紹介したルール(ファーストアウト のみ)に従った場合
■□■□□□■□■□■■□□■□■■■□□□■□
□■□■□□■□□■■□■□■□■■□■□□□■
■□■□■□■□□■□■□■□■■□■□■□□□
□■□■□■□■□□■□■□■■□■□■□■□□
□□■□■□■□■□■□□■■□■□■□■□■□
□□□■□■□■□■□■□■□■□■□■□■□■ 図9 スローイン・ファーストアウトに従った場合
最初に紹介した,単純に1マス進む場合(ファース トアウトのみ)に比べてより早く渋滞が解消してい る2).
もっと複雑に制御すれば,さらに早く解消できる 気がする.
5 感想
渋滞解消の新常識に期待したのだが,読み進めて みると当たり前の結論になっていたので少しがっか り. 元記事にも著者の個人的な体験をもとに書かれ た部分がいくつかあり,信憑性に‘?’がつく部分も あった.
セルオートマトンのプログラムを書くのはおもし ろかった.
2)スローインもファーストアウトもしない条件では, 永久に 渋滞が解消されなかった.
3
ソースコード
✓ ✏
このコロキウムの準備の際に作ったセルオー トマトンのプログラムとそのソースコードを, 以下で公開しています. このコロキウムでは使 用していない機能もあり,簡単な改造でさらに 複雑な移動規則を追加することも可能です. 興 味がある人はどうぞ.
https://sites.google.com/site/ 2016kyotop3/ex1
✒ ✑
6 例
●雛形
1 manager.addRule(new Car.Rule() {
2 @Override
3 public void onMove(
4 Car car,
5 @Nullable Road left,
6 @Nullable Road right,
7 int forwardFreeLength,
8 int backFreeLength,
9 int nextJamLength,
10 boolean wasSecondOfJam) {
11 //Define your rules here.
12 super.onMove(
13 car,
14 left,
15 right,
16 forwardFreeLength,
17 backFreeLength,
18 nextJamLength,
19 wasSecondOfJam);
20 }
21 });
●ファーストイン・ファーストアウト(最初の ルール). //Define your rules here. の部分に以 下を挿入する.
1 car.move(1);
なお,manager.addRule(Car.Rule rule);を呼び出 さないと,デフォルトでこの動作が選択されます.
●スローイン・ファーストアウト.
1 if(nextJamLength < 2 &&
2 backFreeLength > 1){
3 //Don’t move.
4 }else{
5 car.move(1);
6 }
●ファーストイン・スローアウト
1 if(wasSecondOfJam){
2 //Don’t move.
3 }else{
4 car.move(1);
5 }
さらに複雑にしたければ,複数車線生成して,適宜 車線変更することもできる.
参考文献
[1] 日本物理学会誌2016 / VOL.71 / NO.3 / p170-
173 /渋滞のサイエンスとその解消法 西成活裕
4