智能交通(3)——Learning Phase Competition for Traffic Signal Control

論文分享

https://dl.acm.org/doi/pdf/10.1145/3357384.3357900icon-default.png?t=N7T8https://dl.acm.org/doi/pdf/10.1145/3357384.3357900

論文代碼?

https://github.com/gjzheng93/frap-pubicon-default.png?t=N7T8https://github.com/gjzheng93/frap-pub

摘要??

越來越多可用的城市數據和先進的學習技術使人們能夠提高我們城市功能的效率。其中,提高城市交通效率是最突出的課題之一。最近有研究提出將強化學習(RL)用于交通信號控制。與傳統交通方式嚴重依賴先驗知識不同,強化學習可以直接從反饋中學習。然而,如果沒有仔細的模型設計,現有的強化學習方法通常需要很長時間才能收斂,并且學習的模型可能無法適應新的場景。例如,一個對上午交通訓練良好的模型可能不適用于下午的交通,因為交通流可能會逆轉,從而導致非常不同的狀態表示。

本文基于交通信號控制中直觀的相位競爭原理,提出了一種新穎的FRAP設計,即當兩個交通信號沖突時,優先考慮交通量較大(即需求較高)的信號。通過階段競爭建模,實現了對交通流中翻轉、旋轉等對稱情況的不變性。

通過全面的實驗,我們證明了我們的模型在復雜的全相位選擇問題上比現有的RL方法找到了更好的解,在訓練過程中收斂速度更快,并且對不同的道路結構和交通條件具有更好的泛化能力。

介紹

當前,強化學習作為一種可行的解決方案已經被用于現實場景的交通信號控制中。強化學習模型能夠直接通過與環境交互學習控制策略。為了實現這個目的,一種典型的方法是為每個交叉路口設置一個Agent,Agent通過做完動作后環境的反饋,來優化獎勵。

這些強化學習模型能有效對2或4個信號相位的交叉路口進行控制。但對于8相位的交叉路口,研究發現會出現狀態空間爆炸的問題。在2相位問題中,只有4個直行車道,假設狀態定義為每個車道上的車輛數和當前信號相位,每個車道的車輛容量為n,則2相控制問題的狀態空間大小為2*n{_{}}^{4}?。而在8相位問題中,有4個直行車道和4個左轉車道,狀態空間大小會增加到8*n^{^{}8}。所以其挑戰是減少問題空間并更有效地尋找不同場景,故強化學習算法需要在最小范圍里找到最優解。

之前的強化學習方法獨立輸入8車道并利用回歸得到Q ( s , a ),因此其需要嘗試在各種狀態上嘗試8種動作,大約(8*n^{_{}8})*8個樣本才能獲得最終估計。

但事實上,相當一部分狀態-動作對是不必要探究的。以圖1為例。這兩種情況大致是鏡像(流量翻轉)。這種翻轉是人們早上從住宅區通勤到商業區,下午反向交通的常見現象。由于這樣的翻轉將導致現有方法的完全不同的狀態表示,已經了解第一種情況的RL代理仍然不能處理第二種情況。但是根據常識,這兩種情況幾乎是相同的,人們希望從第一種情況中學習的模型可以處理第二種情況或其他類似的情況。此外,如圖2所示,給定任何特定的狀態,可以通過旋轉和翻轉生成七個其他案例。因此,即使在訓練期間只看到一個案例,理想的RL模型也能處理所有八個案例,具有一定的泛化能力。

基于上述觀察,我們提出了一個新的模型設計稱為FRAP,它是不變的對稱操作,如翻轉和旋轉,并考慮所有相位置。關鍵的想法是,與其考慮單個的交通時刻如關注不同交通運動之間的時刻。這個想法是基于交通信號控制中沖突的直觀原理:

(1)較大的交通流量表明對綠色信號的需求較高;
(2)當兩個交通流沖突時,我們應該優先考慮需求較高的一個。

總之,本文的主要貢獻包括:

1.提出了一種新的基于強化學習的交通信號控制模型設計框架FRAP。通過捕捉不同信號相位之間的沖突關系,該算法實現了對對稱性的不變性,從而更好地解決了困難的全相位交通信號控制問題。
2.我們所展示的FRAP框架在通過真實世界數據的綜合實驗的學習過程中收斂速度比現在的RL算法要快的多。
3.我們進一步證明了FRAP的優越的延展性。更特別的是,我們證實了FRAP能夠處理不同的道路結構,不同的交通流,真實世界中復雜的相位設置,以及多交叉環境。

思路

模型概覽

文章采用了Ape-X DQN來解決強化學習問題。模型采用交通流動的狀態特征作為輸入,預測每個動作的分數。這可以用貝爾曼公式形式化描述出來:

FRAP基于兩條特別的規則:

**競爭規則:**更大的交通溜達代表著對綠燈更高的需求,當兩種信號出現沖突,應該給更高需求的相位高優先級。
**不變性規則:**信號控制應該對旋轉、對稱具有不變性。
算法框架
Ape-X DQN,標準的深度強化學習可以被分為兩個部分,包括執行和學習。執行部分包括部署多個具有不同策略的參與者與環境交互,并將觀察到的數據存儲到經驗存儲器中。學習部分適用于對經驗存儲器中的訓練數據進行采樣,從而來更新模型。兩個部分同時運行。

相位不變信號控制設計

文章將相位分數預測分為三個階段:相位需求建模(Phase demand modeling)、相位對表示(Phase pair representation)、相位對競爭(Phase pair competition)。

實驗

實驗設置

本文使用CityFLow模擬平臺,將交通數據作為輸入,模擬器能夠為模型提供交通情況的觀測并執行信號控制動作。 與真實世界一致,綠燈以后設置了3s黃燈和2s全紅燈。 在交通數據集中,每輛車描述為( o , t , d ) :其中o是起始位置,t是時間,d是終點位置。 在多交叉路口網絡中,文章使用了真實路網。在單交叉路口中,除非其他特殊規定,路網將設為一個擁有300米路段的四向交叉路口。

數據集

文章使用了濟南、杭州和亞特蘭大的數據集。 濟南:文章收集了濟南7個十字路口的監控攝像頭數據。該數據集中每條記錄包含攝像頭的位置、車輛到達十字路口的時間以及車輛信息。 杭州:該數據集記錄了2018年4月1日到2018年4月30日的杭州6個路口的監控攝像頭數據,記錄完成,數據處理方法于濟南數據類似。 亞特蘭大:該數據集由8臺攝像機記錄了2006年11月8日亞特蘭大Peachtree Street的主干道。該車輛軌跡數據集提供了研究區域內車輛的精確位置,共考慮了五個交叉路口。

參數設置

1.Adam學習率設置為0.001 (這里使用的Adam優化器是一種自適應學習率的優化算法,它根據梯度的一階和二階矩估計來調整每個參數的學習率)

2.每一輪訓練中,從內存中采樣1000個樣本,以20的batch_size進行訓練 (這指的是在每次訓練迭代中,從經驗回放緩沖區(replay memory)中隨機抽取1000個過去的樣本(狀態、動作、獎勵、下一個狀態)。這樣做可以讓智能體從過去的經驗中學習,而不是僅依賴于最新的數據,這有助于提高學習效率和穩定性)

3.3個Actor并行以實現Ape-X DQN框架 (Ape-X DQN框架是一種分布式強化學習框架,它通過多個actor(執行者)并行地與環境交互來提高數據收集和學習效率。這里設置3個actor意味著有3個并行的智能體在環境中執行動作,收集數據,并存儲到共享的回放緩沖區中供學習者(learner)使用)

4.將10s設置為兩次動作的間隔 (這是指在智能體選擇并執行一個動作后,需要等待10秒才能執行下一個動作。這個時間間隔被設置為10秒,是因為實驗表明模型性能對這個參數不是特別敏感,也就是說,即使間隔時間有所變化,對模型性能的影響也不大。)

評價指標

1.旅行時間 (Travel Time):這是評估交通信號控制方法性能的主要指標。定義為車輛在接近車道上花費的平均旅行時間,以秒為單位。該指標反映了車輛通過交通信號控制路口所需的總時間,是交通領域中常用的性能評估指標。

2.收斂速度 (Convergence Speed):收斂速度衡量了強化學習模型在訓練過程中學習策略并達到穩定性能的速度。文檔中提到FRAP模型在收斂速度上優于其他強化學習方法。

3.對不同交通流量的適應性 (Adaptability to Different Traffic Volumes):衡量模型在不同交通流量條件下的性能,包括高峰和非高峰時段。FRAP模型顯示出良好的適應性,即使在訓練時使用的是一個交通流量,也能很好地遷移到另一個不同的交通流量環境中。

4.對稱性不變性 (Invariance to Symmetry):衡量模型對于交通流對稱操作(如翻轉和旋轉)的不變性。FRAP模型設計考慮了交通信號控制的對稱性,因此在面對交通流的翻轉和旋轉時,模型性能保持穩定。

5.多路口環境下的性能 (Performance in Multi-Intersection Environment):評估模型在包含多個交通信號控制路口的環境中的性能。FRAP在多路口環境中同樣表現出色,這表明它具有在更復雜交通網絡中應用的潛力。

6.策略解釋性 (Policy Interpretability):通過可視化學習到的策略,分析模型為每個交通運動分配的綠燈時間與交通流量的百分比之間的關系。FRAP能夠根據交通流量合理分配綠燈時間,與其他基線方法相比,顯示出更好的策略解釋性。

代碼運行

本文作者在docker上提供了鏡像,可以直接進行運行(詳情見readme.md)

以下是根據提供的代碼文件和它們的整理出的閱讀順序:

config.py:定義了實驗配置、路徑、交通環境配置、代理配置等。

network_agent.py:定義了基于神經網絡的代理的抽象類,提供了構建網絡和訓練網絡的通用方法。

transfer_dqn_agent.py:實現了一個特定的強化學習代理框架,處理全相位場景并實現對稱變換的不變性。

anon_env.py :實現了一個交通信號控制的環境,包括交叉口的設置、信號燈的控制邏輯等。 sumo_env.py:定義了一個與SUMO模擬器交互的環境,用于獲取交通數據。

generator.py :生成器類,用于加載模型、啟動SUMO環境、進行模擬并記錄結果。 construct_sample.py :從原始數據中構建訓練樣本,選擇所需的狀態特征并計算相應的平均/即時獎勵。

updater.py :定義了模型更新的類,負責加載樣本和更新網絡。 model_pool.py :實現了模型池的邏輯,用于存儲和評估最佳模型。

pipeline.py :實現了整個強化學習的流程,包括啟動SUMO環境、運行模擬、構建樣本、更新模型和模型池。

replay.py :用于回放模擬結果,可能用于可視化或進一步分析。 runexp.py:運行實驗的腳本,可能用于啟動pipeline.py中的流程。

model_test.py :定義了模型測試的邏輯,用于評估訓練好的模型性能。

summary.py:包含用于分析和匯總實驗結果的函數。它從記錄的文件中提取數據,計算性能指標,繪制圖表,并生成總結報告。該腳本處理訓練和測試階段的性能數據,包括平均持續時間、排隊長度等,并生成可視化的圖表來展示模型性能隨時間的變化。

script.py :包含了一些通用函數,例如獲取交通量等。

testexp.py :用于執行測試實驗,可能包含了測試模型的邏輯。

run_batch.py :批量運行實驗的腳本,可以用于自動化地運行多個實驗配置。

agent.py :定義了不同代理的抽象類。

實驗結果分析

test_results.csv

記錄了每輪測試的詳細結果,包括持續時間、排隊長度、進入和離開車輛的數量。其中,部分輪次的持續時間和排隊長度為-1.0,這可能是因為這些輪次的數據不完整或無效。

total_test_results.csv

traffic: 表示使用的交通文件的名稱。這個文件定義了交通流量和車輛生成的規則。 traffic_file: 與 traffic 字段相同,記錄了交通文件的名稱。 min_queue_length: 測試期間記錄的最小排隊長度。排隊長度是指在交叉口前等待的車輛隊伍的長度。 min_queue_length_round: 記錄到最小排隊長度時的測試輪次。 min_duration: 最短持續時間。持續時間是指車輛通過交叉口所需的時間。這里記錄為 inf(無窮大),可能表示沒有有效的最小持續時間記錄,或者在測試期間沒有觀察到足夠低的持續時間。 min_duration_round: 記錄到最短持續時間時的測試輪次。由于 min_duration 是 inf,這個字段可能沒有記錄有效數據。 final_duration: 測試階段最后的平均持續時間。這個值是所有有效持續時間觀測值的平均值。 final_duration_std: 最終持續時間的標準差,表示持續時間的波動情況。 convergence_1.2 和 convergence_1.1: 收斂性指標,用于衡量模型性能是否隨著時間趨于穩定。這里兩者都為0,可能表示模型性能沒有達到預期的收斂標準,或者這些字段在測試中沒有被正確更新。 nan_count: 數據中 NaN(不是數字)值的數量。NaN 值可能由多種原因造成,例如模型未能記錄數據,或者在數據處理過程中出現了錯誤。較高的 NaN 計數可能影響性能指標的準確性。 min_duration2: 這個字段在提供的數據中是空的,可能用于記錄另一種條件下的最短持續時間,或者用于其他相關的性能評估。

橫坐標: 通常表示時間或輪次,是實驗或模擬過程中的各個點。 縱坐標: 表示某個度量指標,可能是車輛的平均持續時間、平均排隊長度或其他交通相關指標。 圖表中的數值: 400, 200, 50, 100, 150, 250, 300, 350,這些可能表示橫坐標的刻度值,代表不同的時間點或輪次。 "inter 0 1786": 這可能指的是某個特定的交叉口或實驗設置的標識。 "final-37.8": 這可能表示實驗或模擬的最終結果是37.8個單位(具體單位未知,可能是秒、分鐘或其它)。

橫坐標: 表示時間,從0開始,以50為增量,直至400。這可能代表了一個觀測時間段,例如一個小時內每50秒記錄的數據。 縱坐標: 表示某個交通相關的度量指標,可能是車輛流量、車輛排隊長度或其他。 圖表中的數值: 500, 400, 300, 200, 100,這些可能表示縱坐標的刻度值,代表不同的度量級別或數量。 "inter 0 1786.json 07 01 11 59 24 10-76.75": 這行文本可能表示數據的來源文件和時間戳,以及一個特定的數值(76.75),這可能是某個重要指標的平均值或最終結果。

實驗結果分析

從 total_test_results.csv 文件可以看出,實驗在某個交通文件上運行了多輪,記錄了每輪的最小排隊長度和最終的平均持續時間。nan_count 較高表明有很多數據點無效,可能是因為模型在某些情況下未能正確預測或記錄數據。 從 test_results.csv 文件可以看出,每輪測試的持續時間波動較大,這可能是由于交通流量變化、模型性能或其他外部因素造成的。 圖表文件(如 inter_0_1786.json_07_01_11_59_24_10-test.png 和 inter_0_1786-test.png)提供了可視化的結果,有助于分析模型性能隨時間的變化趨勢。 綜上所述,實驗結果表明模型在處理特定交通場景時可能存在一定的波動性和不穩定性,需要進一步分析和調整模型參數或結構以提高性能。同時,需要處理NaN值以確保數據的完整性和準確性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41969.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41969.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41969.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Laravel框架詳解及使用方法

Laravel是一款開源的PHP Web應用程序框架,它基于MVC(模型-視圖-控制器)架構,以其簡單易學、靈活性強、安全性高和強大的社區支持而廣受開發者喜愛。以下是對Laravel框架的詳細解析及使用方法: 一、Laravel框架簡介 1…

刷題——在二叉樹中找到最近公共祖先

在二叉樹中找到兩個節點的最近公共祖先_牛客題霸_牛客網 int lowestCommonAncestor(TreeNode* root, int o1, int o2) {if(root NULL) return -1;if((root->val o1) || (root->val o2)) return root->val;int left lowestCommonAncestor(root->left, o1, o2);i…

【pytorch19】交叉熵

分類問題的loss MSECross Entropy LossHinge Loss (SVN用的比較多) ∑ i m a x ( 0 , 1 ? y i ? h θ ( x i ) ) \sum_imax(0,1-y_i*h_\theta(x_i)) ∑i?max(0,1?yi??hθ?(xi?)) Entropy(熵) Uncertainty(…

ESP32——物聯網小項目匯總

商品級ESP32智能手表 [文章鏈接] 用ESP32,做了個siri?!開源了! [文章鏈接]

IPsec連接 和 SSL連接

Psec和SSL連接是兩種用于保障網絡通信安全的技術 IPsec 通常用于連通兩個局域網,主要是網對網的連接,如分支機構與總部之間,或者本地IDC與云端VPC的子網連接。適合站點間的穩定通訊需求以及對網絡層安全有嚴格要求的場合。要求兩端有固定的網…

UDP協議:獨特之處及其在網絡通信中的應用

在網絡通信領域,UDP(用戶數據報協議,User Datagram Protocol)是一種廣泛使用的傳輸層協議。與TCP(傳輸控制協議,Transmission Control Protocol)相比,UDP具有其獨特的特點和適用場景…

對數據采集、數據存儲和數據處理流程

對數據采集、數據存儲和數據處理流程 數據采集是指從各種來源收集原始數據的過程,這通常包括傳感器、網站、社交媒體、API等。它涉及設置抓取工具、爬蟲技術或直接從數據庫獲取數據。數據存儲則涉及到將采集到的數據安全、高效地保存起來,常見的有關系型…

EDEM-FLUENT耦合報錯幾大原因總結(持續更新)

寫在前面,本篇內容主要是來源于自己做仿真時的個人總結,以及付費請教專業老師。每個人由于工況不一樣,所以報錯原因千奇百怪,不能一概而論,本篇內容主要是為本專欄讀者在報錯時提供大致的糾錯方向,從而達到少走彎路的效果,debug的過程需要大家一點點試算。問題解答在文 …

02STM32環境搭建新建工程

STM32環境搭建&新建工程 軟件安裝:開發方式&新建工程步驟&架構 個人心得 軟件安裝: 安裝Keil5 MDK 安裝器件支持包 軟件注冊 安裝STLINK驅動 安裝USB轉串口驅動 開發方式&新建工程步驟&架構 STM32開發方式: 1.寄存器 …

什么是倒退型自閉癥?

在星貝育園自閉癥兒童康復學校,作為一位致力于自閉癥兒童教育與康復的老師,我深知家長們面對“倒退型自閉癥”這一概念時的困惑與憂慮。今天,就讓我以專業的身份,為大家揭開倒退型自閉癥的神秘面紗,共同探討這一特殊現…

mysql中的遞歸函數recursive

遞歸部門 WITH recursive dept_tree AS (SELECTsd.mine_id AS mine_id,sd.dept_id AS dept_id,sd.tenant_id AS tenant_id,sd.order_num,sd.dept_name AS topName,sd.dept_id AS topIdFROMsys_dept sdWHERE<!-- 加上or后也會查詢出dept節點 sd.parent_id #{deptId} or sd.…

uniapp H5頁面設置跨域請求

記錄一下本地服務在uniapp H5頁面訪問請求報跨域的錯誤 這是我在本地起的服務端口號為8088 ip大家可打開cmd 輸入ipconfig 查看 第一種方法 在源碼視圖中配置 "devServer": {"https": false, // 是否啟用 https 協議&#xff0c;默認false"port&q…

跨界客戶服務:拓展服務邊界,創造更多價值

在當今這個日新月異的商業時代&#xff0c;跨界合作已不再是新鮮詞匯&#xff0c;它如同一股強勁的東風&#xff0c;吹散了行業間的壁壘&#xff0c;為企業服務創新開辟了前所未有的廣闊天地。特別是在客戶服務領域&#xff0c;跨界合作正以前所未有的深度和廣度&#xff0c;拓…

一文理解 Treelite,Treelite 為決策樹集成模型的部署和推理提供了高效、靈活的解決方案

&#x1f349; CSDN 葉庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、什么是 Treelite&#xff1f; Treelite 是一個專門用于將決策樹集成模型高效部署到生產環境中的機器學習模型編譯器&#xff0c;特別適合處理大批量數據的推理任務&#xff0c;能夠顯著提升推理性能…

[Vite]Vite插件生命周期了解

[Vite]Vite插件生命周期了解 Chunk和Bundle的概念 Chunk&#xff1a; 在 Vite 中&#xff0c;chunk 通常指的是應用程序中的一個代碼片段&#xff0c;它是通過 Rollup 或其他打包工具在構建過程中生成的。每個 chunk 通常包含應用程序的一部分邏輯&#xff0c;可能是一個路由視…

【刷題匯總--大數加法、 鏈表相加(二)、大數乘法】

C日常刷題積累 今日刷題匯總 - day0061、大數加法1.1、題目1.2、思路1.3、程序實現 2、 鏈表相加(二)2.1、題目2.2、思路2.3、程序實現 3、大數乘法3.1、題目3.2、思路3.3、程序實現 4、題目鏈接 今日刷題匯總 - day006 1、大數加法 1.1、題目 1.2、思路 讀完題,明白大數相加…

使用空指針訪問成員函數

#include<iostream> #include<ctime> using namespace std; class Person { public:void outPr(){cout << "outPr()被調用" << endl;} };void test02() {Person* p1 NULL;p1->outPr(); }int main() {test02();return 0; }

郭明錤:蘋果將為Vision Pro推出紅外攝像頭款AirPods

在科技界,蘋果公司的每一次創新都備受矚目。近日,著名蘋果分析師郭明錤透露了一個令人振奮的消息:蘋果計劃在2026年推出配備紅外攝像頭的新款AirPods,這款耳機將特別優化與Apple Vision Pro頭顯的空間體驗。這一消息不僅預示著蘋果在音頻設備領域的又一次技術飛躍,也進一步…

策略為王股票軟件源代碼-----如何修改為自己軟件62----資訊菜單修改-----舉例---------調用同花順F10資訊------

//char szInfoF10[] "http://www.f10.com.cn/ggzx/ggzl.asp?zqdm%s"; char szInfoF10[] "http://basic.10jqka.com.cn/601899/"; // MENUITEM "F10資訊(&F)", ID_INFO_F10 MENUITEM &…

Lua 錯誤處理

Lua 錯誤處理 Lua是一種輕量級的編程語言&#xff0c;廣泛用于游戲開發、腳本編寫和其他應用程序中。在編程過程中&#xff0c;錯誤處理是一個重要的方面&#xff0c;它可以幫助開發者創建更健壯和可靠的程序。本文將詳細介紹Lua中的錯誤處理機制。 錯誤類型 在Lua中&#x…