---
# System prepended metadata

title: 第六週 Intersection Management
tags: [智慧型汽車導論]

---

# 4 PART

上週 ADAS 跟這週所在的層級是 Application。

下面是這堂課所規劃的四個層級：

- [Part1]Preliminary
- [Part2]Applications
- [Part3]Intelligent Technology
- [Part4]Advanced Topic

更之前提到的 Timing Analysis 和 System Design 則是屬於 Part1 的部分。

Applications 的部分老師似乎都會用 5W1H 來介紹。

# Intersection Management

## 5W1H

- What is Intersection Management？
    - 決定一個路口車子行走的順序
    - 路口其實不侷限於十字路口，特殊的像是合併車道
- Why is Intersection Management？
    - 讓路口更安全，讓交通更絲滑，更有效率
- When does Intersection Management work？
    - 任何時候
- Where does Intersection Management work？
    - Centralized 跟 Distributed 的運作地點不一樣
    - Centralized 會有個中央的 Manager
    - Distributed 則是大家共同協同運作
- Who develops Intersection Management？
    - 基本上是由政府，或政府委託的外包廠商來做
    - 進階的則是由自駕車跟車聯網來達成，但基本上目前尚未成真
- How does Intersection Management work？
    - 就是本週的重頭戲

---

# Modeling

:::info
首先做名詞定義。下面提到的名詞在之後提到的 models 中會個別用到一些。
由於名詞定義大多有圖示，請詳閱老師的講義。
:::

- Tiels / Cells
    - 把道路跟路口畫分成很多小區塊，用以方便定位、管理
    - 劃分的越精細，可以做到更精細的調配，但要付出高複雜度的代價
- Trajectories
    - 車子「預先規劃」的路徑，可以是直行、轉彎、或是圓環上的路
- Collision Zones / Conflict Regions / Conflict Zones
    - Trajectories 的交點
    - 不過車子通常具有體積所以大多會以該交點位於的 Tile 為 Zone
- Phase
    - 一個路口中，車子可以行走的「方向」
    - 例如如果是十字路口，可以「南北向直行或右轉」、「東西向直行或左轉」等等 Phase
    - 上面是左駕

# Controlling Length of Traffic Lights

- Fixed Time Control
    - 紅綠燈以固定的規律在運作
- Coordinated Control
    - 除了固定的規律運作，同時考量到如果是同一個幹道，就讓幹道上的紅綠燈同時綠燈
- Adaptive Control
    - 更進階的做法
    - Design-Time approach
        - 根據路段過往的流量資料，來制定紅綠燈的時間，例如上下班車流不一樣。
    - Real-Time approach
        - 根據即時的資料，例如車聯網或是路面感測器，來制定紅綠燈的時間

## Back-Pressure Method

這是一個最簡單的 Adaptive 做法。

下面是名詞定義：

- $\lambda_{i}$：道路的 index
- $Q_{i}$：道路 $i$ 的 Queue 長度，或者說道路上有多少車
- $P_{i}$：道路 $i$ 的 壓力
    - 目前令 $P_{i}=Q_{i}$，但這就是下調味的地方
- $D_{i,j}：[0,1]$：是否有車正在道路 $i$ 等待，想開往 $j$
- $P_{i,j}$：道路 $i$ 往 $j$ 的壓力差
    - $P_{i,j}=D_{i,j}\max(P_{i}-P_{j},0)$
    - 首先要有車子想開過去才有壓力差
    - 再來是 $i$ 一定要比 $j$ 更有通行壓力

有了上面的名詞，路口處在每個 Time slot 就是要挑選該路口的一種 Phase，使得：

$$
\sum_{i,j}V_{i,j}P_{i,j}
$$

達到最大。

:::warning
影片中有講解例子，也就是弄一個情境然後操作上面的模型。
$V_{i,j}$ 算是一個輔助的參數，他可以有很多用途；最基本的用途是，原本都令 $V_{i,j}=1$，但在某種 Phase 的時候，有些方向是不能通行的，此時就必須讓 $V_{i,j}=0$ 以免 $P_{i,j}$ 有值。
:::

:::info
- Capacity-aware Back-Pressure Control
    - 上面的參數定義並沒有考慮到車道的「容量」，如果加以考量的話就要把 $P_i$ 修改的更複雜，例如車道快滿的話可能壓力就會特別大
- Adaptive Max-Pressure Control
    - 會用某種機率分佈模擬車道的情形，使得 $P_i$ 的計算方法更複雜
:::

---

# Intelligent Intersection Management

:::warning
以下的所有 Approach 都是假設有車聯網並且有自駕功能
:::

## Goals

- 安全
- 交通效率
- 避免 deadlock 跟 starvation
- 溝通以及計算的複雜度要低
    - 因為交通上分秒必爭
- 容易做「添加」
    - 就像 CAN 容易添加新節點一樣
- 最好要有個標準協議 
    - 但是通常還是由政府帶領車廠來弄

# Centralized and Distributed Approaches

架構上都有四個模快：

- Receiver
- Sender
- Motion planning
- Controller

但是 Distributed 因為沒有 Manager，所以會多一個 Decision Making 的模快。

- Centralized：task 的週期以下面五個循環，但 Controller 為持續運作
    - Communication：一開始先由車子跟 Manager 溝通
    - Decision Making：接著由 Manager 做決定
    - Communication：Manager 再將結果傳回車子
    - Motion Planning：車子根據收到的信號決定如何動作
    - Controller：執行新的動作
- Distributed：task 的週期以下面四個循環，但 Controller 為持續運作
    - Communication：一開始先由車子跟外界的車子交換訊息
    - Decision Making：接著由車子自己做決定
    - Motion Planning：車子根據自己做的決定開始動作
    - Controller：執行新的動作

## model 例子

這個是某個組織提出的 Centralized 的 model。

概念上就是在路口處有個 Manager，負責接收來車想通過路口的請求，然後 Manager 經過計算後做出回覆。

車子會有以下四種 Message types：

- REQUEST：向 Manager 請求通過路口，同時會傳大概幾秒之間抵達路口
- CHANGE-REQUEST：修改上一次的 REQUEST，例如將抵達路口的時間延後
- CANCEL：取消通過路口的請求
- DONE：通過路口後傳給 Manager 做確認

>要注意車子沒有說要靠近路口才傳訊息給 Manager。

Manager 會有以下四種 Message types：

- CONFIRM：告訴車子你可以通行，其中包含哪個時間點要在哪個 tile 等等資訊
- REJECT：拒絕車子的兩種 REQUEST ，要車子再等等，想通過的話請再次發出 REQUEST
- ACKNOWLEDGE：回應車子的 DONE 跟 CANCEL
- EMERGENCY-STOP：要所有車子立馬停下來

Manager 可能有以下的 Control Policies

- First Come First Serve
    - 但是要先定義好何謂「先到」，例如檢查路口的第一輛車是誰
- Virtual stop sign
    - 虛擬的 stop sign
- Virtual traffic light
    - 虛擬的 traffic light

:::warning
- 上面的各種 message type 跟無線網路的 Protocols 一樣可以畫出狀態圖，請參見講義
- 由於車聯網依靠無線網路，所以一樣會有 Loss 跟 Delay 的問題，但是在交通中這兩點會更需要密切計算
:::

# Graph-Based Approach

核心上來說，就是將 Intersection Management 問題化為 Cycle-removal 問題。

但是 Graph-Based 不只可以解決 Intersection Management，只要是 Conflict-resolution Problem，例如兩條車要搶同個 tile，都可以轉換為 Cycle-removal 問題。

:::info
下面介紹時是搭配一個 Central Manager，不過 Graph-Based 也可以用在 Distributed 的情境，只要大家有相同處理 Graph 的演算法就好。
:::

## Timing Conflict Graph

此處參考講義的圖，請搭配服用。

在一個路口上，首先決定好 Conflict Zones，也就是上面提到 Trajectories 的交點所佔據的 tiles，不一樣的 tile 精分程度，就會產生不同的 Timing Conflict Graph。

- vertex 定義方式為 $V_{i,j}$，$i$ 是車子的 id，$j$ 是車子正處在的 conflict zone id
- edge 有三種：
    - type 1：根據車子的 trajectories 經過的節點和順序所連成
    - type 2：如果兩台車屬於相同的「路口」，經過了相同的 conflict zone
        - 此時箭頭指向順位低的人，代表順位高的會先走
    - type 3：兩台車屬於不同的「路口」，經過了相同的 conflict zone
        - 就會有箭頭互相指著對方，箭頭一樣是指向順位低的

## Cycle Removal Algorithm

有了上面的 TCG，接著就是用一些 Cycle Removal Algorithm 把 type 3 的 edge 做修剪，來達成想要的目標：

- 可能是最小化最後一台車離開的時間
- 或是最小化車子平均的 delay 時間

演算法修剪完之後，因為去除了環所以可以確保不會有碰撞，但是 deadlock 則要透過一些方法來檢驗。

:::info
Deadlock 請參考講義的圖片。概念上就是有一台車 A 先進到的 conflict zone 1，擋住了另一輛也想進去的車 B，但是 A 想要前往下一個 conflict zone 2 必須要先等到 B 通過 conflict zone 2，可是 B 又會因為 A 卡在 conflict zone 1 過不去 conflict zone 2，產生 Deadlock。
:::

:::warning
這週不去細講如何修剪，這通常伴隨一些 heuristic 的做法；而是介紹如何驗證沒有 deadlock。
:::

## Resource Conflict Graph

TCG 沒有環，不能保證沒有 Deadlock，所以必須根據 TCG 建構出真的有「執行順序」意義的 Resource Conflict Graph。

Resource Conflict Graph 沒有環才確保沒有 Deadlock，有環的話就有 Deadlock。

建構方法如下：

- 對於 TCG 結構中所有的 type 1 箭頭，例如 $V_{i,j}\rightarrow V_{i,j'}$
    - 就將他合併成一個節點 $V_{i,j,j'}$
    - 例如 $V_{i,j}\rightarrow V_{i,j'}\rightarrow V_{i,j''}$，就可以合併成 $V_{i,j,j'}$ 跟 $V_{i,j',j''}$
    - 因為這兩個節點共用了同個節點 $V_{i,j'}$，所以他們之間在 RCG 就有箭頭
    - $V_{i,j,j'}\rightarrow V_{i,j',j''}$
- 如果合併後為 $V_{i,j,j'}$ 跟 $V_{i',k,k'}$
    - 如果在 TCG 中 $V_{i,j}\rightarrow V_{i',k}$ 是 type 2 或 type 3 箭頭
    - 對 $V_{i,j}$ 跟 $V_{i',k}$ 來說只要在 RCG 中有任何是由他們兩構成的 RCG node
    - 就要有 $\rightarrow$ 的箭頭。例如 RCG 中有 $V_{i,j,j'}$ 跟 $V_{i',k,k'}$
    - 那麼就要有 $V_{i,j,j'} \rightarrow V_{i',k,k'}$。代表 $V_{i,j,j'}$ 這個 RCG node 發生的順序是比較優先的。
    - 別忘記箭頭指向順位低的

照上面的邏輯，就可以根據三種 type 的箭頭以及執行順序，構建出帶有實際先後意義的 RCG。

## Petri-Net-Based

這個是專門用來檢查 Deadlock 的酷東西，老師說有興趣可以去看看。

---

# Non-Cooperative Environment

如果現在的環境下車子不會互相合作，而是互相競爭，此時就可以套用 Game Theory。

Game Theory 有以下要件：

- Players：在這裡就是車子內的 Decision Makers，並且假設為理性的 Rational
- Actions：在這裡就是車子的抉擇 Decision
- Objectives：車子想要通過相同的路口或 tile

## Prisoner's dilemma

這是著名的一種遊戲理論。



|                       |     犯人 A 保持沉默     |    犯人 A 供出犯人 B    |
|:---------------------:|:-----------------------:|:-----------------------:|
|  **犯人 B 保持沉默**  |    A,B 都要坐牢 1 年    | A 可以釋放，B 判刑 3 年 |
| **犯人 B 供出犯人 A** | B 可以釋放，A 判刑 3 年 |     兩者都判刑 2 年(Nash Equilibrium)     |


因為兩位犯人都是「理性的」，所以對 A 來說，如果沒有背叛 B，最糟會被判刑 3 年，如果背叛 B，最遭是被判刑 2 年，因此一定會選擇背叛 B，而 B 也同理。

因此最終兩者都會選擇背叛對方，該點又稱做 Nash Equilibrium。

## Two-Vehicle Scenario (without Manager)

如果是以車子的例子來講：

|                | A 直接駛入  | A 停下  |
|:--------------:|:-----------:|:-------:|
| **B 直接駛入** | (-100,-100) | (-4,0)  |
|   **B 停下**   |   (0,-4)    | (-3,-3) |

上面當中的 -4 代表要等待 4 個單位時間，停一次車需要 1 單位時間，等對方通過需要 4 單位時間。

兩者都停下會是 (-3,-3) 是因為兩個人都停一次車所以需要 2 單位時間，並且其中一人先通過需要 4 單位時間，兩個人平均來說就是要 (2 + 4) / 2 = 3 單位時間。

如果A,B具有優先順序，A>B，就會如下：

|                | A 直接駛入  | A 停下  |
|:--------------:|:-----------:|:-------:|
| **B 直接駛入** | (-50,-150) | (-4,0)  |
|   **B 停下**   |   (0,-4)    | (-1,-5) |

:::info
但是人往往是不理性的，上述理性的狀態只有在電腦上才辦的到
:::

## Three-Vehicle Scenario (with Manager)

Three-Vehicle strategy game。

下面是沒有人說謊的例子：

| Vehicle | Actual time | Reported time | Allocated time | Delay |
|:-------:|:-----------:|:-------------:|:--------------:|:-----:|
|    A    |      5      |       5       |       5        |   0   |
|    B    |     10      |      10       |       12       |   2   |
|    C    |     12      |      12       |       19       |   7   |

System Performance 為 2+7=9。

但如果 C 說謊：

| Vehicle | Actual time | Reported time | Allocated time | Delay |
|:-------:|:-----------:|:-------------:|:--------------:|:-----:|
|    A    |      5      |       5       |       5        |   0   |
|    B    |     10      |      10       |       19       |   9   |
|    C    |     12      |       6       |       12       |   0   |

System Performance 為 0+9=9

可以發現，C 雖然說了謊，但是系統的表現都一樣，這樣他就不會被 Manager 抓到。

---

# Lane Merging

路口的特例。

前提假設是車子都有 CACC，可以幫助車子在合併後持續跟車。

## 情境-Two-Lane Merging

- 假設現在左側有兩條路，要合併成右方一條路。
- 此時左方上車道有兩輛車，抵達路口的時間從左到右為 (3,1)
- 此時左方下車道有兩輛車，抵達路口的時間從左到右為 (4,2)
- 假設跟同車道的之間的間距只要 1 秒，跟不同車道的間距要 3 秒

有兩種方法：

- First-Come-First-Go
    - 通常來說不會是最佳解
    - 以上面情境來說，因為是上下車道交錯抵達，所以通過路口的時間會是(1,4,7,10)，因為不同車道的車要等 3 秒後才可跟車
- Optimal shceduled
    - 這可以使用 DP 求解
    - 最佳的配置是上方車道兩輛車先過，再來是下方兩輛車，這樣通過的時間就會是 (1,3,6,7)
    - 也就是只需要上下車道換一次而已

:::info
另外還有 Three-Lane Merging、Consecutive Two-Lane Merging 的情境。
:::






