dialアルゴリズムの実装 -python 基礎編...基礎ゼミ 第 15回...

15
基礎ゼミ 15Dialアルゴリズムの実装 -Python 基礎編- 土木学会(1998) 交通ネットワークの均衡分析 9pp.167-171 Dial, R.B. (1971) A Probabilistic Traffic Assignment Algorithm Which Obviates Path Enumeration. Transport Research vol.5 pp.83-111 朝倉研 修士2愛甲聡美 2017/7/11

Upload: others

Post on 31-Mar-2020

27 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Dialアルゴリズムの実装 -Python 基礎編...基礎ゼミ 第 15回 Dialアルゴリズムの実装 -Python 基礎編- • 土木学会(1998) 交通ネットワークの均衡分析

基礎ゼミ 第15回

Dialアルゴリズムの実装 -Python 基礎編-

• 土木学会(1998) 交通ネットワークの均衡分析 第9章 pp.167-171

• Dial, R.B. (1971) A Probabilistic Traffic Assignment Algorithm Which Obviates Path Enumeration. Transport Research vol.5 pp.83-111

朝倉研 修士2年 愛甲聡美

2017/7/11

Page 2: Dialアルゴリズムの実装 -Python 基礎編...基礎ゼミ 第 15回 Dialアルゴリズムの実装 -Python 基礎編- • 土木学会(1998) 交通ネットワークの均衡分析

はじめに 今回の目標: Dialのアルゴリズムを理解し、 Pythonを用いて、ネットワークとOD交通量の入力で 交通量配分を求めるプログラムを書けるようになる

目次

• Dialアルゴリズムとは • プログラムの流れ • コーディング

2

Page 3: Dialアルゴリズムの実装 -Python 基礎編...基礎ゼミ 第 15回 Dialアルゴリズムの実装 -Python 基礎編- • 土木学会(1998) 交通ネットワークの均衡分析

Dialアルゴリズムとは • 確率的利用者均衡配分(SUE)の解法のひとつ

3

•OD交通量所与&固定 •最短経路にすべて配分

需要固定型利用者均衡配分 UE/FD: User Equilibrium assignment with fixed Demand

•OD交通量が、ネットワークの交通サービスによって変動

需要均衡型利用者均衡配分 UE/VD: User Equilibrium assignment with Variable Demand

•利用者の経路選択の多様性・不確実性を表現 •どの利用者も経路変更によって旅行時間の短縮を見込めないと思われるときの均衡

確率的利用者均衡配分 SUE: Stochastic User Equilibrium

•出発した車両が到着するまで常にWardropの第一原則が成立

動的利用者均衡配分 DUE: Dynamic User Equilibrium assignment

•時間帯別に利用者均衡が成立 •前時間帯の残留交通量も加味

時間帯別均衡配分 TUE: Time-of-day User Equilibrium assignment

Page 4: Dialアルゴリズムの実装 -Python 基礎編...基礎ゼミ 第 15回 Dialアルゴリズムの実装 -Python 基礎編- • 土木学会(1998) 交通ネットワークの均衡分析

Dialアルゴリズムとは 確率的利用者均衡配分(SUE)の解法のひとつ

4

確率的利用者均衡配分

• Dialアルゴリズム :経路を限定

• Markov連鎖利用

:経路を限定しない

ロジット型確率配分

• モンテカルロ シミュレーションなど

プロビット型確率配分

交通量均衡配分

需要固定型 利用者均衡配分

需要均衡型 利用者均衡配分

動的 利用者均衡配分

時間帯別 利用者均衡配分

Page 5: Dialアルゴリズムの実装 -Python 基礎編...基礎ゼミ 第 15回 Dialアルゴリズムの実装 -Python 基礎編- • 土木学会(1998) 交通ネットワークの均衡分析

Dialアルゴリズムとは 確率的利用者均衡配分(SUE)の解法のひとつ

• 経路を列挙せずに、ロジット型確率配分計算を実施 • ある基準を満たす「妥当な」経路のみを考慮 • 効率的にロジット型確率配分

ロジット型確率配分 ? • 妥当な経路を選択肢集合としたときの、 ロジット型配分モデルと同じ交通量パターンを生成する

5

Page 6: Dialアルゴリズムの実装 -Python 基礎編...基礎ゼミ 第 15回 Dialアルゴリズムの実装 -Python 基礎編- • 土木学会(1998) 交通ネットワークの均衡分析

Dialアルゴリズムとは Step 0-A(準備) • 起点r から他の全ノードへの最小交通費用𝑐𝑐 𝑖𝑖 を計算

𝑐𝑐 𝑖𝑖 ← 𝐶𝐶 min [𝑟𝑟 → 𝑖𝑖]

Step 0-B(準備) • 全リンクについて、リンク尤度𝐿𝐿 𝑖𝑖 → 𝑗𝑗 を計算 (𝜃𝜃 > 0)

𝐿𝐿[𝑖𝑖 → 𝑗𝑗] = �exp 𝜃𝜃 𝑐𝑐 𝑗𝑗 − 𝑐𝑐 𝑖𝑖 − 𝑡𝑡𝑖𝑖𝑖𝑖 𝑐𝑐 𝑖𝑖 < 𝑐𝑐(𝑗𝑗)0 𝑜𝑜𝑡𝑡𝑜𝑜𝑜𝑟𝑟𝑜𝑜𝑖𝑖𝑜𝑜𝑜𝑜

6

𝜃𝜃:定数。0に近いほど全経路へのランダム配分に、 大きいほど最短経路へのAll-or-nothing配分に。

Page 7: Dialアルゴリズムの実装 -Python 基礎編...基礎ゼミ 第 15回 Dialアルゴリズムの実装 -Python 基礎編- • 土木学会(1998) 交通ネットワークの均衡分析

補足 リンク尤度の𝜃𝜃について(Dial(1971)より)

• 縦軸: 経路の選択確率 • 横軸

最短経路との差

𝜃𝜃が0に近い →最短経路も遠回りも 選択確率同じ 𝜃𝜃が大きい →遠回りの選択確率 低下

7

𝜃𝜃:小

𝜃𝜃:大

Page 8: Dialアルゴリズムの実装 -Python 基礎編...基礎ゼミ 第 15回 Dialアルゴリズムの実装 -Python 基礎編- • 土木学会(1998) 交通ネットワークの均衡分析

Dialアルゴリズムとは Step 1(前進処理) • 起点𝑟𝑟からの𝑐𝑐(𝑖𝑖)の値の昇順(=𝑟𝑟から近い順)にノードを考え、 各ノード𝑖𝑖から流出するリンクのリンク・ウェイトを計算

𝑊𝑊[𝑖𝑖 → 𝑗𝑗] = �𝐿𝐿 𝑖𝑖 → 𝑗𝑗 𝑓𝑓𝑜𝑜𝑟𝑟 𝑖𝑖 = 𝑟𝑟

𝐿𝐿 𝑖𝑖 → 𝑗𝑗 � 𝑊𝑊[𝑚𝑚 → 𝑖𝑖]𝑚𝑚∈𝐼𝐼𝑖𝑖

𝑜𝑜𝑡𝑡𝑜𝑜𝑜𝑟𝑟𝑜𝑜𝑖𝑖𝑜𝑜𝑜𝑜

8

𝐼𝐼𝑖𝑖:ノード𝑖𝑖へ流入するリンクの起点集合

Page 9: Dialアルゴリズムの実装 -Python 基礎編...基礎ゼミ 第 15回 Dialアルゴリズムの実装 -Python 基礎編- • 土木学会(1998) 交通ネットワークの均衡分析

Dialアルゴリズムとは Step 2(後退処理) • 𝑐𝑐(𝑖𝑖)の値の降順(=𝑟𝑟から遠い順)にノードを考え、 各ノード𝑗𝑗に流入するリンク交通量𝑥𝑥𝑖𝑖𝑖𝑖を次式により計算

𝑥𝑥𝑖𝑖𝑖𝑖 = (𝑞𝑞𝑟𝑟𝑖𝑖 + � 𝑥𝑥𝑖𝑖𝑚𝑚𝑚𝑚∈𝑂𝑂𝑗𝑗

)𝑊𝑊[𝑖𝑖 → 𝑗𝑗]

∑ 𝑊𝑊[𝑚𝑚 → 𝑗𝑗]𝑚𝑚∈𝐼𝐼𝑖𝑖

9

𝑂𝑂𝑗𝑗:ノード𝑗𝑗から流出するリンクの終点集合

Page 10: Dialアルゴリズムの実装 -Python 基礎編...基礎ゼミ 第 15回 Dialアルゴリズムの実装 -Python 基礎編- • 土木学会(1998) 交通ネットワークの均衡分析

プログラムの流れ

10

Step 0-A 最小旅行費用を計算

Step 0-B 全リンクの尤度を計算

Step 1 各リンクの遷移確率を計算

ネットワーク input

ODペアとOD点間交通量 input

Step 2 各リンクの交通量配分を決定 output

𝑐𝑐 𝑖𝑖

𝐿𝐿 𝑖𝑖 → 𝑗𝑗

𝑊𝑊[𝑖𝑖 → 𝑗𝑗]

𝑥𝑥𝑖𝑖𝑖𝑖

Page 11: Dialアルゴリズムの実装 -Python 基礎編...基礎ゼミ 第 15回 Dialアルゴリズムの実装 -Python 基礎編- • 土木学会(1998) 交通ネットワークの均衡分析

コーディング

11

0

2

1 3

4

2

3

4 2

1 4

1

Page 12: Dialアルゴリズムの実装 -Python 基礎編...基礎ゼミ 第 15回 Dialアルゴリズムの実装 -Python 基礎編- • 土木学会(1998) 交通ネットワークの均衡分析

コーディング

12

𝑐𝑐 1 =2

𝑐𝑐 0 =0 2

1 3 𝑐𝑐 3 =3

𝑐𝑐 4 =4 𝑐𝑐 2 =1

0 4

Page 13: Dialアルゴリズムの実装 -Python 基礎編...基礎ゼミ 第 15回 Dialアルゴリズムの実装 -Python 基礎編- • 土木学会(1998) 交通ネットワークの均衡分析

コーディング

13

2

1 3

𝐿𝐿𝑊𝑊01=1

𝐿𝐿𝐿𝐿13=0.14

𝐿𝐿𝐿𝐿03=0.37

𝐿𝐿𝐿𝐿23=1

𝐿𝐿𝐿𝐿02=1 𝐿𝐿𝐿𝐿24=0.37

𝐿𝐿𝐿𝐿34=1

0 4

𝐿𝐿[𝑖𝑖 → 𝑗𝑗]

= �exp 𝜃𝜃 𝑐𝑐 𝑗𝑗 − 𝑐𝑐 𝑖𝑖 − 𝑡𝑡𝑖𝑖𝑖𝑖 𝑐𝑐 𝑖𝑖 < 𝑐𝑐(𝑗𝑗)0 𝑜𝑜𝑡𝑡𝑜𝑜𝑜𝑟𝑟𝑜𝑜𝑖𝑖𝑜𝑜𝑜𝑜

Page 14: Dialアルゴリズムの実装 -Python 基礎編...基礎ゼミ 第 15回 Dialアルゴリズムの実装 -Python 基礎編- • 土木学会(1998) 交通ネットワークの均衡分析

コーディング

14

2

1 3

𝐿𝐿𝑊𝑊01=1

𝐿𝐿𝑊𝑊13=0.14

𝐿𝐿𝑊𝑊03=0.37

𝐿𝐿𝑊𝑊23=1

𝐿𝐿𝑊𝑊02=1 𝐿𝐿𝑊𝑊24=0.37

𝐿𝐿𝑊𝑊34=1.5

0 4

𝑊𝑊[𝑖𝑖 → 𝑗𝑗]

= �𝐿𝐿 𝑖𝑖 → 𝑗𝑗 𝑓𝑓𝑜𝑜𝑟𝑟 𝑖𝑖 = 𝑟𝑟

𝐿𝐿 𝑖𝑖 → 𝑗𝑗 � 𝑊𝑊[𝑚𝑚 → 𝑖𝑖]𝑚𝑚∈𝐼𝐼𝑖𝑖

𝑜𝑜𝑡𝑡𝑜𝑜𝑜𝑟𝑟𝑜𝑜𝑖𝑖𝑜𝑜𝑜𝑜

Page 15: Dialアルゴリズムの実装 -Python 基礎編...基礎ゼミ 第 15回 Dialアルゴリズムの実装 -Python 基礎編- • 土木学会(1998) 交通ネットワークの均衡分析

コーディング

15

0

2

1 3

4

72

72

197 534

731 197

803

𝑥𝑥𝑖𝑖𝑖𝑖 = (𝑞𝑞𝑟𝑟𝑖𝑖 + � 𝑥𝑥𝑖𝑖𝑚𝑚𝑚𝑚∈𝑂𝑂𝑗𝑗

)𝑊𝑊[𝑖𝑖 → 𝑗𝑗]

∑ 𝑊𝑊[𝑚𝑚 → 𝑗𝑗]𝑚𝑚∈𝐼𝐼𝑖𝑖