"flowrouter.py" serves as a drop in replacement for dfrouter which calculates a set of routes -o and traffic flows -e from given detectors -d and their measurements -f on a given network (option -n).
Flowrouter works by solving a maximum flow problem in the given network assuming the measured flows as capacity. The input data is by default aggregated over the whole file but can be split into intervals by setting -i. Example call for hourly aggregation:
<SUMO_HOME>/tools/detector/flowrouter.py -n input_net.net.xml -d detectors.xml -f flows20140520.csv -o routes.xml -e flows.xml -i 60
Detectors which have no data (in the specified interval) or are permanently zero are ignored by default. To include them into the calculations use --respect-zero.
For additional parameters call
flowrouter.py is under continuous development. If it fails to deliver the expected results, try using the latest development version.
The traffic flow file is described in the corresponding dfrouter documentation.
As detector file input you can either use
- The detector file as described in the dfrouter documentation
- A detector file with types as generated by dfrouter
- a file with induction loop definitions
When loading a detector file without
type information or setting the option --revalidate-detectors, all network edges will be re-classified as sources, sinks or
- any edge without incoming edges will be marked as a source
- any edge without outgoing edges will be marked as a sink
- any edge that is neither source or sink is in-between
Generating vehicles with additional parameters#
With the option --params <STRING>, additional parameters can be given to the generated vehicles (note, usage of the quoting characters).
<SUMO_HOME>/tools/detector/flowrouter.py -n input_net.net.xml --params="departLane=\"best\" departSpeed=\"max\" type=\"myType""
This would insert the vehicle with high speed on a reasonable lane. The vehicles would be defined with type myType (which could also be the name of a typeDistribution).
In many cases, the solutions for a given input is not unique. It is often the case, that a large proportion of the solution space contains "implausible" (i.e. looped / detour) routes. Some strategies for mitigation are described below. In some cases it may be better to use the routeSampler tool instead.
Distribution among candidate successors#
By setting the option --limit <INT>, the flow is assigned in multiple iterations. This can increase running time but causes flows to be distributed more evenly so that all routes are used in proportion to the incoming and outgoing flows (similar to the behavir of dfrouter).
Restricting generated routes#
With the option --flow-restrictions <FILE>, flow restriction for routes may be given. Each line in the input file takes the form:
<FLOW1> <EDGE1> <EDGE2> ... <EDGEk>
This specifies the maximum flow for a route that consists of the given edges. Alternatively, the flow for a single edge can be restricted with an input line:
The tool implausibleRoutes.py can be used to generate restrictions for routes that are implausible according to a configurable heuristic.
This script does the reverse of flowrouter.py and dfrouter in generating a traffic counts for detectors from a route or flow file. It's main purpse It can also be used to compare the input counts with the outputs of flowrouter.py and dfrouter. Example:
<SUMO_HOME>/tools/detector/flowFromRoutes.py -d detectors.xml -r routes.xml -e flows.xml
This script is similar to flowFromRoutes. It generates traffic counts for detectors but uses edgeData files as input instead of routes. It requires the use of an input flow file and then performs a comparison between input flows and edgdata flows
<SUMO_HOME>/tools/detector/flowFromEdgeData.py -d detectors.xml -e edgedata.xml -f flows.txt
This script converts detector flow files to into edgeData format (i.e. to be used by routeSampler.py) Example:
<SUMO_HOME>/tools/detector/edgeDataFromFlow.py -d input_detectors.det.xml -f input_flows.txt -o edgedata.xml
Filters a flow file by detector ids and time range
<SUMO_HOME>/tools/detector/edgeDataFromFlow.py -d det1,det2 -f input_flows.txt -b 3600 -e 7200 -o output_flows.txt
Given a file
det.csv of the following form
id;lat;lon det1;52.432559;13.496612;1000 det2;52.432373;13.496142;500
It can be turned into a file with detectors with:
<SUMO_HOME>/tools/detector/mapDetectors.py -n net.net.xml -d det.csv -o det.add.xml