0

我正在开发 Veins 框架,在 OMNET++ 内部使用 SUMO 来模拟基于博洛尼亚加入数据集的流量(可在http://sumo.dlr.de/wiki/Data/Scenarios获得)。最初的想法是使用最短路径将消息转发到其目的地(场景中的静止点,RSU)。之后我会做一些改进,但首先我需要知道如何创建从车辆到 RSU 的最短路径。我见过一些人提到 Dijkstra 来做这件事,但可能要使用 Dijsktra,我需要一个场景图表,它不提供图表(可能它是一个未加权的图表)。你建议我用什么来创建最短的路线?

所以基本上我需要的是在我的场景中实现一个 GPS 系统,为我提供到 RSU 的最短路径。

谢谢!

4

2 回答 2

1

如果您的图表未加权,您可以进行简单的广度优先搜索。该图不需要显式提供,只要您可以检索每个节点的邻居就足够了。在 Python 中,它看起来类似于以下内容,从 node 开始v,寻找 nodersu并具有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)
于 2016-11-11T11:45:50.177 回答
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与边缘。

Veins 中对应的函数是TraCICommandInterface::Vehicle::newRoute(std::string roadId)TraCICommandInterface::Vehicle::getPlannedRoadIds()

于 2016-11-16T20:13:22.277 回答