When running a simulation in SUMO
with routes generated by duarouter
on a grid-like network, after a certain amount of time, the vehicles start to concentrate on the middle of the grid and in junctions due to the fact that the routes are generated using a shortest path algorithm (dijkstra
, astar
, CH
or CHWrapper
). How to generate random routes that are not created with a shortest path algorithm and do not make vehicles behave in that manner?
The usual way of preventing this is to use dynamic assignment, that is using SUMO's duaIterate.py script to calculate route distributions based on the travel time in a previous iteration of the simulation. So if you have a trip file (maybe from randomTrips.py) just call
duaIterate.py -n net.xml -t trips.xml
If you really want random routes you can try to give intermediate points (option -i
) to randomTrips.py but it will still give shortest paths between those. Alternatively you could write a simple script yourself which parses the network and the connections and tosses a coin at each junction where to drive next. In Python something like the following would do:
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()))
This code ignores that the connections or edges are maybe not usable by the vehicle type you use but I hope you get the idea. For details on using sumolib, see http://sumo.dlr.de/wiki/Tools/Sumolib