2016-11-11 35 views
0

我正在使用SUMO模擬基於博洛尼亞加入數據集(可在http://sumo.dlr.de/wiki/Data/Scenarios處獲得)的OMNET ++內靜脈框架。首先想法是使用最短路徑將消息轉發到其目的地(場景中的駐留點,RSU)。之後,我會做一些改進,但起初我需要知道如何創建從車輛到RSU的最短路線。我見過一些人提到Dijkstra這樣做,但可能使用Dijsktra我需要一個場景圖,它不提供圖(可能它是一個未加權的圖)。你推薦我用什麼來創建最短路線?獲取從車輛到RSU的最短路徑(類似於GPS)

所以基本上我需要的是在我的場景中實現GPS系統,爲我提供RSU的最短路徑。

謝謝!

回答

1

如果你的圖未加權,你可以做一個簡單的廣度優先搜索。該圖不需要明確提供,只要您可以檢索每個節點的鄰居就足夠了。在Python它看起來類似於下面的從節點v出發,尋找節點rsu並具有功能getNeighbors(n)提供n鄰居:

queue = [v] 
bfsTree = {} 
bfsTree[v] = None 
while len(queue) > 0: 
    currentNode = queue.pop(0) 
    for n in getNeighbors(currentNode): 
     if n not in bfsTree: 
      bfsTree[n] = currentNode 
      if n == rsu: 
       del queue[:] 
       break 
      queue.append(n) 
if rsu not in bfsTree: 
    print("no path from v to rsu") 
else: 
    path = [rsu] 
    while path[0] != v: 
     path.insert(0, bfsTree[path[0]]) 
    print("shortest path from v to rsu:", path) 
+0

感謝您的回答,但該解決方案似乎給出了節點到達RSU的路徑,並且我需要路線(街道或路口的名稱)到達目的地,就像GPS系統所做的一樣。 –

0

如果你只是在街上圖中的最短路徑,你可以輕鬆使用現有的TraCI功能。您可以使用此命令http://sumo.dlr.de/wiki/TraCI/Change_Vehicle_State#change_target_.280x31.29來更改車輛的目標,然後使用這個帶有邊緣的http://sumo.dlr.de/wiki/TraCI/Vehicle_Value_Retrieval#Command_0xa4:_Get_Vehicle_Variable來檢索路線邊緣。

靜脈中的相應功能是TraCICommandInterface::Vehicle::newRoute(std::string roadId)TraCICommandInterface::Vehicle::getPlannedRoadIds()

+0

對不起,花了這麼長時間纔回答,我正在對代碼和場景進行一些調整,然後才能測試它。這似乎是我需要的,但使用這些功能的車輛路線將發生變化,我該如何防止這種情況發生? –

+0

您可以保存舊路線並在之後重置,或者爲路線計算添加虛擬車輛。 – Michael