1. 程式人生 > >SUMO文件028:來源於觀測點的路徑

SUMO文件028:來源於觀測點的路徑

Demand/Routes from Observation Points

自從0.9.5開始,SUMO安裝包裡就有一個路徑模組為DFROUTER。當初開發這個模組的原因就是基於,現在很多高速的測量資料是根據感測線圈測量的,得到進入流量和駛出流量。一旦給出了這些資訊,那麼假設高速上的流就已經知道了。DFROUTER直接使用感測線圈的資料區重建車輛的數量和路徑。主要是通過以下的幾個步驟實現的:

1)、計算(選擇的儲存)感測器的型別,每個感測器設定為源檢測器(a source detector)、接受檢測器(a sink detector)和內檢測器(an in-between detector)。

2)、計算(選擇性的儲存)檢測器之間的路徑(routers);

3)、計算檢測器之間的車流量(flowamount)

4)、儲存車流量和進一步的控制結構(furthercontrol structures)

注意:

DFROUTER應用在高密度的城市路網中略顯不足。另一個可用的方法是動態校準(訪問:dynamic calibration)。

1、計算探測器型別

DFROUTER假設路網全部被檢測器覆蓋。意味著所有的路段均有檢測器安裝。但是它屬於哪一種檢測器(源、接受還是內)並沒有初始化。但是這是必須的。為了實現這個,DEROUTER需要路網和檢測器的定義列表,列表寫明瞭檢測器的位置。net.xml檔案就是先前生成的路網檔案,只需要跟在命令—net-file(可以簡寫-n)後面,檢測器的列表檔案跟在命令—detector-files(可以簡寫-d)後面。一個檢測器檔案應該按照如下的格式書寫:

<detectors>
   <detectorDefinitionid="<DETECTOR_ID>" lane="<LANE_ID>"pos="<POS>"/>
... furtherdetectors ...
</detectors>


這表明一個檢測器可以通過一個ID、所在的車道和位置資訊確定。

id:表明檢測器的一個字串;

lane:檢測器所在的車道;

pos:在車道上的位置,為-1*laneLength到laneLength之間。如果是負數則從車道的尾部開始計算。

給定一個路網和一個檢測器列表,DFROUTER能夠分配檢測器的型別,通過命令—detectors-output來實現。輸出檔案類似上面看到的內容,但是多了一個type屬性,其中type屬性的值為:source、sink、between和discarded。你也可以生成你感興趣區域POI的列表,每一個POI代表一個檢測器,通過不同顏色表示不同的型別:綠色source、紅色sink、藍色in-between和黑色discarded。要實現這個,需要使用命令—detector-poi-output。

檢測器檔案的輸出檔案(output_file)仍可以作為檢測器輸入檔案(file)。這種情況下檢測器型別不在倍計算,如果想強制進行計算,則可以通過命令—revalidate-detector實現。

2、計算路徑routes

現在我們知道了車輛從哪裡進入從哪裡駛出了,我們可以計算每對的路徑【沒太明白】。DFROUTER被告知可以通過命令實現—routers-output,輸出檔案就是路徑檔案rou.xml。生成檔案僅僅有路徑(routes),並沒有車輛型別和車輛。

現在,僅僅計算了從源檢測器到接受檢測器的資料。通過使用命令—routes-for-all實現全部的路徑。命令-all-end-follower將會是路徑不會再源檢測器處停止,而是緊隨其後的道路。命令—keep-unfinished-routes將會保留哪些沒有覆蓋檢測器的路徑。

3、計算車流

接下來就是根據計算的routes和真實世界的流量資料來計算flows。flows通過命令—messure-files來給出。假設儲存為csv格式,分號作為分隔符。檔案形式如下:

Detector;Time;qPKW;qLKW;vPKW;vLKW
myDet1;0;10;2;100;80
... further entries ...


表示了必須命名的條目,順序無關但是不能缺少:

Detector:檢測器的ID,應該是前面定義的檢測器檔案中的字元;

Time:開始進入的時間週期(分鐘為單位);

qPKW:在時間內通過檢測器的普通車輛數(passengercar);

vPKW:通過的平均速度;

接下來的兩個屬性是可選的:

qLKW:在時間內通過檢測器的運輸車輛數(transportcar);

vPKW:通過的平均速度。

These are not quite the values to be foundin induction loop output.【這句不太懂】我們不得不約束檢測器流檔案<DETECTOR_FLOWS>,因為DEROUTER打算讀取很多的資料。

有時候檢測器定義檔案的時間和模擬開始的時間不相同,可以通過命令—time-offset實現,這個值就是讀取時間減去後的值。

4、儲存流flows和其他的值

如果流flow的定義給出,那麼我們可以使用DFROUTER儲存計算的車輛和他們的路徑。車輛將會在源檢測器處放置。DFROUTER通過命令—emitters-output生成車輛。檔案將會包含在源檢測器位置的車輛發射器定義。如果沒有值給出,那麼車輛將不會被寫入。同時,there will be routeDistributionseach withthe same name as a detector. These reflect the distribution of routes at thedetector with the same ID.

一些方法使用速度限制去避免open-end的問題,DFROUTER能夠生成速度觸發器(參考variable speed signs,VSS),放置在sink檢測器上。可以通過命令—variable-speed-sign-output生成速度觸發器檔案。變速定義將會寫入檔案“vss_<檢測器ID>.def.xml”中。

為了不再off-ramps處結束車輛的路徑,允許車輛在sink檢測器處重新進行路由(rerouter)定義。通過命令—end-rerouter-output將會生成一系列重路由定義。請注意,如果沒有重路由定義,那麼DFROUTER將不會進行定義,因為除了檢測器周邊因外不知道其他的資訊。

可以檢查是否模擬是想象中的那樣。To validate whether the same flows are found within thesimulation as within the reality, the option --validation-output<SUMO_DETECTORS_OUTPUT> may be helpful. It generates a list of detectordefinitions (see "inductive loop detectors") placed at the positionsof sink and in-between detectors. Their output will be saved into files named"validation_det_<DETECTOR_ID>.xml" and should be easilycomparable to the detector flows previously fed to the router. The option  --validation-output.add-sources will letDFROUTER also build inductive loop detectors for source detectors which areplace 1m behind the real-life detector's position.

5、如何包含檔案

DFROUTER在所有的sumo中的路徑模組中是比較特殊的,它的路徑檔案和車輛檔案是分開的。你必須確保他們的順序是正確的(參考:)另外,這個模組在它的emitters發射西檔案中沒有儲存車輛。你可以如下操作:

dfrouter --net-file net.net.xml --routes-output routes.rou.xml --emitters-output vehicles.xml ..

.

sumo還必須進行如下操作:

sumo --net-file net.net.xml --additional-files routes.rou.xml,emitters.rou.xml


sumo --net-file net.net.xml --route-files routes.rou.xml,sorted_emitters.rou.xml
 sumo --net-file net.net.xml --route-files sorted_emitters.rou.xml --additional-files routes.rou.xml