При запуске моделирования в SUMO
с маршрутами, созданными duarouter
в сети, подобной сетке, по прошествии определенного времени транспортные средства начинают концентрироваться в середине сетки и на перекрестках из-за того, что маршруты генерируются с использованием алгоритм кратчайшего пути (dijkstra
, astar
, CH
или CHWrapper
). Как генерировать случайные маршруты, которые не создаются с помощью алгоритма кратчайшего пути, и не заставляют автомобили вести себя подобным образом?
SUMO - Как создавать маршруты без использования алгоритмов кратчайшего пути?
Ответы (1)
Обычный способ предотвратить это - использовать динамическое присвоение, то есть использовать SUMO duaIterate.py сценарий для расчета распределения маршрутов на основе времени в пути на предыдущей итерации моделирования. Поэтому, если у вас есть файл поездки (возможно, из randomTrips.py), просто позвоните
duaIterate.py -n net.xml -t trips.xml
Если вам действительно нужны случайные маршруты, вы можете попробовать указать промежуточные точки (опция -i
) для randomTrips.py, но он все равно будет давать кратчайшие пути между ними. В качестве альтернативы вы можете сами написать простой скрипт, который анализирует сеть и соединения и подбрасывает монету на каждом перекрестке, куда двигаться дальше. В Python можно было бы сделать что-то вроде следующего:
import random, sumolib
net = sumolib.net.readNet('myNet.net.xml')
route = [net.getEdge('startEdge')]
while len(route) < finalLength:
route.append(random.choice(route[-1].getToNode().getOutgoing()))
Этот код игнорирует то, что соединения или ребра, возможно, не подходят для используемого вами типа транспортного средства, но я надеюсь, что вы уловили идею. Подробнее об использовании сумолиба см. http://sumo.dlr.de/wiki/Tools/Sumolib < / а>