交通分配(DTA)核心機制與實操經(jīng)驗詳解)
簡介面向VISSIM交通仿真學(xué)習(xí)者與交通規(guī)劃人員這份PDF系統(tǒng)講解了動態(tài)交通分配DTA的核心定義與應(yīng)用方法。內(nèi)容涵蓋動態(tài)交通分配的概念、迭代仿真原則、前期準(zhǔn)備要點及節(jié)點、通路、停車場等建模工具并結(jié)合OD矩陣、修正LOGIT路徑選擇模型說明如何用VISSIM實現(xiàn)“用戶自學(xué)習(xí)”路徑選擇。其中還明確區(qū)分靜態(tài)分配與動態(tài)分配梳理了從GIS數(shù)據(jù)到宏觀路網(wǎng)、再到微觀路網(wǎng)加OD矩陣的轉(zhuǎn)化過程并對節(jié)點唯一性、通路關(guān)閉、停車場流量比例分配等實操要點給出具體說明可幫助讀者規(guī)避常見建模誤區(qū)。資源為1個PDF文件壓縮包大小2.15MB內(nèi)容緊湊適合作為學(xué)習(xí)筆記或快速查閱手冊。已有106人學(xué)習(xí)下載對于正在開展中大型路網(wǎng)仿真或需要理解DTA原理的讀者可結(jié)合原文建模規(guī)則與操作細(xì)節(jié)建立從宏觀路網(wǎng)到微觀仿真分配的完整認(rèn)知。 做交通仿真的人基本都繞不開 Vissim 這個名字。不管你是做信號配時優(yōu)化、公交優(yōu)先方案評估還是搞復(fù)雜的路網(wǎng)改造Vissim 的微觀仿真能力一直都很能打。但很多同學(xué)在接觸到“動態(tài)交通分配Dynamic Traffic AssignmentDTA”這個模塊時經(jīng)常是一頭霧水要么不知道怎么用要么把它和宏觀里的靜態(tài)分配搞混。我手頭這份《第六篇vissim動態(tài)交通分配定義.pdf》正好把 DTA 的概念和應(yīng)用場景梳理得比較清楚這篇就結(jié)合我自己這些年做項目的經(jīng)驗把動態(tài)交通分配這事的來龍去脈、實操要點和踩坑經(jīng)歷一次說透。先說清楚這篇博文能幫你解決什么問題如果你已經(jīng)會用 Vissim 做基礎(chǔ)的路網(wǎng)建模和仿真但還沒搞明白動態(tài)交通分配是干嘛的、什么時候該用、參數(shù)該怎么設(shè)那這篇文章就是給你準(zhǔn)備的。如果你正在糾結(jié)“為什么我的模擬車流不按預(yù)期走”“為什么 DTA 算來算去都不收斂”那這里的經(jīng)驗分享應(yīng)該能幫你少走很多彎路。1. 動態(tài)交通分配到底是在干什么很多剛接觸 Vissim 的人會有一個誤解覺得動態(tài)交通分配就是把 OD 矩陣往模型里一扔車輛自己就老老實實跑起來了。實際上Vissim 默認(rèn)的仿真方式是“固定路徑”也就是你在車輛輸入里給定起點終點和路徑車輛就照著這條路徑走不管路上堵成什么樣。這種方式在做小規(guī)模交叉口或短路段分析時沒問題但一旦路網(wǎng)范圍擴大、路徑選擇多了固定路徑就完全不靠譜了——因為它根本模擬不出“駕駛員因為前方擁堵而換路”這種最基本的交通行為。1.1 動態(tài)交通分配的核心定義動態(tài)交通分配簡單說就是讓車輛在仿真過程中根據(jù)實時的路網(wǎng)狀態(tài)自己動態(tài)地選擇行駛路徑。它不是預(yù)先給你設(shè)定好“從 A 到 B 必須走這條路”而是告訴車輛“從 A 到 B 有哪些路可以選擇每一條路的行駛時間是多少你自己判斷該走哪條”。這里的“動態(tài)”兩個字特別關(guān)鍵。它包含兩層意思第一層是路徑選擇的時間維度。Vissim 里的 DTA 不是一次性算完而是把整個仿真時間切成一個個小的時間區(qū)間比如 15 分鐘一個區(qū)間每個區(qū)間內(nèi)的交通需求和路況都不一樣車輛在每個區(qū)間里重新做一次路徑?jīng)Q策。這樣一來早高峰前期的車流和后期的車流走的路可能就完全不一樣了。第二層是路網(wǎng)狀態(tài)的實時反饋。這里的核心邏輯是一個迭代過程——車輛按照當(dāng)前的路網(wǎng)狀態(tài)選路而它們選路的結(jié)果又反過來改變路網(wǎng)狀態(tài)哪里堵了、哪里通暢了然后下一輪車輛再根據(jù)變化后的路網(wǎng)狀態(tài)重新選擇。這個循環(huán)反復(fù)迭代直到整個系統(tǒng)的交通流分布趨于穩(wěn)定。1.2 和靜態(tài)交通分配的本質(zhì)區(qū)別很多人之前可能在宏觀軟件比如 TransCAD、EMME里接觸過靜態(tài)交通分配覺得 DTA 不就是“用微觀軟件做一遍靜態(tài)分配”嗎還真不是一回事我給你列個對比表對比維度靜態(tài)交通分配Vissim 動態(tài)交通分配時間維度基于單一時段通常是高峰小時不考慮時間變化支持多時段能反映交通需求隨時間的變化路徑選擇依據(jù)基于路段的阻抗函數(shù)計算通常是經(jīng)驗公式基于微觀仿真跑出來的實際行程時間路網(wǎng)反饋阻抗隨流量變化但計算是解析的仿真中真實生成車輛軌跡擁堵、排隊現(xiàn)象顯現(xiàn)車輛個體行為忽略個體差異所有車輛統(tǒng)一按阻抗選路能模擬個體車輛的駕駛行為包含換道、跟馳等細(xì)節(jié)結(jié)果輸出得到路段的流量、V/C 比等不僅能得到流量還能看到每輛車的路徑、延誤、排隊等微觀指標(biāo)最大的差別在于靜態(tài)分配把路網(wǎng)當(dāng)做一個“數(shù)學(xué)方程”來解而動態(tài)交通分配把路網(wǎng)當(dāng)成一個“復(fù)雜系統(tǒng)”來模擬。后者能捕捉到靜態(tài)分配完全看不見的現(xiàn)象——比如說某條路在仿真第 20 分鐘開始出現(xiàn)嚴(yán)重?fù)矶氯缓髶矶虏蛏嫌位厮葸@時候后面的車輛會逐漸放棄這條路轉(zhuǎn)而去走原本比較繞但沒那么堵的次干路。這種“擁堵形成—擴散—路徑轉(zhuǎn)移”的動態(tài)過程靜態(tài)分配是模擬不出來的。1.3 什么時候才需要上 DTADTA 雖然強大但并不是所有項目都需要。我自己的判斷標(biāo)準(zhǔn)是如果路網(wǎng)規(guī)模很小、路徑選擇單一比如一段封閉道路或者單一交叉口直接用固定路徑就行別折騰 DTA因為 DTA 計算量大、標(biāo)定參數(shù)多殺雞用牛刀反而浪費時間。但如果有以下情況之一那就老老實實上 DTA路網(wǎng)面積達到幾平方公里包含多條平行道路、多個可選擇路徑。項目關(guān)注的是路網(wǎng)層面的運行效果比如施工導(dǎo)改方案比選、路網(wǎng)承載力評估。交通需求在時間上有明顯波動比如早高峰潮汐現(xiàn)象。需要模擬突發(fā)事件、交通事故或者交通管制對路網(wǎng)的影響。我接過一個新區(qū)路網(wǎng)評估的項目客戶起初用固定路徑跑結(jié)果怎么都還原不了現(xiàn)狀擁堵后來改成 DTA模型自動分配后擁堵位置和實際警情數(shù)據(jù)對上了說明這種場景下車輛的自主路徑選擇行為是不能被忽略的核心要素。2. Vissim 實現(xiàn) DTA 的核心機制拆解講完概念接下來要進入實操層面。先說清楚 Vissim 里 DTA 的底層工作原理不然你參數(shù)只會照著抄出了狀況根本不知道怎么調(diào)。2.1 車從哪里來、往哪里去OD 矩陣與路徑生成DTA 的起點是 OD 矩陣。在 Vissim 里OD 矩陣不是直接填在界面上的而是在“出行需求”部分通過矩陣文件.fma 或 .att導(dǎo)入。每一行代表一個起點Origin每一列代表一個終點Destination矩陣?yán)锏臄?shù)值代表單位時間內(nèi)的車輛數(shù)。這里要注意一點在 Vissim 的 DTA 模塊里OD 矩陣的單位默認(rèn)是“輛/仿真小時”不是“輛/時段”。之前有個朋友直接把宏觀模型里的高峰小時 OD 復(fù)制過來結(jié)果車流量放大了 4 倍路網(wǎng)全堵死了。原因是他的矩陣是 15 分鐘的需求量沒換算成小時的流率。有了 OD 矩陣之后Vissim 會在每次迭代時對每一對 OD 進行路徑搜索。路徑搜索的依據(jù)是路網(wǎng)拓?fù)浣Y(jié)構(gòu)和路阻信息。初始狀態(tài)下沒有實測路阻Vissim 會用路段的自由流車速估算一個初始行程時間找出幾條可行路徑生成一個“初始路徑集合”。之后的迭代就在這個集合里不斷調(diào)整分配比例。2.2 車輛憑什么選擇走這條路路徑選擇模型的秘密Vissim 的 DTA 路徑選擇模型核心是“隨機用戶均衡”Stochastic User EquilibriumSUE。聽起來高大上通俗解釋就是每個駕駛員對路徑的感知是有誤差的有人覺得這條路快有人覺得那條路快大家各有各的判斷。模型通過一個 Logit 型函數(shù)把這種感知誤差量化計算出各條路徑被選擇的概率。模型里有兩個關(guān)鍵參數(shù)直接影響路徑選擇行為第一個是“路徑選擇模型的靈敏系數(shù)”。這個參數(shù)控制著駕駛員對行程時間差異的敏感程度。參數(shù)值越大駕駛員越“精明”只要某條路稍微快一點就一窩蜂涌過去結(jié)果很容易導(dǎo)致振蕩參數(shù)值越小駕駛員越“遲鈍”即使兩條路時間差很多也會有一部分人選擇走慢路流量分布會更均勻。第二個是“行程時間感知誤差的標(biāo)準(zhǔn)差”。這個參數(shù)可以理解成不同駕駛員之間的判斷差異程度。默認(rèn)值一般是 10% 到 15%意思是說我們假設(shè)大多數(shù)駕駛員對某條路行程時間的估計有約 10% 左右的偏差。實際調(diào)試中如果你模擬的路網(wǎng)里有明顯的常發(fā)性擁堵但又希望流量分布得別太極端我一般把標(biāo)準(zhǔn)差適當(dāng)調(diào)大一點。2.3 模型里看不見但決定成敗的 C-Node 和仿真時段C-NodeConnection Node是 Vissim 動態(tài)交通分配里一個很容易被忽略但至關(guān)重要的設(shè)置。它的作用是告訴模型在哪些關(guān)鍵節(jié)點上需要統(tǒng)計車輛的路徑選擇行為數(shù)據(jù)并且允許車輛在這些節(jié)點之間進行路徑的切換。C-Node 一般設(shè)置在路網(wǎng)里比較重要的分叉點、立交節(jié)點或者多車道交匯處。設(shè)置得好不好直接影響到模型的計算效率和路徑合理性。如果你設(shè)置的 C-Node 太少模型中可以換路的地方就少路徑選擇就不夠靈活設(shè)置太多則計算量大幅增加而且容易產(chǎn)生不合理的“Z字形”繞路路徑。DTA 的仿真時段設(shè)置同樣重要。Vissim 允許你把整個仿真分成多個時段每個時段擁有獨立的路徑選擇更新頻率。例如仿真總時長 2 小時我通常設(shè)置每 15 分鐘更新一次路徑選擇也就是整個仿真過程有 8 個時段的路徑?jīng)Q策。這個值越大越能反映交通需求的時變性但計算時間也會成正比例上升。對于大多數(shù)項目15 分鐘到 30 分鐘的更新間隔是比較合理的區(qū)間。3. 實操流程從零開始跑通 DTA概念理解了接下來就是動手環(huán)節(jié)。我把 DTA 的整體操作流程梳理成一個標(biāo)準(zhǔn)的六步流程每一步都有配套的參數(shù)設(shè)置建議和我的實操心得。3.1 網(wǎng)絡(luò)準(zhǔn)備與 OD 錄入第一步是把基礎(chǔ)路網(wǎng)建好。這一步看起來簡單但有個關(guān)鍵點DTA 對路網(wǎng)拓?fù)涞耐暾砸髽O高任何斷頭路、缺失的連接都會直接導(dǎo)致路徑搜索失敗。我用固定路徑仿真的時候偶爾出現(xiàn)個別路段斷連影響可能不大但 DTA 模式下一條連接的錯誤就能導(dǎo)致整個 OD 對之間找不到路徑模型直接報錯。操作上建議先把連段Links和連接器Connectors全部檢查一遍尤其是匝道與主線連接、環(huán)島進出口這些容易出錯的地方。然后定義好“車輛輸入”把 OD 矩陣文件掛上。Vissim 會基于網(wǎng)絡(luò)自動識別 OD 所在的區(qū)Zones這些區(qū)必須覆蓋到所有起終點的出入口位置不然 OD 數(shù)據(jù)會匹配不上去。3.2 開啟 DTA 并設(shè)置關(guān)鍵參數(shù)在 Vissim 的“仿真”菜單下找到“動態(tài)賦值”相關(guān)的配置。這里需要填幾個關(guān)鍵的參數(shù)時間區(qū)間長度即前面說的路徑更新間隔默認(rèn) 15 分鐘我一般保持默認(rèn)除非交通需求在短時間內(nèi)變化特別大。最大迭代次數(shù)默認(rèn) 50 次一般 30 到 60 次足夠復(fù)雜路網(wǎng)可以放到 100 次??煽啃詷?biāo)準(zhǔn)這個參數(shù)用來判斷模型是否已經(jīng)收斂穩(wěn)定。默認(rèn)是 1%意思就是相鄰兩次迭代之間路徑選擇的變化比例小于 1% 就認(rèn)為是收斂了。另外要注意一個“同時重計算”的選項。勾選后車輛在仿真過程中每到一個節(jié)點會根據(jù)當(dāng)前路況重新決策一次這更貼近真實駕駛行為但計算量會顯著上升。我一般建議如果是做方案比選不勾選加快出結(jié)果的速度如果是做精細(xì)化的現(xiàn)狀還原或事件分析勾上會更真實。3.3 迭代計算與收斂判斷設(shè)置完參數(shù)就可以開始運行 DTA 了。Vissim 會自動做多輪迭代每一輪都是先跑一次仿真統(tǒng)計各路段的實際行程時間然后把路徑選擇依據(jù)更新再進行下一輪仿真。循環(huán)往復(fù)直到結(jié)果穩(wěn)定。這一步最考驗?zāi)托囊驗槟P驮酱竺枯喌臅r間越長。有一次我做城市核心區(qū)路網(wǎng)時單輪仿真 35 分鐘左右迭代了 40 輪才收斂一個晚上就這么搭進去了。所以我建議正式跑之前先把最大迭代次數(shù)設(shè)得小一點比如 10 次快速驗證模型有沒有 bug確保拓?fù)洹D、參數(shù)都沒問題再放開跑全量迭代。收斂判斷的標(biāo)準(zhǔn)不只看 Vissim 報出來的“穩(wěn)定百分比”我還會同時觀察兩個額外的指標(biāo)一是 OD 間行程時間的穩(wěn)定性二是關(guān)鍵路段流量的逐迭代變化曲線。判斷口徑一致了才能確認(rèn)模型是真的收斂而不是碰巧某次迭代數(shù)值接近。3.4 結(jié)果輸出與數(shù)據(jù)校驗跑完 DTA 后Vissim 可以輸出豐富的結(jié)果路徑文件.rsr記錄了每條路徑的具體走向評價文件里有每個路段、每個節(jié)點的流量、密度、排隊長度。這些結(jié)果導(dǎo)出后重點要跟實測數(shù)據(jù)做對比驗證。我強烈建議大家養(yǎng)成“兩次校驗”的習(xí)慣。第一層校驗是總體層面模型輸出的路網(wǎng)總行駛時間、總里程跟實際數(shù)據(jù)比如果偏差超過 15%-20%那前面的參數(shù)肯定有問題別急著出報告。第二層是局部層面挑幾條關(guān)鍵路段、關(guān)鍵流向看模型輸出的流量和實測流量差多少。如果整體誤差大、局部誤差無法解釋那就得回到參數(shù)設(shè)置和 OD 矩陣校準(zhǔn)的環(huán)節(jié)里找原因。我見過很多項目DTA 跑是跑通了但結(jié)果從來沒經(jīng)過實測校驗這種模型做出來的方案我是真不敢信。4. 常見問題與排查技巧實錄DTA 用多了很多坑明知在那兒還是防不勝防。我把這些年遇過的、還有身邊同行踩過的高頻問題整理出來做成一個速查表再挑幾個典型的情況展開聊一聊。問題現(xiàn)象可能原因處理建議迭代不收斂流量來回跳路徑選擇靈敏系數(shù)過高調(diào)低靈敏系數(shù)或增大感知誤差標(biāo)準(zhǔn)差車輛繞路嚴(yán)重出現(xiàn)Z字形路徑C-Node 設(shè)置不合理檢查 C-Node 數(shù)量和位置刪除不必要的節(jié)點OD 矩陣導(dǎo)入后車輛輸入異常矩陣單位或格式不對檢查“輛/小時”單位確認(rèn) .fma 文件格式某 OD 對之間沒有路徑路網(wǎng)拓?fù)洳煌暾麢z查斷頭路、缺失連接器確認(rèn)起終點在路網(wǎng)內(nèi)仿真速度極慢計算量爆炸C-Node 過多或網(wǎng)絡(luò)過大簡化非研究區(qū)域的細(xì)節(jié)只保留關(guān)鍵節(jié)點結(jié)果與實測差距過大OD 矩陣未校準(zhǔn)先做 OD 反推或手動調(diào)校校準(zhǔn)后再跑 DTA4.1 不收斂、流量振蕩——最常見的頭號問題不收斂是 DTA 最讓人頭疼的問題。典型表現(xiàn)是每輪迭代某條路的流量一會多一會少怎么都穩(wěn)定不下來。這種情況我遇到過很多次最普遍的根源是路徑選擇模型的靈敏系數(shù)太高。駕駛員太“聰明”了看到哪條路稍微快一點就全涌過去結(jié)果這條路下一輪就變堵流量又彈回原來那條路陷入死循環(huán)。處理辦法是降低靈敏系數(shù)讓流量分布更平滑。如果你已經(jīng)在一個小范圍內(nèi)反復(fù)調(diào)節(jié)參數(shù)但振蕩依然存在還有一種可能的原因是初始路徑集合太單一。建議在“路徑文件”設(shè)置里把每個 OD 對之間的最大備選路徑數(shù)提高一點比如從默認(rèn)的 3 條加到 5、6 條讓模型有更大的選擇空間往往能打破振蕩。4.2 車輛繞路變得不真實有時候仿真動畫里會出現(xiàn)一些很離譜的走法車輛為了從 A 點到 B 點跑到隔壁片區(qū)繞一大圈還走出 7 字形、Z 字形的路線。一看就是模型的問題不是真實駕駛員會做的選擇。這種問題絕大部分出在 C-Node 設(shè)置上。C-Node 是允許模型“重新決策”的節(jié)點如果某個片區(qū)內(nèi)沒有 C-Node車輛一旦進入該區(qū)域路徑就已經(jīng)鎖死了。為了讓行程時間較短的路徑也能被替代模型有時會從遠處繞。解決方法是檢查路網(wǎng)里的 C-Node 分布確保車輛在主要的分岔口、立交處有重新決策的機會同時刪掉那些加在普通路段中間、毫無意義的 C-Node。4.3 仿真時間與實際不符、性能慢DTA 比普通仿真慢很多是正常的因為每輪迭代都要重新跑一遍全仿真。但如果慢到離譜就需要自查了。我做過一個項目路網(wǎng)不大但模型跑得比之前大兩倍的路網(wǎng)還慢查到最后發(fā)現(xiàn)是 C-Node 數(shù)量設(shè)了 40 多個——每個節(jié)點都要統(tǒng)計路徑選擇數(shù)據(jù)計算量成倍增加。后來把不重要的節(jié)點砍掉一半速度立刻恢復(fù)正常。性能優(yōu)化的另一個經(jīng)驗是把非研究范圍的區(qū)域簡化。比如你做中心城區(qū)路網(wǎng)遠郊的道路其實可以用抽象的方式表達一條路代表多條路都可以。DTA 看重的是路徑選擇邏輯不是所有細(xì)節(jié)都值得微觀建模。4.4 結(jié)果與實測對不上、數(shù)據(jù)校驗的思路模型跑出來跟實際差得太遠很多人第一反應(yīng)是“調(diào)參數(shù)”比如把行車速度調(diào)低、把通行能力調(diào)小。但根據(jù)我的經(jīng)驗這種“盲調(diào)”基本沒有大用。真正要做的第一件事是檢查 OD 矩陣本身準(zhǔn)不準(zhǔn)。OD 矩陣是 DTA 的源動力源動力錯了后邊的路徑選擇模型再準(zhǔn)也沒有意義。最好的辦法是基于現(xiàn)狀觀測流量做一次 OD 反推或者至少用路段的實測流量對矩陣進行手動調(diào)校。我有一個習(xí)慣在跑 DTA 之前會用固定路徑的方式先跑一個“基礎(chǔ)校驗”看看路段流量和實際差多少先把這部分誤差解決掉再上 DTA整體的誤差控制會輕松很多。5. 從入門到進階DTA 項目實戰(zhàn)經(jīng)驗總結(jié)把前面這些基礎(chǔ)概念和問題排查說完再聊聊怎么把一個 DTA 項目從“能跑”做到“可信”。這部分我給不了什么萬能公式因為每個項目的地域特征、數(shù)據(jù)條件、需求重點都不一樣但有兩條經(jīng)驗是通用的一是“參數(shù)標(biāo)定必須有依據(jù)”二是“模型驗證必須多維度”。先說說參數(shù)標(biāo)定。很多初學(xué)者喜歡直接套默認(rèn)參數(shù)這沒什么問題默認(rèn)值在大多數(shù)項目里都能給出一個還不錯的起點。但如果你希望模型精度再高一個臺階就必須結(jié)合本地數(shù)據(jù)來做標(biāo)定。比如說路口間的自由流車速、駕駛員的路徑選擇靈敏度這些參數(shù)在平原城市和山地城市的表現(xiàn)差異就很大。我做過山地城市的一個項目因為坡度大、道路曲折駕駛員明顯更不愿意繞路靈敏系數(shù)默認(rèn)值就偏高標(biāo)定后調(diào)低了才符合實際。再說驗證。單一維度的驗證很容易騙人一個模型可能總體流量誤差不大但具體到某條關(guān)鍵路上誤差卻很大。我自己的做法是至少做三個維度的驗證路段流量對比、行程時間對比以及路徑比例的宏觀合理性判斷。如果某條平行道路模型里被大量選擇而現(xiàn)實中大家寧可擠主路也不走它多半是道路屬性設(shè)置有問題比如車道數(shù)、限速值、節(jié)點延誤參數(shù)和實際不符。最后分享一個我自己的習(xí)慣每個 DTA 項目我都會保留一份“參數(shù)變更記錄表”記下哪一天改了哪個參數(shù)、改之前的結(jié)果是什么、改之后的結(jié)果是什么。這個習(xí)慣幫我解決過很多次“之前還好好的怎么現(xiàn)在不行了”的問題。做模型調(diào)試跟寫代碼差不多沒有版本管理和變更記錄早晚要栽跟頭。Vissim 的動態(tài)交通分配功能本質(zhì)上是把“路徑選擇”這件事從靜態(tài)的數(shù)學(xué)計算變成了一場動態(tài)的、自適應(yīng)的模擬。搞懂它你的模型才算真正有了“生命力”。這篇我只是把最底層、最關(guān)鍵的邏輯和實操要點梳理了一遍真到項目里每一個參數(shù)都可能需要反復(fù)試。如果大家在實際操作中遇到我上面沒提到的奇怪問題歡迎在評論區(qū)把現(xiàn)象甩出來我們一起來拆一下原因。本文還有配套的精品資源點擊獲取