第三章 研究方法
3.2 最短旅行時間演算邏輯建立
3.2.2 演算法概述
由於本研究將導入動態即時資訊至大眾運輸行前旅次規劃,故並不能直接利 用靜態的時刻表,尚須考慮當使用者查詢時,當下時間點之動態即時資訊,而動 態即時資訊乃會隨著時間的移動而不相同,故在每次使用者查詢時,演算法將會 根據轉乘次數上限,以及時間窗的限制,進行讀取動態即時資訊,以便提供準確 的到站即時資訊。
本 研 究 應 用 Dijkstra’s Algorithm 求 解 行 前 旅 次 規 劃 路 徑 。 Dijkstra’s Algorithm 於每次迭代(iteration)時,尋找標籤尚未被固定且成本最小的節點,以此 點更新其標籤尚未被固定的下游節點。若下游點之成本標籤值比原成本小時,則 將其成本標籤與其前置點更新,並將該節點標籤固定。
由於本研究之問題為,有轉乘次數限制之行前旅次規劃,除了需考量成本外,
尚有轉乘次數限制須考量,故 Dijkstra 無法直接適用於本研究。因此,本研究應 用多重標籤觀念,修正Dijkstra 求解問題。
本研究提出修正後之Dijkstra 為,考慮在轉乘次數下的最少旅行時間,故除 了考量傳統Dijkstra 之「累積成本 Di」與「前置點 Pi」兩標籤外,尚包含用來記
錄轉乘次數的標籤,其包含:「轉乘次數 Ti」的標籤、「前置班次 Pnoi」的標籤,
成為多重標籤修正演算法,並運用於加強式網路。由於每個人對於轉乘次數與旅 行時間的替換程度不相同,故本研究要求使用者自行設定的轉乘次數上限,且視 上限內的轉乘次數為同質。但旅客發生轉乘時,心中仍存在著不安感,故本研究 將在轉乘發生時給予懲罰值,懲罰值為兩倍的等待轉乘時間。如此一來,判斷是 否能夠轉乘的門檻值β 扮演著重要的角色,若 β 越高則發生轉乘的懲罰值也隨之 增高,隨著β值的不同,規劃出來的方案也將會不相同。本研究之行前旅次規劃 邏輯的流程如下圖:
圖 3.3 總演算流程圖 3.2.3 開始
當使用者開始查詢行前旅次規劃時,首先讀入節線類型資料表,而後要求使用者 自行提供以下四點限制
1.轉乘次數上限:在本次旅次中,使用者自行決定能夠容忍之轉乘次數上限。若 使用者設定最多轉乘次數為一次,則系統將認定,該使用者認為轉乘一次與直達 為同質性的旅次。
2.時間窗限制:此部份本研究讓使用者,自行輸入預計出發時間、預計到站時間或 兩者皆輸入。當使用者僅輸入預計出發時間時,系統將時間窗限制視為預計出發 時間至隔日的預計出發時間;倘若使用者設定預計到達時間,系統將時間窗限制視 為目前系統時間至預計到達時間;若使用者輸入預計出發以及預計到達時間,系統 將時間窗限制視為此時間範圍。
3.起點地標:使用者自行認定由該地標出發為最方便的地標。
4.迄點地標:使用者欲到達之目的地。
3.2.4 讀取即時資訊之步驟
當使用者限定轉乘次數以及時間窗限制時,演算法利用這兩個限制,進行讀取即 時資訊,流程圖如圖3.4 所示。
步驟1.搜尋停靠站與路線資料表,可得屬於起點地標之節點集合,以及該路線編 號。
步驟2.更新由步驟 1 或步驟 4,所搜尋到之路線編號中,服務順序大於、等於所 搜尋到的節點之節點到站資訊。da1與 da2分別為,符合時間窗限制內最快 到達的第一個與第二個班次的到站時間。並記載計算次數為零。
步驟3.(停止條件)判斷計算次數,是否等於使用者所限制的最多轉乘次數上限。
若是則停止讀取即時資訊;若不是則進入步驟 4。
步驟4.將每個已更新過到站資訊之節點重新定時,使得時間範圍為 da1至使用者 所限定的預計最晚抵達時間,搜尋與該節點為轉乘節線相連的節點,集合 中,最後將計算次數加一,回到步驟2。
步驟1.開始
步驟2.搜尋符合條件的 節點並更新到站資訊 停靠站與
路線資料 表
步驟3.判斷計算次數是否 等於轉乘次數上限
步驟4.重新定時並將計 算次數加一
否
是
結束
圖 3.4 即時讀取資料流程圖
3.2.5 判斷迄點地標所屬節點是否都尚未被更新
若都尚未被更新,則代表用者所設定之轉乘次數上限或時間窗限制,不能 夠由起點地標到達迄點地標,故停止演算法。反之,則代表使用者所設定 之轉乘次數上限或時間窗限制,可由起點地標到達迄點地標。
3.2.6 行前旅次規劃邏輯流程步驟
步驟 1. (多重標籤初始化)設定所有點的「第 i 個班次的前置點 Pi」為零、「第 i
個班次的前置班次點 Pnoi」為零、「第 i 個班次之累積成本 Di」為無窮大、
「第 i 個班次之累積轉乘次數 Ti」為無窮大、起點地標所屬節點的「第 i 個班次之累積成本 Di」為零,起點地標所屬節點的「第 i 個班次之累積轉 乘次數 Ti」為零。
步驟2.從標籤尚未被固定的點中,找成本最小的點,設為 minic
。
並將 minic 的標 籤固定。步驟3. (停止條件)若目前被標記的點(minic)屬於迄點地標所屬節點,則停止。反 之進行至步驟4。
步驟4. 判斷節點 minic 是否有與其相鄰(minic 之下游點),且尚未嘗試經過的點。
若有,則設該點為 x,到步驟 5;若無,到步驟 3。
步驟5. 判斷與 minic 相連的下游點 x 的連結狀況,若兩點屬於旅行節線相連則進 入步驟6;若為轉乘節線相連,到步驟 7。
步驟 6. 若 minic 與其下游點為旅行節線相連時,進行 Di(x)= Di(minic),Ti(x)=
Ti(minic),Pi=minic,Pnoi=i。回到步驟 4。
步驟7. 若 minic 與其下游點為轉乘節線相連時,判斷 minic 是否屬於起點地標之 節點。若是,則回到步驟4 若不是,到步驟 8。
步驟8. 判斷兩班次時間差是否大於轉乘門檻β(daj(x)-dai(minic)>=
β
)。若是,則 回到步驟4 若不是,到步驟 9。步驟9.判斷出發班次的轉乘次數加一是否超過使用者所限定之轉乘次數上限 U,
(Ti(minic)+1>=U)。是,則回到步驟 4 若不是,到步驟 10。
步驟10.判斷目標節點班次 j 的累積成本是否小於最小成本點之出發班次累積成本 加上兩倍的到站時間差,(Dj(x)<=Di(minc)+2* daj(x)-dai(minic))。若是,
則回到步驟11。若不是,到步驟 4。
步驟11.進行標籤更新:Dj(x)= Di(minic) +2* daj(x)-dai(minic),Tj(x)= Ti(minic)+1,
Pj=minic,Pnoj=i。
步驟1.初始化
3.3 範例說明
本研究利用三條路線的去程進行本演算法流程的說明,本範例的網路如圖,且假 設,此三條路線若發生停靠相同站牌名稱時,共用同一站牌,且每個站牌相距超 過500 公尺。而以 Location1 為中心,方圓 500 公尺內有 Stop1 之站牌。而以 Location2 為中心,方圓 500 公尺範圍內有 Stop5 的站牌。
圖 3.6 範例示意圖 加強式路網示意圖如圖3.7 到站資訊如表 3.3。
1
2
3 4
5 6 7
8 Stop1 Stop2 Stop3 Stop4 Stop5
R1
R2
R3
圖 3.7 範例加強式網路示意圖 表3.3 範例資料表 RouteID RouteName
Name StopID Sql NodeID Latitude Longitude 班 次
到站 時間
1 1(往) Stop1 1 1 1 X1 Y1 1 9:00 1 1(往) Stop2 2 2 3 X2 Y2 1 9:08 1 1(往) Stop3 3 3 4 X3 Y3 1 9:17 2 2(往) Stop3 3 1 5 X3 Y3 1 9:02 2 2(往) Stop4 4 2 6 X4 Y4 1 9:09 2 2(往) Stop5 5 3 7 X5 Y5 1 9:16 3 3(往) Stop1 1 1 2 X1 Y1 1 9:00 3 3(往) Stop5 5 2 8 X5 Y5 1 9:50 1 1(往) Stop1 1 1 1 X1 Y1 2 9:10 1 1(往) Stop2 2 2 3 X2 Y2 2 9:17 1 1(往) Stop3 3 3 4 X3 Y3 2 9:27 2 2(往) Stop3 3 1 5 X2 Y3 2 9:22 2 2(往) Stop4 4 2 6 X4 Y4 2 9:30 2 2(往) Stop5 5 3 7 X5 Y5 2 9:40 3 3(往) Stop1 1 1 2 X1 Y1 2 9:20 3 3(往) Stop5 5 2 8 X5 Y5 2 10:05 1 1(往) Stop1 1 1 1 X1 Y1 3 9:20 1 1(往) Stop2 2 2 3 X2 Y2 3 9:27 1 1(往) Stop3 3 3 4 X3 Y3 3 9:37 2 2(往) Stop3 3 1 5 X2 Y3 3 9:30 2 2(往) Stop4 4 2 6 X4 Y4 3 9:37 2 2(往) Stop5 5 3 7 X5 Y5 3 9:49 3 3(往) Stop1 1 1 2 X1 Y1 3 9:40 3 3(往) Stop5 5 2 8 X5 Y5 3 10:25 3.3.1 開始
使用者所設定的條件分別如下:
1.使用者設定 L1 為起點地標。
2.使用者設定 L2 為迄點地標。
3.假設目前時間為早上九點整,而使用者僅輸入預計到達時間為早上十點半。
4.使用者設定最多轉乘次數為零次。
3.3.2 讀取即時資料
由使用者的設定可以得知,通過起點地標的路線分別為:路線編號 1(R1)與 路線編號 2(R2),而兩路線在範圍內的節點分別為:節點編號 1 與節點編號 2。而 使用者所設定的時間窗範圍,是早上九點至早上十點半,故在讀取即時資料的第 二步驟,將更新路線編號 1(R1)中的節點編號 1 至節點編號 4 的到站時間(da1與 da2),以及路線編號 3(R3)中的節點編號 2 與節點編號 8 之節點,到站資訊為,九 點至十點半中最快到達的兩個班次之到站時間。查詢停靠站與路線資料庫得知,
路線編號 1,九點與九點十分將有兩個班次經過 Stop1,故節點編號 1、節點編號 3 與節點編號 4 的到站資訊將更新如表所示,路線編號 3 的站牌亦為如此。故圖 中的中括號為符合時間窗的第一班次與第二班次,
[da
1,da
2]
表 3.4 範例說明一
節點編號 第一個班次 第二個班次
1 9:00 9:10
3 9:08 9:17
4 9:17 9:27
2 9:00 9:20
8 9:50 10:05
此時計算次數為零次等於使用者所限定之轉乘次數上限,故停止讀取即時資 料將進入下一步驟。
圖 3.8 範例一加強式網路說明一
1
2
3 4
5 6
7
8
R1R2
R3
[9:00,9:10] [9:08,9:17] [9:17,9:27]
[9:00,9:20] [9:50,10:05]
3.3.3 演算法求解
演算法求解之第一步驟為初始化,而初始化資訊如圖所示。圖中小括弧中的 數字代表到達該節點第一班次與第二班次的累積成本
(D
1,D
2)
,以斜體字加底線的 數字則為到達該節點第一班次與第二班次之累積轉乘次數(T
1,T
2)
,大括號中的數 字代表第一與第二個班次的前置點(Pno
1,Pno
2)
,第二步驟則選取具有最少成本之 節點作為目前最小成本點(minic)
,並在圖中給予*的記號。而在圖中顯示灰色的 節點代表為屬於起點地標的節點,顯示黑色的節點代表屬於迄地標的節點。圖 3.9 範例一加強式網路說明二
在第一個iteration 中,節點 1 分別和節點 2 與節點 3 相連。而對於節點 3 與 節點1 之連結狀況為旅行節線,故直接更新成本轉乘次數,如圖所示。但節點 1 和節點2 為連結狀況為轉乘節線,因此,必須經過四個判斷條件,但由於節點 2 屬於起點地標之節點,故不更新成本與轉乘次數,如圖所示。此時節點1 已無任 何相連節點,故進行選取目前最少成本點,而目前最小成本點,為節點編號2 之 節點,故在此給予節點編號2 一個*符號。
1
2
3 4
5 6
7
8
R1R2
R3
[9:00,9:20]
(0,0),0,0,{0,0}
[9:50,10:05]
(∞,∞),
∞ ,
∞
,{0,0}[9:08,9:17]
(∞,∞),
∞ ,
∞
,{0,0}[9:00,9:10]
(0,0),0,0 ,{0,0}*
[9:17,9:27]
(∞,∞),
∞ ,
∞
, {0,0}圖 3.10 範例一加強式網路說明三
當本範例進行至第四個iteration 時,節點資訊如圖,且目前最少成本點為節 點編號8 之節點,且此節點屬於迄點地標之節點,故演算法停止。
[9:00,9:20]
(0,0),0,0.
{0,0}*
[9:50,10:05]
(50,45),0,0 {0,0}*
[9:00,9:20]
(0,0),0,0, {0,0}*
[9:50,10:05]
(∞,∞),
∞ ,
∞ ,{0,0}
[9:00,9:10]
(0,0),0,0{0, 0}*
[9:08,9:17]
(8,17),0,0 {0,0}
[9:17,9:27]
(∞,∞),
∞ ,
∞
{0,0}[9:00,9:10]
(0,0),0,0 {0,0}*
[9:08,9:17]
(8,17),0, 0 {1,1}*
[9:17,9:27]
(∞,∞),
∞ ,
∞ ,{0,0}
圖 3.11 範例一加強式網路說明四
3.3.3 範例說明二
如今使用者若設定轉乘次數上限最多為一次時,本範例將會在讀取即時資料 的步驟時,進行每個節點重新定時,例如,將節點 4 重新定時,故時間窗限制將 被更新為早上九點十七分至早上十點三十分,進行搜尋符合時間窗限制之班次,
並更新與節點 4 為轉乘節線相連之節點的到站時間資訊,用此方式解決大眾運輸
並更新與節點 4 為轉乘節線相連之節點的到站時間資訊,用此方式解決大眾運輸