2016-06-07 38 views
0

我有興趣根據使用MATSim API進行交通模擬的鏈路權重來計算路線。每條鏈路都有一個安全索引屬性,計算出的路由應該代表最安全的路徑。 Dijkstra路由算法計算最短路徑。如果我只能指定算法應該考慮安全索引而不是長度,那麼使用它是完美的。我不知道是否可以在MATSim中做到這一點,以及如何。或者在MATSim中實現的其他路由算法可以更好地適應。在MATSim中計算最安全的路線

謝謝!

+0

那麼...你的問題是什麼? – Gendarme

回答

1

這應該有可能實現您自己的TravelDisutility-Class。看看界面org.matsim.core.router.util.TravelDisutilityorg.matsim.core.router.costcalculators.FreespeedTravelTimeAndDisutility中只能看到自由速度的實現。你可以從這個開始,並調整它,使得getLinkTravelDisutility()將返回一個不是基於速度的值,而是基於你的保存索引。請注意,值必須大於0,較小的值(即接近0)優於較大的值。

我不知道你是如何計算你的安全指數的,但你應該通過鏈接的長度以某種方式對它進行標準化。否則,一個長鏈接可能比一系列短鏈接更受歡迎,即使它們都具有相同的安全值。

一旦你實現了,你可以使用Guice綁定它。這個例子可以在類org.matsim.run.InitRoutes中找到。然後它應該用於MATSim中的路由。

+0

謝謝你的幫助!我直接在network.xml文件中將freespeed的值更改爲安全索引。首先,我運行XY2Links.run方法,該方法創建了新的計劃文件,其中包含指定起點和終點的鏈接。在運行InitRoutes.run方法之後。 – DanaKazi

+0

@DanaKazi:錯誤的自由速度的安全指數是非常危險的!它只適用於你只計算路線,而沒有別的!只要您使用相同的網絡進行仿真,仿真將使用安全指數作爲速度限制,然後仿真中的流量將會非常錯誤! – cello