戰(zhàn):從netedit畫路到信號(hào)燈配時(shí))
簡介本資源是一份面向交通工程初學(xué)者與SUMO建模入門者的十字路口網(wǎng)絡(luò)配置實(shí)踐文件聚焦netedit圖形化建模核心流程解決城市微觀交通仿真中關(guān)鍵節(jié)點(diǎn)——信號(hào)交叉口的快速構(gòu)建與參數(shù)化定義問題。壓縮包僅含1個(gè)3KB的XML格式網(wǎng)絡(luò)文件cross240327.net.xml該文件已完整實(shí)現(xiàn)四臂直角交叉口的道路拓?fù)?、車道連接關(guān)系、默認(rèn)優(yōu)先級(jí)交叉口類型及基礎(chǔ)交通流通行邏輯可直接導(dǎo)入SUMO進(jìn)行后續(xù)車輛路由與仿真運(yùn)行。資源已獲790人學(xué)習(xí)下載體現(xiàn)了其在教學(xué)演示、課程實(shí)驗(yàn)與小規(guī)模場(chǎng)景驗(yàn)證中的實(shí)用價(jià)值。讀者可直接復(fù)用該結(jié)構(gòu)化網(wǎng)絡(luò)文件省去從零繪制邊、定義連接、校驗(yàn)拓?fù)涞确爆嵅襟E同時(shí)通過閱讀XML源碼直觀理解netedit操作背后的底層參數(shù)映射為進(jìn)階自定義信號(hào)配時(shí)、多相位控制或復(fù)雜渠化設(shè)計(jì)奠定實(shí)操基礎(chǔ)。 做仿真實(shí)驗(yàn)找了個(gè)SUMO搭十字路口這活兒看起來簡單真上手才發(fā)現(xiàn)坑不少。很多人第一次打開netedit面對(duì)空蕩蕩的畫布根本不知道從哪里下手要么是節(jié)點(diǎn)畫了半天路網(wǎng)連不起來要么是好不容易畫完了跑仿真的時(shí)候車全在路口堵死。這篇不講虛的用實(shí)際建好的cross240327.net.zip作為例子完整走一遍從新建路網(wǎng)、畫路、連車道、配信號(hào)燈到最終驗(yàn)證的流程把為什么這么設(shè)、參數(shù)背后的邏輯、以及容易踩的坑一次說清楚。1. 十字路口建模的整體設(shè)計(jì)與核心思路1.1 SUMO和netedit在項(xiàng)目中到底扮演什么角色SUMOSimulation of Urban MObility是開源微觀交通流仿真平臺(tái)它在交通領(lǐng)域的位置相當(dāng)于PyTorch在深度學(xué)習(xí)里的地位——免費(fèi)、開源、生態(tài)完善、支持二次開發(fā)。netedit是SUMO自帶的圖形化路網(wǎng)編輯工具用來畫路、定義車道、設(shè)置信號(hào)燈和檢測(cè)器。交叉口建模是所有SUMO項(xiàng)目的地基。一個(gè)城市級(jí)網(wǎng)絡(luò)仿真本質(zhì)上就是大量路口節(jié)點(diǎn)和路段邊拼出來的一條路網(wǎng)數(shù)據(jù)畫錯(cuò)后面所有的交通需求分配、信號(hào)配時(shí)優(yōu)化、尾氣排放計(jì)算全都會(huì)跟著出錯(cuò)。因此把單個(gè)十字路口的路網(wǎng)幾何、車道連接、信號(hào)邏輯三件事徹底弄明白等于打通了SUMO路網(wǎng)建模的任督二脈。1.2 為什么選netedit而不是寫XML或?qū)懩_本在netedit出現(xiàn)之前SUMO路網(wǎng)主要通過兩種方式建立手寫.net.xml文件或者編寫Python腳本調(diào)用sumolib生成。手寫XML文件極為痛苦一個(gè)帶左轉(zhuǎn)待轉(zhuǎn)區(qū)的路口可能要幾百行代碼光是對(duì)齊節(jié)點(diǎn)坐標(biāo)就能讓人崩潰寫腳本則需要首先在腦中構(gòu)建立體的路網(wǎng)拓?fù)溥@對(duì)新手很不友好。netedit把路網(wǎng)的“節(jié)點(diǎn)-邊-連接”三層結(jié)構(gòu)可視化了?!肮?jié)點(diǎn)”是路口“邊”是道路“連接”是車道與車道之間允許的通行關(guān)系。你能直接在畫布上拖動(dòng)、對(duì)齊、檢查沖突軟件實(shí)時(shí)顯示當(dāng)前路網(wǎng)能否被SUMO正常解析。cross240327.net.zip這個(gè)壓縮包解壓后里面最核心的就是用netedit保存的.net.xml路網(wǎng)文件它完整記錄了這整套拓?fù)湫畔?。?shí)操心得如果只是做一個(gè)簡單的十字路口netedit就夠用但如果要批量生成大面積路網(wǎng)建議用OpenStreetMap數(shù)據(jù)轉(zhuǎn)成SUMO格式netconvert --osm-files map.osm --output-file map.net.xml。前者適合精雕細(xì)琢后者適合快速鋪開。1.3 十字路口建模的核心目標(biāo)拆解一個(gè)標(biāo)準(zhǔn)十字路口建模時(shí)本質(zhì)上要解決三個(gè)約束物理連通性四條進(jìn)口道、四條出口道每條道有若干車道車道之間需要允許對(duì)應(yīng)的行駛軌跡直行、左轉(zhuǎn)、右轉(zhuǎn)。交通規(guī)則完整性路口內(nèi)車輛根據(jù)信號(hào)燈或讓行規(guī)則通行需要定義路權(quán)關(guān)系防止沖突車流同時(shí)放行。幾何可通行性車道轉(zhuǎn)彎半徑、車道寬度、節(jié)點(diǎn)位置必須保證車輛能夠按SUMO內(nèi)置的車輛動(dòng)力學(xué)模型安全通過。SUMO里車輛是微觀模型沒有“神仙轉(zhuǎn)彎”半徑過小車輛會(huì)原地打轉(zhuǎn)或速度驟降。netedit中的每一項(xiàng)設(shè)置最終都落在滿足這三條約束上。思路清晰了具體操作就不容易迷路。2. 環(huán)境準(zhǔn)備與netedit基礎(chǔ)操作2.1 工具版本與安裝要點(diǎn)不同版本的SUMO在netedit界面上有細(xì)微差異。以目前最新的SUMO 1.20.0為例2024年發(fā)布netedit界面已經(jīng)支持暗色模式、多標(biāo)簽頁編輯以及更智能的連接檢查。安裝時(shí)建議直接在官網(wǎng)下載安裝包Windows環(huán)境注意勾選添加環(huán)境變量否則后續(xù)命令行調(diào)用neteditnetconvert等工具會(huì)報(bào)錯(cuò)。安裝路徑不要包含中文和空格這是老生常談但真的能避免很多詭異問題。如果要用Python腳本與SUMO交互裝好SUMO后需要手動(dòng)把tools目錄加入PYTHONPATH否則import traci和import sumolib都會(huì)失敗。驗(yàn)證安裝是否成功可以在命令行輸入netedit --version如果輸出版本信息說明環(huán)境沒問題。2.2 netedit界面布局速覽打開netedit后界面分三塊左側(cè)是模式選擇面板最常用的是“網(wǎng)絡(luò)編輯”模式Network、“需求編輯”模式Demand、“出行模式”模式Mode。中間是畫布鼠標(biāo)左鍵選擇元素右鍵彈出上下文菜單滾輪縮放按住中鍵拖動(dòng)視角。右側(cè)是屬性面板選中節(jié)點(diǎn)、邊或連接后這里會(huì)列出所有可修改的屬性。畫十字路口全部工作在“網(wǎng)絡(luò)編輯”模式下完成。這個(gè)模式里畫布上有三種核心元素圓形或方形的結(jié)點(diǎn)Node/Junction、連接結(jié)點(diǎn)的邊Edge、以及邊內(nèi)部的車道Lane。2.3 新建路網(wǎng)文件與基礎(chǔ)視圖操作啟動(dòng)netedit后選擇File - New Network然后馬上File - Save As存成cross.net.xml。保存后用文本編輯器打開看一眼會(huì)發(fā)現(xiàn)里面已經(jīng)生成空net根標(biāo)簽后續(xù)所有操作都會(huì)寫入這里。畫布導(dǎo)航的幾個(gè)快捷鍵建議刻進(jìn)肌肉記憶Shift 鼠標(biāo)左鍵拖拽平移視角。Ctrl 鼠標(biāo)滾輪縮放視角。Delete刪除選中的元素。Ctrl Z撤銷netedit有撤銷棧但層級(jí)較深建議多存盤。Ctrl S保存務(wù)必養(yǎng)成隨手保存的習(xí)慣。注意netedit的撤銷不是萬能的某些批量操作比如自動(dòng)連接車道一旦執(zhí)行撤銷可能只能回退一步。操作前多保存幾個(gè)副本是正道。3. 十字路口路網(wǎng)繪制的完整實(shí)操3.1 先畫節(jié)點(diǎn)還是先畫邊SUMO路網(wǎng)的基本構(gòu)成單位是“節(jié)點(diǎn)node”和“邊edge”。一個(gè)十字路口中心是一個(gè)節(jié)點(diǎn)四個(gè)方向各連接一條邊。netedit允許先畫節(jié)點(diǎn)再連接邊也允許先畫邊再自動(dòng)生成節(jié)點(diǎn)。我的習(xí)慣是先在十字路口中心處放置一個(gè)節(jié)點(diǎn)把它作為四條道路的交點(diǎn)。在netedit中切換到“網(wǎng)絡(luò)編輯”模式選擇節(jié)點(diǎn)Node工具在畫布上單擊即可創(chuàng)建節(jié)點(diǎn)。默認(rèn)節(jié)點(diǎn)會(huì)顯示為一個(gè)圓圈。中心的這個(gè)節(jié)點(diǎn)就是未來信號(hào)燈的掛載點(diǎn)也是車輛轉(zhuǎn)彎軌跡的匯聚點(diǎn)。以中心節(jié)點(diǎn)為原點(diǎn)在它的上、下、左、右四個(gè)方向各自再創(chuàng)建一個(gè)節(jié)點(diǎn)作為道路的終點(diǎn)。整體看上去像一個(gè)“十”字。距離不用太嚴(yán)格先大致拉開200~300米等會(huì)兒可以精確調(diào)整坐標(biāo)。3.2 創(chuàng)建雙向道路的正確姿勢(shì)有了節(jié)點(diǎn)下一步是把它們連成邊。選擇“邊”Edge工具從中心節(jié)點(diǎn)拖向四向節(jié)點(diǎn)就能生成一條有向邊。但SUMO默認(rèn)生成的是單向邊需要手動(dòng)設(shè)置。選中一條邊在右側(cè)屬性面板找到allow和disallow同時(shí)找到spread type。對(duì)于城市道路最省事的做法創(chuàng)建完一條邊后復(fù)制一條方向相反的邊??梢杂每旖萱ICtrl Shift C復(fù)制選中的邊然后修改方向。更規(guī)范的操作方式在創(chuàng)建邊的同時(shí)按住Shift鍵netedit會(huì)自動(dòng)生成雙向道路即在兩個(gè)節(jié)點(diǎn)之間創(chuàng)建一對(duì)方向相反的邊。很多新手不知道這個(gè)功能導(dǎo)致建出來的道路只有單方向仿真時(shí)車輛無法返程。雙向道的屬性面板里numLanes建議設(shè)為2四車道雙向總共4條車道speed設(shè)為50表示50km/hSUMO默認(rèn)單位是km/h。priority字段后面再細(xì)說先保持默認(rèn)。3.3 車道數(shù)量和方向?qū)傩缘募?xì)節(jié)處理SUMO的車道屬性中allow很重要。默認(rèn)情況下車道允許所有車型通行。但我們做十字路口時(shí)往往需要區(qū)分直行、左轉(zhuǎn)、右轉(zhuǎn)專用道。在netedit中選中某條具體的車道注意是車道不是邊屬性面板里會(huì)有allow、disallow、width、speed等選項(xiàng)。width默認(rèn)是3.2米這個(gè)數(shù)值是SUMO根據(jù)典型城市道路自動(dòng)生成的。如果做的是窄巷子改成2.8米如果是寬闊的主干道改到3.5米。這里有一個(gè)容易忽略的點(diǎn)車道寬度不僅影響視覺效果還影響車輛變道時(shí)的橫向間隙計(jì)算。車道太窄標(biāo)準(zhǔn)小客車模型也能勉強(qiáng)通過但仿真的變道行為會(huì)變得很激進(jìn)。十字路口進(jìn)口道的車道方向?qū)傩孕枰謩?dòng)給每條車道設(shè)置轉(zhuǎn)向信息。SUMO中車道方向?qū)傩詔urn并不是直接在車道屬性里打勾而是通過“連接”來隱式定義。也就是說你需要先建好節(jié)點(diǎn)和邊再通過“創(chuàng)建連接”來告訴SUMO哪條車道可以直行、左轉(zhuǎn)、右轉(zhuǎn)。3.4 建立車道連接十字路口最關(guān)鍵的一步車道連接Connection定義的是“進(jìn)口道某條具體車道 - 出口道某條具體車道”的映射關(guān)系。沒有連接SUMO會(huì)自動(dòng)生成一些默認(rèn)連接但默認(rèn)邏輯很簡單——只允許最右側(cè)車道右轉(zhuǎn)其他車道直行左轉(zhuǎn)往往缺失。這遠(yuǎn)遠(yuǎn)不夠。在netedit中選中“連接”Connection模式選中進(jìn)口道的某條車道這時(shí)出口道所有車道會(huì)高亮顯示為可選狀態(tài)。再點(diǎn)擊對(duì)應(yīng)的出口車道就建立了一條連接。依次處理最左側(cè)車道左轉(zhuǎn)連接通常是到對(duì)向出口道的最左側(cè)車道中間車道直行連接到對(duì)向出口道的中間車道最右側(cè)車道直行右轉(zhuǎn)連接直接右轉(zhuǎn)到垂直方向出口道的最右側(cè)車道連接建立后路口的沖突區(qū)域Conflict Area會(huì)在畫布上以灰色網(wǎng)格顯示SUMO會(huì)自動(dòng)計(jì)算沖突點(diǎn)并標(biāo)記。如果某個(gè)連接和另一個(gè)連接沖突netedit會(huì)用紅色叉號(hào)提示。這個(gè)功能非常強(qiáng)大相當(dāng)于實(shí)時(shí)檢查路權(quán)的合法性。3.5 節(jié)點(diǎn)幾何形狀與轉(zhuǎn)向軌跡檢查SUMO的節(jié)點(diǎn)邊界Geometry決定了車輛駛過路口時(shí)的實(shí)際路徑。默認(rèn)情況下SUMO會(huì)根據(jù)道路夾角自動(dòng)生成轉(zhuǎn)彎曲線。但如果你發(fā)現(xiàn)仿真時(shí)左轉(zhuǎn)車流在路口中央“漂移”或者轉(zhuǎn)了個(gè)特別生硬的大彎說明節(jié)點(diǎn)的幾何形狀設(shè)置不合理。選中中心節(jié)點(diǎn)屬性面板里有shape和radius等參數(shù)。radius是轉(zhuǎn)彎半徑默認(rèn)值較小適合普通城市路口。如果做的是大型環(huán)形交叉口或者寬路口需要手動(dòng)調(diào)大半徑。實(shí)時(shí)檢查方法很簡單在netedit中把視角縮小按住Shift鍵拖出一條軌跡觀察車輛的既定路徑是否連續(xù)。這一步雖然不起眼但直接影響仿真是否能在后續(xù)正常跑起來。4. 信號(hào)燈設(shè)置與車道優(yōu)先級(jí)控制4.1 信號(hào)燈本質(zhì)上是程序化的“階段表”十字路口必須配信號(hào)燈否則車流會(huì)全部卡在沖突點(diǎn)。SUMO中的信號(hào)燈Traffic Light不是在路口畫一個(gè)燈就行了它的核心是一個(gè)“程序”Program程序里包含若干階段Phase每個(gè)階段定義了哪些信號(hào)燈組為綠、哪些為紅、持續(xù)多長時(shí)間。在netedit中選中中心節(jié)點(diǎn)右側(cè)屬性面板找到Type將其從priority改為traffic_light。此時(shí)節(jié)點(diǎn)會(huì)變?yōu)樾盘?hào)燈控制路口同時(shí)默認(rèn)生成一個(gè)包含三相位Phase的信號(hào)燈程序Phase 1東西向綠燈南北向紅燈持續(xù)時(shí)間默認(rèn)31秒Phase 2黃燈過渡默認(rèn)4秒Phase 3南北向綠燈東西向紅燈持續(xù)時(shí)間默認(rèn)31秒Phase 4黃燈過渡默認(rèn)4秒注意這個(gè)默認(rèn)程序沒有考慮左轉(zhuǎn)專用相位。如果你的路口有左轉(zhuǎn)專用車道且流量較大建議改成四相位或八相位即東西直行、東西左轉(zhuǎn)、南北直行、南北左轉(zhuǎn)每個(gè)方向之間用黃燈隔開。4.2 相位時(shí)間設(shè)置的參數(shù)邏輯為什么默認(rèn)綠燈時(shí)間是31秒黃燈是4秒這里涉及一個(gè)簡單的車輛啟動(dòng)波模型。假設(shè)飽和流率是1800輛/小時(shí)/車道也就是每2秒通過一輛車。綠燈31秒意味著最多能放行約15輛車黃燈4秒則考慮了車輛在路口制動(dòng)所需的清空時(shí)間通常按3~5秒設(shè)置。如果路口流量更大就需要增加綠燈時(shí)間但也要權(quán)衡對(duì)向車流的等待時(shí)間。SUMO本身不關(guān)心這個(gè)它只是機(jī)械執(zhí)行你給的時(shí)間表。真正研究信號(hào)配優(yōu)時(shí)會(huì)用TraCI或SUMO自帶的flowRouter等工具來動(dòng)態(tài)優(yōu)化而不是在netedit里拍腦袋。在netedit里修改相位時(shí)間很簡單選中信號(hào)燈節(jié)點(diǎn)在屬性面板的Program選項(xiàng)卡里直接編輯Duration數(shù)值。想要增加相位可以右鍵點(diǎn)擊相位列表選擇Add Phase。每個(gè)相位要保證至少有一個(gè)方向的綠燈否則可能出現(xiàn)“全紅”的無效狀態(tài)。4.3 車道優(yōu)先級(jí)和讓行規(guī)則怎么設(shè)置不是所有路口都有信號(hào)燈。在很多次干道/支路交叉口用的不是信號(hào)燈而是“讓行規(guī)則”Right of Way。SUMO里用priority字段來控制。在netedit中選中一條邊屬性面板里的priority數(shù)值越大優(yōu)先級(jí)越高。優(yōu)先級(jí)高的道路上的車輛可以不停車直接通過路口優(yōu)先級(jí)低的道路上的車輛則需要等待沖突區(qū)域清空后才進(jìn)入。這相當(dāng)于現(xiàn)實(shí)中“主干道先行、支路讓行”的規(guī)則。默認(rèn)情況下新建的所有邊優(yōu)先級(jí)都是-1意味著所有方向平等SUMO在這種情況下會(huì)采用“先到先得”的邏輯容易在路口產(chǎn)生死鎖。所以千萬記得把主干道邊的priority改為兩位數(shù)比如10支路保留-1或設(shè)為0。避坑指南如果做完信號(hào)燈后發(fā)現(xiàn)仿真中還是出現(xiàn)叉口沖突99%是因?yàn)楣?jié)點(diǎn)的Type還是priority而不是traffic_light。netedit只有在節(jié)點(diǎn)類型為traffic_light時(shí)才會(huì)執(zhí)行信號(hào)燈程序。5. 常見問題排查與仿真驗(yàn)證實(shí)錄5.1 路網(wǎng)驗(yàn)證netedit自帶的檢查功能完成路網(wǎng)繪制后首先要做的不是直接跑仿真而是讓netedit自帶的檢查器掃一遍。打開Processing - Check Network它會(huì)列出所有問題包括無出口的邊dead-end無連接的車道沖突區(qū)域未解決信號(hào)燈程序與相位不匹配這些問題在列表里點(diǎn)擊就能自動(dòng)定位到對(duì)應(yīng)元素。對(duì)照錯(cuò)誤信息逐一修復(fù)后再跑一次檢查直到零錯(cuò)誤為止。這一步和編譯器查語法錯(cuò)誤邏輯相同錯(cuò)誤不清理干凈后面的仿真必炸。5.2 在SUMO-GUI中運(yùn)行并觀察細(xì)節(jié)用SUMO-GUI打開生成的.net.xml加載后第一件事不是點(diǎn)“開始”而是先把Options - Simulation - Teleport關(guān)掉防止車輛因?yàn)槁窂讲豢蛇_(dá)直接被“傳送”到終點(diǎn)掩蓋路網(wǎng)問題。然后給四個(gè)進(jìn)口道各放一些車輛最簡單的方式是用Flow工具在每條邊上定義車輛流入。把仿真時(shí)間步長設(shè)為0.1秒點(diǎn)擊運(yùn)行仔細(xì)觀察左轉(zhuǎn)車輛是否在路口中央產(chǎn)生明顯阻塞直行車輛是否會(huì)因?yàn)檐嚨缹挾炔粔蚨鴾p速信號(hào)燈切換時(shí)是否存在某一瞬間所有方向都是紅燈死鎖或者都是綠燈嚴(yán)重沖突我曾遇到一個(gè)真實(shí)案例左轉(zhuǎn)車道連接到出口道的最右側(cè)車道車輛轉(zhuǎn)完后立刻橫跨三條車道變道到最左側(cè)導(dǎo)致后方直行車流直接剎停。排查后才發(fā)現(xiàn)是連接配置錯(cuò)了直行車道和左轉(zhuǎn)車道的出口映射關(guān)系反了。這個(gè)問題的根源就是連接時(shí)沒有想清楚“車道匹配”邏輯在netedit操作時(shí)由于視角原因看不太出來只有跑起仿真才現(xiàn)形。5.3 常見問題速查表與解決建議現(xiàn)象可能原因解決方法車輛在路口無限等待信號(hào)燈程序無效或節(jié)點(diǎn)類型未設(shè)為traffic_light檢查節(jié)點(diǎn)類型重新生成信號(hào)燈程序左轉(zhuǎn)車輛橫穿對(duì)向車流缺少左轉(zhuǎn)專用相位添加左轉(zhuǎn)相位或設(shè)置為“允許左轉(zhuǎn)沖突”模式車輛在路口內(nèi)急剎車道寬度不足/連接曲率過小增大節(jié)點(diǎn)radius加寬車道仿真直接崩潰存在無法解析的路網(wǎng)拓?fù)溥\(yùn)行netedit --check-network修復(fù)車道變色但沒車走邊方向設(shè)置錯(cuò)誤檢查邊的方向必要時(shí)復(fù)制反向邊5.4 導(dǎo)出分享交叉口路網(wǎng)文件打包項(xiàng)目最終生成的文件是cross240327.net.xml通常還會(huì)附帶.rou.xml車輛需求文件和.sumocfg仿真配置文件。如果整個(gè)項(xiàng)目需要分發(fā)建議用ZIP打包。ZIP壓縮后文件名是cross240327.net.zip看起來像是一個(gè)單一文件但里面至少包含三個(gè)文件cross240327.net.xml # 路網(wǎng)文件 cross240327.rou.xml # 車輛流量定義 cross240327.sumocfg # 仿真入口配置收件人拿到壓縮包后直接用SUMO-GUI打開.sumocfg就能一鍵啟動(dòng)仿真不需要重新建一遍路網(wǎng)。這也是為什么很多開源項(xiàng)目會(huì)以.zip形式發(fā)布路網(wǎng)數(shù)據(jù)——方便、完整、可復(fù)現(xiàn)。6. 進(jìn)階擴(kuò)展從交叉口到區(qū)域路網(wǎng)建好一個(gè)十字路口后下一個(gè)自然思路是把它擴(kuò)展為一個(gè)小型路網(wǎng)。這里涉及netedit的“復(fù)制”功能選中一個(gè)交叉口及其四條邊用Ctrl C復(fù)制再Ctrl V粘貼就能快速復(fù)制出另一個(gè)交叉口再通過連接道路把它們連成一個(gè)網(wǎng)格。但要提醒一句netedit的復(fù)制粘貼只復(fù)制幾何形狀不復(fù)制信號(hào)燈程序。新節(jié)點(diǎn)默認(rèn)是priority類型需要手動(dòng)再次設(shè)為traffic_light。如果你要大規(guī)模建網(wǎng)建議用腳本用netgenerate工具生成網(wǎng)格路網(wǎng)再手動(dòng)局部調(diào)整效率遠(yuǎn)高于純netedit。另外現(xiàn)實(shí)路網(wǎng)數(shù)據(jù)導(dǎo)入也是一個(gè)高頻需求。從OpenStreetMap導(dǎo)出區(qū)域地圖后用如下命令轉(zhuǎn)換為SUMO格式netconvert --osm-files map.osm --output-file map.net.xml這種做法的優(yōu)勢(shì)是路網(wǎng)信息完整包括車道數(shù)、限速、單行道但缺點(diǎn)是需要清理因?yàn)镺SM數(shù)據(jù)中的非機(jī)動(dòng)車道、人行道、步行區(qū)也會(huì)被轉(zhuǎn)換為SUMO路網(wǎng)導(dǎo)致路網(wǎng)過于復(fù)雜。實(shí)踐中我一般在導(dǎo)入后用netedit刪除不需要的元素再運(yùn)行一次檢查。對(duì)于做深度學(xué)習(xí)的讀者交叉口建模還能和強(qiáng)化學(xué)習(xí)控制器結(jié)合在SUMO的節(jié)點(diǎn)上配置TraCI信號(hào)燈控制接口用Python腳本實(shí)時(shí)讀取路口車輛排隊(duì)長度動(dòng)態(tài)調(diào)整相位時(shí)間從而優(yōu)化平均延誤。這類應(yīng)用的起點(diǎn)就是本文這個(gè)看似基礎(chǔ)的十字路口模型。數(shù)據(jù)結(jié)構(gòu)沒建對(duì)后面所有強(qiáng)化學(xué)習(xí)、流量預(yù)測(cè)都無從談起。再分享一個(gè)實(shí)用技巧如果后續(xù)要處理大量不同交叉口的批量仿真建議把路網(wǎng)XML和需求XML分開管理。.net.xml只存放路網(wǎng)結(jié)構(gòu)車輛流放.rou.xml兩者通過.sumocfg關(guān)聯(lián)。這樣當(dāng)信號(hào)燈配時(shí)方案需要反復(fù)實(shí)驗(yàn)時(shí)只需修改.sumocfg或.rou.xml不必改動(dòng)路網(wǎng)主體也方便版本管理。個(gè)人在跑多個(gè)配時(shí)對(duì)比實(shí)驗(yàn)時(shí)都是維護(hù)一套路網(wǎng)文件、多套需求文件用腳本批量修改.sumocfg的route-files字段幾十組實(shí)驗(yàn)一次跑完效率提升非常明顯。本文還有配套的精品資源點(diǎn)擊獲取