Hello,
Ah, that makes sense. However, the output also contains an error. The
complete list of vehicle definitions is in a block comment, since the
configuration comments at the start of the file are not properly closed
before the vehicle definitions are written. I attached the file that
sort_routes.py generated, I only removed all vehicles in between the first
and the last one.
In the python code I see that the original lines are copied until it reads
"<routes". But in comment lines there is a flag definition "<routes-output"
so the copying ends at that line unintendedly. Apart from that, all the
route distributions and vehicle definitions in the file that dfrouter
generated start after a line with "<additional>" instead of "<routes>". So
I guess the python file should be altered a bit here. I fixed the python
file for my case, I'm not sure how generic it is. But I attached the
changed python file so you can have a look at it. I only changed the
contents of the for-loop in the main method.
Greetings,
Pieter
On 19 February 2014 16:03, Jakob Erdmann <[email protected]> wrote:
> Hello,
> you need to sort the emitters file (containing <vehicle> elements).
> regards,
> Jakob
>
>
> 2014-02-19 12:15 GMT+01:00 Pieter Loof <[email protected]>:
>
> Hello,
>>
>> Thank you for the useful reactions, I see there is a tool for sorting the
>> route file. However, when I run sort_routes.py I get the output "read 0
>> elements. wrote 0 elements." and no errors. The output file that is
>> generated contains some comments, but no route data. Now that I think of
>> it, doesn't the python script need the vehicle file in order to be able to
>> sort the routes?
>>
>> I read these reactions just after I sent a mail with an overview of my
>> bug reports (which also includes this scenario as "sumo_segfault" but then
>> with screenshot and reduced vehicle file size). So if the crash problem we
>> are discussing is solved already then you can ignore this scenario that I
>> just sent again in my bug overview message.
>>
>> Greetings,
>> Pieter
>>
>>
>> On 19 February 2014 09:16, Jakob Erdmann <[email protected]>wrote:
>>
>>> Hello,
>>> the crash appears to be resolved by changes in the latest svn revision
>>> (not just related to slight changes in driving dynamics).
>>> regards,
>>> Jakob
>>>
>>>
>>> 2014-02-19 8:26 GMT+01:00 Jakob Erdmann <[email protected]>:
>>>
>>> Hello,
>>>> thank for for reporting the crash and sending the files.. I was able to
>>>> reproduce it with 0.19.0 and will look into the matter. As a workaround you
>>>> may want to use the latest svn version which ran the scenario without
>>>> crashing.
>>>>
>>>> Please note that the option --lanechange.duration which you are using
>>>> is rather new and bugs were recently discovered: (
>>>> http://sumo-sim.org/trac.wsgi/ticket/1152,
>>>> http://sumo-sim.org/trac.wsgi/ticket/1153).
>>>>
>>>> Regarding the problem of unsorted vehicles in the dfrouter output,
>>>> please look at the updated documentation here:
>>>> http://sumo-sim.org/wiki/Demand/Routes_from_Observation_Points#How_to_include_the_files
>>>> As Daniel mentioned we do not use DFRouter very often, which is why
>>>> this annoyance is not yet fixed. (But here is a ticket:
>>>> http://sumo-sim.org/trac.wsgi/ticket/1158 because I do think it is a
>>>> defect)
>>>> regards,
>>>> Jakob
>>>>
>>>>
>>>> 2014-02-17 14:35 GMT+01:00 Pieter Loof <[email protected]>:
>>>>
>>>> Hello,
>>>>>
>>>>> Giving the route and vehicle file to SUMO both via the "-r " flag in
>>>>> the correct order solved the errors. But now I am running into a different
>>>>> problem again. When running SUMO I get a lot of warnings about discarded
>>>>> vehicles because the route file is not sorted. Apart from that, the
>>>>> simulation runs and exits normally. So again I run into the problem of the
>>>>> route file not being sorted, although it is generated by DFRouter and I
>>>>> did
>>>>> not alter it. Because thousands of vehicles are discarded, the scenario
>>>>> output becomes unreliable for me.
>>>>>
>>>>> Now I guess a simple way to solve this is to put both the route and
>>>>> vehicle file in the list of additional files in the correct order. This
>>>>> simple solution works, the errors about the unsorted route file do not
>>>>> occur. But when running the simulation now, the simulation suddenly closes
>>>>> with a segmentation fault after 1503 steps. This happens repeatedly and
>>>>> both with and without GUI. Apart from some warnings about teleported
>>>>> vehicles and changed depart speeds because of close by junctions, the
>>>>> simulation seems to run normally up to the segmentation fault. So I guess
>>>>> I
>>>>> ran into another bug? I added the scenario for which the segmentation
>>>>> fault
>>>>> occurs. I simplified the scenario by removing some files and flags again
>>>>> and checked that the fault still occurs. The scenario can be run by
>>>>> running
>>>>> sumo or sumo-gui on the provided configuration file.
>>>>>
>>>>> Greetings,
>>>>> Pieter
>>>>>
>>>>>
>>>>> On 5 February 2014 12:52, Jakob Erdmann <[email protected]>wrote:
>>>>>
>>>>>> Hello,
>>>>>> I think I have finally figured out the underlying misunderstanding.
>>>>>> Please read the following (new) documentation:
>>>>>> http://sumo-sim.org/wiki/SUMO#Loading_order_of_input_files
>>>>>>
>>>>>> http://sumo-sim.org/wiki/Demand/Routes_from_Observation_Points#How_to_include_the_files
>>>>>> regards,
>>>>>> Jakob
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> 2014-02-04 Jakob Erdmann <[email protected]>:
>>>>>>
>>>>>> Hello,
>>>>>>> regarding 1)
>>>>>>> in config-files,
>>>>>>> <additional-files value="file1 file2 file3"/> and
>>>>>>> <additional-files value="file1,file2,file3"/> should both work. What
>>>>>>> error message do you get?
>>>>>>>
>>>>>>> regarding 2)
>>>>>>> most likely there is something wrong with the route file itself. It
>>>>>>> should generally be possible to use the -r option for route files.
>>>>>>> Only if the routes are unsorted (wrt departure time) you need to use
>>>>>>> -a because -a does not perform incremental loading but loads the whole
>>>>>>> file
>>>>>>> instead.
>>>>>>>
>>>>>>> Note, that in your route file any <route> elements must come before
>>>>>>> <vehicle route=""> elements referencing the former.
>>>>>>>
>>>>>>> regards,
>>>>>>> Jakob
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> 2014-02-04 Pieter Loof <[email protected]>:
>>>>>>>
>>>>>>> Hi all,
>>>>>>>>
>>>>>>>> I just tried using the --save-configuration option for both
>>>>>>>> DFRouter and
>>>>>>>> SUMO. It succesfully creates a config file, but I ran into a few
>>>>>>>> small
>>>>>>>> problems.
>>>>>>>>
>>>>>>>> Problem 1:
>>>>>>>>
>>>>>>>> I know that the additional files in a .sumocfg file is a
>>>>>>>> space-separator
>>>>>>>> list, like this:
>>>>>>>> <additional-files value="file1 file2 file3"/>
>>>>>>>>
>>>>>>>> Now, in whatever way I try to give the additional files as flag to
>>>>>>>> a sumo
>>>>>>>> command, it keeps saving it to the config file in the wrong format.
>>>>>>>> As far
>>>>>>>> as I know the flag for additional files should be a comma-separated
>>>>>>>> list,
>>>>>>>> like this:
>>>>>>>> sumo -a file1,file2,file
>>>>>>>>
>>>>>>>> But when I run the command and look at the produced config file, I
>>>>>>>> see that
>>>>>>>> the commas are stll there, it looks like this:
>>>>>>>> <additional-files value="file1,file2,file3"/>
>>>>>>>>
>>>>>>>> So there are still commas in between, and running SUMO with this
>>>>>>>> config
>>>>>>>> file gives errors that I do not receive when the list is
>>>>>>>> space-separated. I
>>>>>>>> tried a few different ways of formatting the "-a <FILE>" using
>>>>>>>> commas or
>>>>>>>> spaces as separator with and without enclosing braces, brackets or
>>>>>>>> quotes,
>>>>>>>> but the generated format is never correct. Am I doing something
>>>>>>>> wrong?
>>>>>>>>
>>>>>>>> Problem 2:
>>>>>>>>
>>>>>>>> When generating the sumo config file, using the flag "-r <FILE>" to
>>>>>>>> give
>>>>>>>> the route file, then the route file is written as
>>>>>>>> <route-files value=file/>
>>>>>>>>
>>>>>>>> But when running SUMO using the generated config file, errors occur
>>>>>>>> about
>>>>>>>> invalid references to routes. The only solution seems to be to give
>>>>>>>> the
>>>>>>>> route file under the "-a <FILE>" flag. If the route file should be
>>>>>>>> an
>>>>>>>> additional file, then please fix the config generation process or
>>>>>>>> change
>>>>>>>> the documentation about providing the route file.
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>> Pieter
>>>>>>>>
>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>> Managing the Performance of Cloud-Based Applications
>>>>>>>> Take advantage of what the Cloud has to offer - Avoid Common
>>>>>>>> Pitfalls.
>>>>>>>> Read the Whitepaper.
>>>>>>>>
>>>>>>>> http://pubads.g.doubleclick.net/gampad/clk?id=121051231&iu=/4140/ostg.clktrk
>>>>>>>> _______________________________________________
>>>>>>>> sumo-user mailing list
>>>>>>>> [email protected]
>>>>>>>> https://lists.sourceforge.net/lists/listinfo/sumo-user
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
<?xml version="1.0" encoding="UTF-8"?>
<!-- generated on Wed Feb 19 18:52:27 2014 by SUMO dfrouter Version 0.19.0
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo-sim.org/xsd/dfrouterConfiguration.xsd">
<input>
<net-file value="/home/pieter/workspace/pieterthesis/Networks/Rotterdam_auto/Rotterdam.net.xml"/>
<detector-files value="/home/pieter/workspace/pieterthesis/Networks/Rotterdam_auto/test/Rotterdam.det.xml"/>
<measure-files value="/home/pieter/workspace/pieterthesis/Networks/Rotterdam_auto/test/Rotterdam.msr.csv"/>
</input>
<output>
<routes-output value="/home/pieter/workspace/pieterthesis/Networks/Rotterdam_auto/test/Rotterdam.rou.xml"/>
<vehicle depart="0.00" departLane="0" departPos="136.00" departSpeed="max" id="emitter_RWS01_MONIBAS_0151hrl0714ra_0_0" route="126729770_to_64223567#1" type="PKW"/>
<vehicle depart="10796.20" departLane="0" departPos="392.00" departSpeed="max" id="emitter_RWS01_MONIBAS_0131hrr0158ra_0_10796202" route="7531972_to_64223567#1" type="PKW"/>
</routes>
#!/usr/bin/env python
"""
@file sort_routes.py
@author Jakob Erdmann
@author Michael Behrisch
@date 2011-07-14
@version $Id: sort_routes.py 14677 2013-09-11 08:30:08Z behrisch $
This script sorts the vehicles in the given route file by their depart time
SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
Copyright (C) 2007-2013 DLR (http://www.dlr.de/) and contributors
This file is part of SUMO.
SUMO is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
"""
import sys
import os
import re
from xml.dom import pulldom
from xml.sax import handler
from xml.sax import make_parser
from xml.sax import handler
from optparse import OptionParser
def get_options(args=None):
USAGE = "Usage: " + sys.argv[0] + " <routefile>"
optParser = OptionParser()
optParser.add_option("-o", "--outfile", help="name of output file")
optParser.add_option("-b", "--big", action="store_true", default=False,
help="Use alternative sortign strategy for large files (slower but more memory efficient)")
options, args = optParser.parse_args(args=args)
if len(args) != 1:
sys.exit(USAGE)
options.routefile = args[0]
if options.outfile is None:
options.outfile = options.routefile + ".sorted"
return options
def sort_departs(routefilename, outfile):
routes_doc = pulldom.parse(sys.argv[1])
vehicles = []
for event, parsenode in routes_doc:
if event == pulldom.START_ELEMENT and (parsenode.localName == 'vehicle' or parsenode.localName == 'flow'):
vehicle = parsenode # now we know it's a vehicle or a flow
routes_doc.expandNode(vehicle)
if (parsenode.localName == 'vehicle'):
depart = int(float(vehicle.getAttribute('depart')))
vehicles.append((depart, vehicle.toprettyxml(indent="", newl="")))
elif (parsenode.localName == 'flow'):
begin = int(float(vehicle.getAttribute('begin')))
vehicles.append((begin, vehicle.toprettyxml(indent="", newl="")))
print('read %s elements.' % len(vehicles))
vehicles.sort()
for depart, vehiclexml in vehicles:
outfile.write(" "*4)
outfile.write(vehiclexml)
outfile.write("\n")
print('wrote %s elements.' % len(vehicles))
class RouteHandler(handler.ContentHandler):
def __init__(self, elements_with_depart):
self.DEPART_ATTR = {'vehicle' : 'depart', 'flow' : 'begin'}
self.elements_with_depart = elements_with_depart
self._depart = None
def setDocumentLocator(self,locator):
self.locator = locator
def startElement(self,name,attrs):
if name in self.DEPART_ATTR.keys():
self._depart = attrs[self.DEPART_ATTR[name]]
self._start_line = self.locator.getLineNumber()
def endElement(self,name):
if name in self.DEPART_ATTR.keys():
end_line = self.locator.getLineNumber()
self.elements_with_depart.append((self._depart, self._start_line, end_line))
def create_line_index(file):
print "Building line offset index for %s" % file
result = []
offset = 0
with open(file, 'rb') as f: # need to read binary here for correct offsets
for line in f:
result.append(offset)
offset += len(line)
return result
def get_element_lines(routefilename):
# [(depart, line_index_where_element_starts, line_index_where_element_ends), ...]
print "Parsing %s for line indices and departs" % routefilename
result = []
parser = make_parser()
parser.setContentHandler(RouteHandler(result))
parser.parse(open(routefilename))
print " found %s items" % len(result)
return result
def copy_elements(routefilename, outfilename, element_lines, line_offsets):
print "Copying elements from %s to %s sorted by departure" % (
routefilename, outfilename)
outfile = open(outfilename, 'w')
# copy header
for line in open(routefilename):
outfile.write(line)
if '<routes' in line:
break
with open(routefilename) as f: # don't read binary here for line end conversion
for depart, start, end in element_lines:
# convert from 1-based to 0-based indices
f.seek(line_offsets[start - 1])
for i in range(end - start + 1):
outfile.write(f.readline())
outfile.write('</routes>')
outfile.close()
def main(args=None):
options = get_options(args=args)
if options.big:
line_offsets = create_line_index(options.routefile)
element_lines = get_element_lines(options.routefile)
element_lines.sort()
copy_elements(options.routefile, options.outfile, element_lines, line_offsets)
else:
outfile = open(options.outfile, 'w')
for line in open(options.routefile):
if '<routes>' in line or '<additional>' in line:
outfile.write('<routes>\n')
break
outfile.write(line)
sort_departs(options.routefile, outfile)
outfile.write('</routes>')
outfile.close()
if __name__ == "__main__":
main()
------------------------------------------------------------------------------
Managing the Performance of Cloud-Based Applications
Take advantage of what the Cloud has to offer - Avoid Common Pitfalls.
Read the Whitepaper.
http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk
_______________________________________________
sumo-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sumo-user