Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

渋滞学セルオートマトンモデル実装

このプロジェクトは Claude Code のみを用いて実装されました。コードの設計、実装、ドキュメント作成の全てが AI アシスタントとの対話を通じて行われています。

日本応用数理学会の論文「渋滞学のセルオートマトンモデル」(柳澤大地・西成活裕)に基づく教育用セルオートマトンシミュレーター。

📚 実装モデル詳細解説

1. Elementary CA Rule 184 - 基本交通流モデル

🚗 モデルの基本原理

Rule 184は最もシンプルな交通流モデルです。道路を1次元の格子に分割し、各セルに車が1台まで入れるという制約があります。

基本ルール:

  • 車は前のセルが空いていれば必ず1つ前に進む
  • 前のセルに車がいれば停止する
  • 全ての車が同時に動く(同期更新)

📊 パラメータの意味

  • 密度 (ρ): 道路に占める車の割合
    • 0.1 = 道路の10%に車がいる(スカスカ)
    • 0.5 = 道路の50%に車がいる(混雑)
    • 0.8 = 道路の80%に車がいる(渋滞)

🔍 観察できる現象

  • 密度0.5で最大流量: 理論的に最も効率的な流れ
  • 渋滞クラスターの後方移動: 渋滞の塊が時間と共に後ろに移動
  • 基本図関係: 密度と流量の関係が $J = \rho(1-\rho)$ に従う

2. ASEP (非対称単純排他過程) - 確率的交通流モデル

🎲 モデルの基本原理

ASEPはRule 184に確率的要素を加えたモデルです。開放系では道路の両端から車が流入・流出します。

基本ルール:

  • 車は確率pで前進を試みる
  • 左端から確率αで新しい車が流入
  • 右端から確率βで車が流出
  • 車同士は排他的(1つのセルに1台のみ)

📊 パラメータの意味

  • 流入確率 α: 道路への車の入り方
    • α = 0.1: 10回に1回車が入る(少ない流入)
    • α = 0.9: 10回に9回車が入る(多い流入)
  • 流出確率 β: 道路からの車の出方
    • β = 0.1: なかなか出られない(出口が狭い)
    • β = 0.9: 簡単に出られる(出口が広い)
  • 移動確率 p: 車の動きやすさ
    • p = 1.0: 前が空いていれば必ず前進
    • p = 0.5: 前が空いていても50%の確率でしか前進しない

🔍 3つの相(フェーズ)

  1. 自由相 (α < β): 流入が少なく、車はスムーズに流れる
  2. 渋滞相 (α > β): 流入が多く、道路が車で満杯になる
  3. 最大流量相 (α ≈ β): 流入と流出がバランスし、最大の流量を実現

3. スロースタートルール - 慣性効果モデル

🐌 モデルの基本原理

実際の車は一度停止すると、前が空いてもすぐには動きません。この「慣性効果」を表現したモデルです。

基本ルール:

  • 車が停止すると「休み状態」になる
  • 休み状態の車は、前が空いていても1ステップ休む
  • 休み後は通常通り動ける

📊 パラメータの意味

  • 密度: 初期の車の密度
    • 高密度(0.6以上)では小さな擾乱から大きな渋滞が成長

🔍 観察できる現象

  • メタ安定状態: 高密度でも一時的に流れが良い状態
  • 渋滞の成長: 小さな停滞から大きな渋滞クラスターが発生
  • 灰色の車: 休み状態の車(スロースタート中)

4. アリのフェロモンモデル - 集合知による最適化

🐜 モデルの基本原理

アリが道にフェロモン(匂い物質)を残し、他のアリがその道を優先的に使うことで、効率的な経路が形成されるモデルです。

基本ルール:

  • アリが通った場所にフェロモンを残す
  • フェロモンがある場所は移動確率が高くなる
  • フェロモンは時間と共に蒸発する

📊 パラメータの意味

  • 密度: アリの数
    • 密度が高いほど多くのフェロモン道が形成される
  • 蒸発率: フェロモンの消失速度
    • 0.01: ゆっくり消える(道が長持ち)
    • 0.1: 早く消える(道がすぐ消える)

🔍 観察できる現象

  • フェロモン道の形成: 緑色の道ができる
  • 密度0.5を超えても流量増加: 通常のモデルと異なる特性
  • 集合知の創発: 個々のアリは賢くないが、全体で効率的な流れを作る

5. 二次元歩行者流動モデル - 群集避難シミュレーション

🚶 モデルの基本原理

2次元空間での歩行者の動きをシミュレーション。出口に向かって移動しますが、他の歩行者との衝突を避けます。

基本ルール:

  • 歩行者は出口方向を優先して移動
  • 他の歩行者がいる場所には移動できない
  • 8方向(上下左右斜め)に移動可能
  • 出口に到達すると退去

📊 パラメータの意味

  • 初期密度: 空間内の歩行者の混雑度
    • 0.1: 余裕のある状態
    • 0.5: 非常に混雑した状態

🔍 観察できる現象

  • 出口付近のボトルネック: 出口近くで詰まりが発生
  • 避け合い行動: 歩行者同士が自然に避け合う
  • 密度と避難時間の関係: 密度が高すぎると避難効率が下がる
  • レーン形成: 自然に歩行者の流れが整列する

🚀 セットアップ

必要要件

  • モダンなWebブラウザ(Chrome, Firefox, Safari, Edge)
  • ローカルサーバー(Python、Node.js、またはその他のHTTPサーバー)

インストール手順

# プロジェクトをクローンまたはダウンロード
git clone <repository-url>
cd jamology-ca-models

# ローカルサーバーを起動(以下のいずれかの方法)

# 方法1: Python
python3 -m http.server 8000

# 方法2: Node.js(npx使用)
npx http-server

# 方法3: VS Code Live Server拡張機能を使用

# ブラウザでアクセス
# http://localhost:8000 または適切なポート番号

ディレクトリ構成

jamology-ca-models/
├── index.html              # メインHTML
├── README.md               # プロジェクト説明
├── css/
│   └── style.css           # スタイルシート
├── js/
│   ├── main.js             # メイン制御
│   ├── models/             # モデル実装
│   │   ├── Rule184.js      # Elementary CA Rule 184
│   │   ├── ASEP.js         # 非対称単純排他過程
│   │   ├── SlowToStart.js  # スロースタートルール
│   │   ├── AntModel.js     # アリのフェロモンモデル
│   │   ├── PedestrianModel.js # 二次元歩行者流動モデル
│   │   └── FundamentalDiagram.js # 基本図実験
│   └── utils/              # ユーティリティ(現在は空)

🎯 使用方法と学習ガイド

🖱️ 基本操作

  1. 開始: シミュレーションを開始します
  2. 停止: 一時停止します(再開も可能)
  3. リセット: 初期状態に戻します(パラメータは保持)

🧪 内蔵実験機能

このプロジェクトには以下の実験機能がブラウザ内で実行できます:

  1. 基本図作成実験: 各モデルの密度-流量関係を自動測定・可視化
  2. ASEP相図探索: 流入・流出パラメータ空間での相境界を特定
  3. 蒸発率最適化: アリモデルでの最適蒸発率を探索
  4. リアルタイムパラメータ調整: 各モデルでパラメータを動的に変更可能

📋 推奨学習順序

Step 1: Rule 184で基本を理解

  1. 密度を0.1に設定して「開始」
    • 車がスムーズに流れる様子を観察
  2. 密度を0.5に変更して比較
    • 流量が最大になることを確認
  3. 密度を0.8に変更
    • 渋滞クラスターの後方移動を観察

💡 学習ポイント: 密度と流量の関係、渋滞の物理的性質

Step 2: ASEPで確率効果を学習

  1. α=0.3, β=0.7, p=1.0で開始
    • 「自由相」の表示を確認
  2. α=0.7, β=0.3に変更
    • 「渋滞相」への変化を観察
  3. α=0.5, β=0.5に調整
    • 「最大流量相」を体験

💡 学習ポイント: 相転移現象、確率が系に与える影響

Step 3: スロースタートで現実効果を体験

  1. 密度0.4で開始
    • 安定した流れを確認
  2. 密度0.7に変更
    • メタ安定状態から渋滞成長を観察
  3. 灰色の車(休み状態)に注目

💡 学習ポイント: 現実の慣性効果、メタ安定性

Step 4: アリモデルで集合知を発見

  1. 密度0.3、蒸発率0.05で開始
    • フェロモン道の形成過程を観察
  2. 蒸発率を0.01に下げる
    • 道の持続性変化を確認
  3. 密度を0.6まで上げる
    • 通常とは逆の密度効果を観察

💡 学習ポイント: 自己組織化、集合知の創発

Step 5: 歩行者モデルで避難を考察

  1. 密度0.2で開始
    • スムーズな避難を観察
  2. 密度0.4に変更
    • 出口付近の混雑発生を確認
  3. 避け合い行動とレーン形成に注目

💡 学習ポイント: 2次元効果、現実の避難計画への応用

📊 データ読み取りのコツ

時空図の見方

  • 縦軸:時間(上が過去、下が現在)
  • 横軸:空間(道路の位置)
  • 黒い点:車やアリ、歩行者
  • 線の傾き:移動速度
  • 垂直線:停止状態
  • 斜め線:移動状態

統計値の解釈

  • 流量: 単位時間あたりの通過車両数
  • 密度: 道路の混雑度
  • 速度: 平均移動速度
  • : ASEPの動的状態

⚠️ よくある観察ミス

  1. 初期状態の影響: リセットせずにパラメータ変更 → 必ずリセットしてから観察
  2. 過渡状態の誤解: 開始直後の不安定な状態 → 十分時間をおいてから判断
  3. 確率的効果の見落とし: 1回の実行だけで判断 → 複数回実行して傾向を把握

📊 理論的背景(上級者向け)

基本図 (Fundamental Diagram)

密度 $\rho$ と流量 $J$ の関係式:

Rule 184

$$J = \rho(1-\rho) \quad (\rho \leq 0.5 \text{の場合})$$ $$J = (1-\rho)\rho \quad (\rho > 0.5 \text{の場合})$$

式の意味: この式は「車の密度」と「流量(単位時間に通過する車の台数)」の関係を表します。$\rho$ は車がいる確率、$(1-\rho)$ は空きスペースがある確率を表し、両者の積が実際の流量になります。

  • $\rho = 0.5$ で最大流量 $J_{\max} = 0.25$
  • 対称な山型の関係

ASEP開放系

相に依存した流量公式:

  • 自由相 ($\alpha &lt; \alpha_c$): $J = \alpha$
    意味: 道路への流入が制限要因となる状態
  • 渋滞相 ($\beta &lt; \beta_c$): $J = \beta$
    意味: 道路からの流出が制限要因となる状態
  • 最大流量相: $J = p/4$
    意味: 道路内部の移動確率が制限要因となる状態

境界条件: $$\alpha_c = \frac{\beta p}{1+p-\beta}$$ $$\beta_c = \frac{\alpha p}{1+p-\alpha}$$

式の意味: これらは「相転移」が起こる臨界値を表します。流入率と流出率のバランスによって、システムが異なる動作モードに切り替わる境界を数学的に定義しています。

📐 数学的背景

セルオートマトンの一般形

$$x_i(t+1) = f(x_{i-r}(t), \ldots, x_{i+r}(t))$$

式の意味: この式はセルオートマトンの基本原理を表しています。「次の時刻の状態」が「現在の周辺状態」によって決まることを数学的に表現したものです。

ここで:

  • $x_i(t)$: 時刻 $t$ の位置 $i$ の状態
  • $r$: 相互作用範囲
  • $f$: 更新関数

平均場理論

Rule 184の場合: $$\frac{\partial \rho}{\partial t} + \frac{\partial J}{\partial x} = 0 \quad \text{(保存則)}$$ 意味: 車の総数が変わらないという基本的な物理法則を表します。

$$J = \rho(1-\rho) \quad \text{(構成方程式)}$$ 意味: 密度と流量の関係式で、交通流の基本特性を表現しています。

これより Burgers方程式: $$\frac{\partial \rho}{\partial t} + \frac{\partial}{\partial x}[\rho(1-\rho)] = 0$$ 意味: 交通流を連続体として扱った偏微分方程式で、渋滞の伝播を記述します。

🧮 計算例

例1: Rule 184の最適密度

流量 $J = \rho(1-\rho)$ を最大化: $$\frac{dJ}{d\rho} = 1-2\rho = 0$$ 意味: 流量を最大にする密度を求めるため、流量を密度で微分して0とおいています。

$$\therefore \rho = 0.5, \quad J_{\max} = 0.25$$ 結果: 密度50%の時に流量が最大になることを示しています。

例2: ASEP相境界

$\alpha = \beta = 0.5$, $p = 1.0$ の場合: $$\alpha_c = \frac{0.5 \times 1}{1+1-0.5} = \frac{1}{3}$$ $$\beta_c = \frac{0.5 \times 1}{1+1-0.5} = \frac{1}{3}$$ 計算の意味: 具体的なパラメータ値での相転移境界を計算しています。

$$\therefore \text{最大流量相} \quad (\alpha &gt; 1/3, \beta &gt; 1/3)$$ 結果: 流入率・流出率がともに1/3を超えると最大流量相になることを示しています。

🔬 実験提案

1. 基本特性の確認

  • 各モデルの基本図を作成
  • 理論値と実測値の比較

2. パラメータ依存性

  • 密度変化による流量変化
  • 確率パラメータの影響

3. 現象の観察

  • 渋滞クラスターの形成・伝播
  • メタ安定状態の崩壊
  • フェロモン道の形成

4. 応用例の検討

  • 交通流への適用
  • 群集避難計画
  • 生物学的プロセス

📖 参考文献

  • 柳澤大地, 西成活裕「渋滞学のセルオートマトンモデル」日本応用数理学会誌, Vol.22 No.1 (2012)
  • 西成活裕「渋滞学」新潮社 (2006)
  • Schadschneider, A. et al. "Stochastic Transport in Complex Systems" Elsevier (2010)

🤝 貢献

バグ報告、改善提案、新機能の追加など歓迎します。

🏷️ タグ

cellular-automata traffic-flow jamology simulation physics javascript education

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages