長安大學 信息工程學院 韓小龍
基于著色petri網的高速公路交通流建模與仿真
長安大學 信息工程學院 韓小龍
作為一種高級petri網,著色petri網是對經典petri網的拓展和延伸,其仿真工具CPN Tools支持功能強大的元語言(ML),擴展性比較強。
1.經典petri網。經典petri網是由庫所(place)、變遷(transition)和一組弧線(ares)組成的雙向圖。不同類型節點之間用弧線直接相連,同類型節點間則不能直接相連。本文,筆者用圓圈表示庫所,用矩形形式表示變遷。經典petri網模型如圖1所示。

圖1 經典petri網模型
2.著色petri網。著色petri網通過不同的顏色對托肯進行分類,以實現系統的折疊和簡化。著色petri網的顏色主要是針對托肯和庫所設置的。
(1)通常把染色托肯分為幾種類型,而把類型稱為顏色。因此,可以把顏色看成是數據類型,對不同的屬性的托肯賦以不同的顏色。在著色petri網中,一種顏色的托肯代表一類具有相同屬性的元素;在經典petri網中,一個托肯只代表一個元素或資源。
(2)基本petri網的發射條件與著色petri網的托肯的發射條件是不相同的。在著色petri網中,在任意2個節點間的有向弧上,都表示一個相應的權值函數,每個權值函數明確地規定了相應的發射條件,包括變遷節點在其輸人位置節點所應有的色點的顏色、變遷節點在完成發射后應清除的和應產生的色點的顏色等內容。
假設在某路段上設有出口和入口匝道。對該路段,以距離X為單位將該路段路段劃分為N段,選取其中的i-1,i,i+1段作為研究對象,而且i-1不是起始段,i-1也不是終點段。通常將q隨道路坐標x連續變化的規律離散化,即把一條道路按照其實際和交通狀況劃分為若干段,使得在每一段內交通狀態可近似成一的,每一段內車道數不變,至多有1個入口和出口。高速公路路段模型如圖2所示。

圖2 高速公路路段模型
設第i路段內交通流量為qi,入口、出口匝道流量分別為ri,si,則

式(1)即為穩態流量模型,這是一個遞推模型。只要知道起始端主線流量q0及各入口、出口匝道的流量,即可用式(1)計算出各段的流量qi(i=1,2,…)。
1.CPN Tools建模。根據高速公路路段的模型,建立交通流的CPN模型,如圖3所示。

圖3 高速公路路段交通流的CPN模型
庫所a和變遷generate1為路段i的起始點,具有初始車流量,準備進入此段路口,而變遷generate1模擬交通流通過路口并且產生新的交通量。庫所a的顏色集為UNIT(單元集)并且是時間集,在庫所a上的token用于確定新的車流量何時產生,其token的時間標記將確定變遷generate1發生的時間,在庫所a上初始標記是沒有token的。
2.變遷generate1。變遷generate1是用于產生1個token放置在庫所a中,對增加到庫所a中的token的時間標簽是由從變遷generate1到庫所a上的時間標記@+expTime(100)所創建的。expTime函數將從指數隨機分布函數中返回1個值,來確保產生的token不總是在0時刻到達的。同理,庫所b和generate2的作用與之相同,而庫所b和generate2代表路段i的入口匝口的模型。
庫所1–1為路段i的主干道和入口匝口的匯集點,變遷f2為匯合后的車流進入此路段的過程,并且進行相應的排隊。庫所queue1隊伍形成后車流的狀態,至變遷pass1即將駛離此路段,車輛離開隊伍。庫所select1則是出口匝口與進入下一路段的分離點,車輛再次選擇行進方向。out1為通過主干道的車輛,out2通過出口匝口的車輛。CPN模型中元素的說明見表1。

表1 CPN模型中元素的說明
全局聲明如下:
colset UNIT = unit timed;
colset INT = int timed;
colset CarType= with A | B;
colset CAR_A= record cartype:CarType*CARNUM:INT*GT:INT;
var cvar:CAR_A;
colset QUEUE= list CAR_A;
var q:QUEUE;
fun Generate()=
let
val car= poisson(100.0)
in
car
end;
fun intTime() = IntInf.toInt (time());
fun nlength[]= 0|nlength(x::xs)= 1+nlength xs;
fun expTime (mean: int) =
let
val realMean = Real.fromInt mean
val rv = exponential((1.0/realMean))
in
fl oor (rv+0.5)
end;
fun newcar() = {cartype= CarType.ran(),
CARNUM = Generate(),
GT = intTime() }
通過全局聲明可編寫相應的計算機程序,有利于實現對CPN Tools模型的分析。
book=45,ebook=90