2016-11-11 7 views
0

OMO ++에서 SUMO를 사용하여 볼로냐에 가입 한 데이터 집합 (http://sumo.dlr.de/wiki/Data/Scenarios)을 기반으로 트래픽을 시뮬레이트하는 Veins 프레임 워크에서 작업하고 있습니다. 첫 번째 아이디어는 최단 경로를 사용하여 대상 (시나리오의 정지 지점, RSU)으로 메시지를 전달하는 것입니다. 그 후 나는 약간의 개선을 할 것이지만, 처음에는 차량에서 RSU까지 최단 경로를 만드는 방법을 알아야합니다. 일부 사람들이 Dijkstra에 대해 언급 한 것을 보았지만 아마도 Dijsktra를 사용하기 위해 시나리오의 그래프가 필요할 것이고 그래프를 제공하지 않을 것입니다 (아마 가중치가없는 그래프 일 것입니다). 가장 짧은 루트를 만드는 데 사용하기 위해 내가 추천하는 것은 무엇입니까?차량에서 RSU로 최단 경로 얻기 (GPS와 유사)

그래서 기본적으로 내 시나리오에서 GPS 시스템을 구현하여 RSU에 대한 최단 경로를 제공합니다.

감사합니다.

답변

1

그래프에 가중치가 적용되지 않은 경우 간단한 너비 우선 검색을 수행 할 수 있습니다. 그래프를 명시 적으로 제공 할 필요는 없으며 각 노드의 이웃을 검색 할 수 있다면 충분합니다. 파이썬에서 그것은 유사 것, 노드 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