mirror of
https://github.com/Ahp06/SUMO_Emissions.git
synced 2024-11-24 04:26:29 +00:00
Add an option to seed sumo's PRNG
This commit is contained in:
parent
8d89f83d03
commit
5454b8805b
@ -5,6 +5,7 @@ import os
|
|||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import time
|
||||||
from sys import argv
|
from sys import argv
|
||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
from xml.etree import ElementTree
|
from xml.etree import ElementTree
|
||||||
@ -108,7 +109,7 @@ def load_polyconvert_template(osm_file, type_file, scenario_name):
|
|||||||
return polyconfig
|
return polyconfig
|
||||||
|
|
||||||
|
|
||||||
def load_sumoconfig_template(simulation_name, routefiles=(), generate_polygons=False):
|
def load_sumoconfig_template(simulation_name, routefiles=(), generate_polygons=False, seed=None):
|
||||||
routefiles = routefiles or (f'{simulation_name}.rou.xml',)
|
routefiles = routefiles or (f'{simulation_name}.rou.xml',)
|
||||||
sumoconfig = ElementTree.parse(os.path.join(TEMPLATEDIR, 'simul.sumocfg'))
|
sumoconfig = ElementTree.parse(os.path.join(TEMPLATEDIR, 'simul.sumocfg'))
|
||||||
root = sumoconfig.getroot()
|
root = sumoconfig.getroot()
|
||||||
@ -120,6 +121,8 @@ def load_sumoconfig_template(simulation_name, routefiles=(), generate_polygons=F
|
|||||||
else:
|
else:
|
||||||
root.find('input').remove(additional)
|
root.find('input').remove(additional)
|
||||||
root.find('report/log').set('value', f'{simulation_name}.log')
|
root.find('report/log').set('value', f'{simulation_name}.log')
|
||||||
|
# Set the seed for the random number generator. By default, use the current time
|
||||||
|
root.find('random_number/seed').set('value', seed or str(time.time()))
|
||||||
return sumoconfig
|
return sumoconfig
|
||||||
|
|
||||||
|
|
||||||
@ -187,7 +190,7 @@ def generate_all(args):
|
|||||||
logs_dir = os.path.join(simulation_dir, 'log')
|
logs_dir = os.path.join(simulation_dir, 'log')
|
||||||
generate_scenario(osm_file, simulation_dir, simulation_name, generate_polygons)
|
generate_scenario(osm_file, simulation_dir, simulation_name, generate_polygons)
|
||||||
routefiles = generate_mobility(simulation_dir, simulation_name, args.vclasses)
|
routefiles = generate_mobility(simulation_dir, simulation_name, args.vclasses)
|
||||||
generate_sumo_configuration(routefiles, simulation_dir, simulation_name, )
|
generate_sumo_configuration(routefiles, simulation_dir, simulation_name, generate_polygons, )
|
||||||
# Move all logs to logdir
|
# Move all logs to logdir
|
||||||
move_logs(simulation_dir, logs_dir)
|
move_logs(simulation_dir, logs_dir)
|
||||||
|
|
||||||
@ -214,6 +217,7 @@ def parse_command_line():
|
|||||||
help='Generate this vclass with given density, in pair form vclass=density. The density is '
|
help='Generate this vclass with given density, in pair form vclass=density. The density is '
|
||||||
'given in vehicles per hour per kilometer. For now, the following vehicle classes are '
|
'given in vehicles per hour per kilometer. For now, the following vehicle classes are '
|
||||||
'available: passenger, truck, bus.')
|
'available: passenger, truck, bus.')
|
||||||
|
parser.add_argument('--seed', help='Initializes the random number generator.')
|
||||||
options = parser.parse_args()
|
options = parser.parse_args()
|
||||||
handle_args(options)
|
handle_args(options)
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
</report>
|
</report>
|
||||||
|
|
||||||
<random_number>
|
<random_number>
|
||||||
<seed value="42"/>
|
<seed value=""/>
|
||||||
</random_number>
|
</random_number>
|
||||||
|
|
||||||
</configuration>
|
</configuration>
|
||||||
|
@ -41,6 +41,11 @@ class TemplateTests(unittest.TestCase):
|
|||||||
self.assertEqual(tree.find('input/route-files').get('value'), ','.join(routefiles))
|
self.assertEqual(tree.find('input/route-files').get('value'), ','.join(routefiles))
|
||||||
self.assertEqual(tree.find('report/log').get('value'), f'{self.sim_name}.log')
|
self.assertEqual(tree.find('report/log').get('value'), f'{self.sim_name}.log')
|
||||||
|
|
||||||
|
def test_load_sumoconfig_template_with_seed(self):
|
||||||
|
routefiles = (f'{self.sim_name}.bus.rou.xml', f'{self.sim_name}.passenger.rou.xml')
|
||||||
|
tree = configurator.load_sumoconfig_template(self.sim_name, routefiles, seed=42)
|
||||||
|
self.assertEqual(tree.find('random_number/seed').get('value'), 42)
|
||||||
|
|
||||||
def test_load_polyconvert_template(self):
|
def test_load_polyconvert_template(self):
|
||||||
tree = configurator.load_polyconvert_template(
|
tree = configurator.load_polyconvert_template(
|
||||||
osm_file=f'{self.sim_name}.osm',
|
osm_file=f'{self.sim_name}.osm',
|
||||||
|
Loading…
Reference in New Issue
Block a user