Commit 5ffca5a3 authored by Stefan Schuhbaeck's avatar Stefan Schuhbaeck
Browse files

Merge branch 'develop' into prepair_v0.5

parents 6f8badd0 e291f156
Pipeline #67926 failed with stages
in 56 minutes and 11 seconds
...@@ -15,24 +15,27 @@ import shutil ...@@ -15,24 +15,27 @@ import shutil
import subprocess import subprocess
import time import time
def find_scenario_files(path="VadereModelTests"): # exclude output and legacy to make sure that if used locally, .scenario files in these directories are not used
scenario_search_pattern = "*.scenario" def find_scenario_files(path="VadereModelTests", scenario_search_pattern = "*.scenario", exclude_patterns = ["TESTOVM","output","legacy"]):
scenario_files = [] scenario_files = []
exclude_patterns = ["TESTOVM"]
for root, dirnames, filenames in os.walk(path): for root, dirnames, filenames in os.walk(path):
for filename in fnmatch.filter(filenames, scenario_search_pattern): for filename in fnmatch.filter(filenames, scenario_search_pattern):
scenario_path = os.path.join(root, filename) scenario_path = os.path.join(root, filename)
bool_exclude = False
for exclude_pattern in exclude_patterns: for exclude_pattern in exclude_patterns:
regex_pattern = re.compile(exclude_pattern) regex_pattern = re.compile(exclude_pattern)
match = regex_pattern.search(scenario_path) match = regex_pattern.search(scenario_path)
if match:
bool_exclude = True
if match is None: if not(bool_exclude):
scenario_files.append(scenario_path) scenario_files.append(scenario_path)
print("Total scenario files: {}".format(len(scenario_files))) # Surpress this output since only failed scenarios are shown
print("Exclude patterns: {}".format(exclude_patterns)) # print("Total scenario files: {}".format(len(scenario_files)))
# print("Exclude patterns: {}".format(exclude_patterns))
return sorted(scenario_files) return sorted(scenario_files)
...@@ -49,11 +52,13 @@ def run_scenario_files_with_vadere_console(scenario_files, vadere_console="Vader ...@@ -49,11 +52,13 @@ def run_scenario_files_with_vadere_console(scenario_files, vadere_console="Vader
for i, scenario_file in enumerate(scenario_files): for i, scenario_file in enumerate(scenario_files):
try: try:
print("Running scenario file ({}/{}): {}".format(i + 1, total_scenario_files, scenario_file)) # Surpress this output to see the files that failed in the email
# print("Running scenario file ({}/{}): {}".format(i + 1, total_scenario_files, scenario_file))
# Measure wall time and not cpu because it is the easiest. # Measure wall time and not cpu because it is the easiest.
wall_time_start = time.time() wall_time_start = time.time()
# Use timout feature, check return value and capture stdout/stderr to a PIPE (use completed_process.stdout to get it). # Use timout feature, check return value and capture stdout/stderr to a PIPE (use completed_process.stdout to get it).
completed_process = subprocess.run(args=["java", "-enableassertions", "-jar", vadere_console, "scenario-run", "-f", scenario_file, "-o", output_dir], completed_process = subprocess.run(args=["java", "-enableassertions", "-jar", vadere_console, "scenario-run", "-f", scenario_file, "-o", output_dir],
timeout=scenario_timeout_in_sec, timeout=scenario_timeout_in_sec,
...@@ -64,26 +69,51 @@ def run_scenario_files_with_vadere_console(scenario_files, vadere_console="Vader ...@@ -64,26 +69,51 @@ def run_scenario_files_with_vadere_console(scenario_files, vadere_console="Vader
wall_time_end = time.time() wall_time_end = time.time()
wall_time_delta = wall_time_end - wall_time_start wall_time_delta = wall_time_end - wall_time_start
print("Finished scenario file ({:.1f} s): {}".format(wall_time_delta, scenario_file)) # Surpress this output to see the files that failed in the email
# print("Finished scenario file ({:.1f} s): {}".format(wall_time_delta, scenario_file))
passed_scenarios.append(scenario_file) passed_scenarios.append(scenario_file)
except subprocess.TimeoutExpired as exception: except subprocess.TimeoutExpired as exception:
print("Scenario file failed: {}".format(scenario_file)) prefix = ""
print("-> Reason: timeout after {} s ({})".format(exception.timeout, exception.cmd)) if "TestOSM" in scenario_file:
prefix = " * OSM * "
print(prefix +"Scenario file failed: {}".format(scenario_file))
print("-> Reason: timeout after {} s".format(exception.timeout))
failed_scenarios_with_exception.append((scenario_file, exception)) failed_scenarios_with_exception.append((scenario_file, exception))
except subprocess.CalledProcessError as exception: except subprocess.CalledProcessError as exception:
print("Scenario file failed: {}".format(scenario_file)) prefix = ""
print("-> Reason: non-zero return value {} ({})".format(exception.returncode, exception.cmd)) if "TestOSM" in scenario_file:
prefix = " * OSM * "
print(prefix + "Scenario file failed: {}".format(scenario_file))
print("-> Reason: non-zero return value {}".format(exception.returncode))
failed_scenarios_with_exception.append((scenario_file, exception)) failed_scenarios_with_exception.append((scenario_file, exception))
if os.path.exists(output_dir): if os.path.exists(output_dir):
shutil.rmtree(output_dir) shutil.rmtree(output_dir)
return {"passed": passed_scenarios, "failed": failed_scenarios_with_exception} return {"passed": passed_scenarios, "failed": failed_scenarios_with_exception}
if __name__ == "__main__": if __name__ == "__main__":
scenario_files = find_scenario_files()
passed_and_failed_scenarios = run_scenario_files_with_vadere_console(scenario_files) print(" * Output is only shown for scenarios that fail * ")
passed_and_failed_scenarios = {"passed": [], "failed" : []}
scenarios_long = ["rimea_09", "rimea_11", "queueing"]
scenario_do_not_test = ["TESTOVM","output","legacy"]
scenario_do_not_test.extend(scenarios_long)
scenario_files_regular_length = find_scenario_files(exclude_patterns=scenario_do_not_test)
passed_and_failed_scenarios = run_scenario_files_with_vadere_console(scenario_files_regular_length)
for scenario in scenarios_long:
search_pattern = "*" + scenario + "*.scenario"
scenario_files_long = find_scenario_files(scenario_search_pattern=search_pattern)
tmp_passed_and_failed_scenarios = run_scenario_files_with_vadere_console(scenario_files_long, scenario_timeout_in_sec=240)
passed_and_failed_scenarios["passed"].extend(tmp_passed_and_failed_scenarios["passed"])
passed_and_failed_scenarios["failed"].extend(tmp_passed_and_failed_scenarios["failed"])
if len(passed_and_failed_scenarios["failed"]) > 0: if len(passed_and_failed_scenarios["failed"]) > 0:
exit(1) exit(1)
......
...@@ -134,7 +134,7 @@ ...@@ -134,7 +134,7 @@
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : true, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
"digitsPerCoordinate" : 2, "digitsPerCoordinate" : 2,
"useFixedSeed" : true, "useFixedSeed" : true,
"fixedSeed" : 1, "fixedSeed" : 1,
"simulationSeed" : null "simulationSeed" : 0
}, },
"topography" : { "topography" : {
"attributes" : { "attributes" : {
...@@ -134,11 +134,12 @@ ...@@ -134,11 +134,12 @@
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : true, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
} ], } ],
"dynamicElements" : [ ],
"attributesPedestrian" : { "attributesPedestrian" : {
"radius" : 0.195, "radius" : 0.195,
"densityDependentSpeed" : false, "densityDependentSpeed" : false,
...@@ -148,8 +149,7 @@ ...@@ -148,8 +149,7 @@
"maximumSpeed" : 2.2, "maximumSpeed" : 2.2,
"acceleration" : 2.0 "acceleration" : 2.0
}, },
"attributesCar" : null, "attributesCar" : null
"dynamicElements" : [ ]
} }
} }
} }
\ No newline at end of file
...@@ -143,7 +143,7 @@ ...@@ -143,7 +143,7 @@
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : true, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -116,7 +116,7 @@ ...@@ -116,7 +116,7 @@
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : true, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -116,7 +116,7 @@ ...@@ -116,7 +116,7 @@
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : true, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -116,7 +116,7 @@ ...@@ -116,7 +116,7 @@
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : true, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -116,7 +116,7 @@ ...@@ -116,7 +116,7 @@
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : true, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -116,7 +116,7 @@ ...@@ -116,7 +116,7 @@
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : true, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -107,7 +107,7 @@ ...@@ -107,7 +107,7 @@
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 1200.0, "endTime" : 1200.0,
"spawnAtRandomPositions" : true, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
"attributesSimulation" : { "attributesSimulation" : {
"finishTime" : 300.0, "finishTime" : 300.0,
"simTimeStepLength" : 0.4, "simTimeStepLength" : 0.4,
"realTimeSimTimeRatio" : 0.1, "realTimeSimTimeRatio" : 0.0,
"writeSimulationData" : true, "writeSimulationData" : true,
"visualizationEnabled" : true, "visualizationEnabled" : true,
"printFPS" : false, "printFPS" : false,
...@@ -106,8 +106,8 @@ ...@@ -106,8 +106,8 @@
"maxSpawnNumberTotal" : -1, "maxSpawnNumberTotal" : -1,
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : false, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
"attributesSimulation" : { "attributesSimulation" : {
"finishTime" : 300.0, "finishTime" : 300.0,
"simTimeStepLength" : 0.4, "simTimeStepLength" : 0.4,
"realTimeSimTimeRatio" : 0.1, "realTimeSimTimeRatio" : 0.0,
"writeSimulationData" : true, "writeSimulationData" : true,
"visualizationEnabled" : true, "visualizationEnabled" : true,
"printFPS" : false, "printFPS" : false,
...@@ -106,8 +106,8 @@ ...@@ -106,8 +106,8 @@
"maxSpawnNumberTotal" : -1, "maxSpawnNumberTotal" : -1,
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : false, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
"attributesSimulation" : { "attributesSimulation" : {
"finishTime" : 300.0, "finishTime" : 300.0,
"simTimeStepLength" : 0.4, "simTimeStepLength" : 0.4,
"realTimeSimTimeRatio" : 0.1, "realTimeSimTimeRatio" : 0.0,
"writeSimulationData" : true, "writeSimulationData" : true,
"visualizationEnabled" : true, "visualizationEnabled" : true,
"printFPS" : false, "printFPS" : false,
...@@ -106,8 +106,8 @@ ...@@ -106,8 +106,8 @@
"maxSpawnNumberTotal" : -1, "maxSpawnNumberTotal" : -1,
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : false, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
"attributesSimulation" : { "attributesSimulation" : {
"finishTime" : 300.0, "finishTime" : 300.0,
"simTimeStepLength" : 0.4, "simTimeStepLength" : 0.4,
"realTimeSimTimeRatio" : 0.1, "realTimeSimTimeRatio" : 0.0,
"writeSimulationData" : true, "writeSimulationData" : true,
"visualizationEnabled" : true, "visualizationEnabled" : true,
"printFPS" : false, "printFPS" : false,
...@@ -106,8 +106,8 @@ ...@@ -106,8 +106,8 @@
"maxSpawnNumberTotal" : -1, "maxSpawnNumberTotal" : -1,
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : false, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
"attributesSimulation" : { "attributesSimulation" : {
"finishTime" : 300.0, "finishTime" : 300.0,
"simTimeStepLength" : 0.4, "simTimeStepLength" : 0.4,
"realTimeSimTimeRatio" : 0.1, "realTimeSimTimeRatio" : 0.0,
"writeSimulationData" : true, "writeSimulationData" : true,
"visualizationEnabled" : true, "visualizationEnabled" : true,
"printFPS" : false, "printFPS" : false,
...@@ -106,8 +106,8 @@ ...@@ -106,8 +106,8 @@
"maxSpawnNumberTotal" : -1, "maxSpawnNumberTotal" : -1,
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : false, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
"attributesSimulation" : { "attributesSimulation" : {
"finishTime" : 120.0, "finishTime" : 120.0,
"simTimeStepLength" : 0.4, "simTimeStepLength" : 0.4,
"realTimeSimTimeRatio" : 0.1, "realTimeSimTimeRatio" : 0.0,
"writeSimulationData" : true, "writeSimulationData" : true,
"visualizationEnabled" : true, "visualizationEnabled" : true,
"printFPS" : false, "printFPS" : false,
...@@ -124,8 +124,8 @@ ...@@ -124,8 +124,8 @@
"maxSpawnNumberTotal" : -1, "maxSpawnNumberTotal" : -1,
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : false, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -125,7 +125,7 @@ ...@@ -125,7 +125,7 @@
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : true, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -107,7 +107,7 @@ ...@@ -107,7 +107,7 @@
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 1000.0, "endTime" : 1000.0,
"spawnAtRandomPositions" : true, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
"attributesSimulation" : { "attributesSimulation" : {
"finishTime" : 500.0, "finishTime" : 500.0,
"simTimeStepLength" : 0.4, "simTimeStepLength" : 0.4,
"realTimeSimTimeRatio" : 0.1, "realTimeSimTimeRatio" : 0.0,
"writeSimulationData" : true, "writeSimulationData" : true,
"visualizationEnabled" : true, "visualizationEnabled" : true,
"printFPS" : false, "printFPS" : false,
...@@ -208,8 +208,8 @@ ...@@ -208,8 +208,8 @@
"maxSpawnNumberTotal" : -1, "maxSpawnNumberTotal" : -1,
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : false, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
"attributesSimulation" : { "attributesSimulation" : {
"finishTime" : 500.0, "finishTime" : 500.0,
"simTimeStepLength" : 0.4, "simTimeStepLength" : 0.4,
"realTimeSimTimeRatio" : 0.1, "realTimeSimTimeRatio" : 0.0,
"writeSimulationData" : true, "writeSimulationData" : true,
"visualizationEnabled" : true, "visualizationEnabled" : true,
"printFPS" : false, "printFPS" : false,
...@@ -190,8 +190,8 @@ ...@@ -190,8 +190,8 @@
"maxSpawnNumberTotal" : -1, "maxSpawnNumberTotal" : -1,
"startTime" : 0.0, "startTime" : 0.0,
"endTime" : 0.0, "endTime" : 0.0,
"spawnAtRandomPositions" : false, "spawnAtRandomPositions" : true,
"useFreeSpaceOnly" : false, "useFreeSpaceOnly" : true,
"targetIds" : [ 1 ], "targetIds" : [ 1 ],
"groupSizeDistribution" : [ 1.0 ], "groupSizeDistribution" : [ 1.0 ],
"dynamicElementType" : "PEDESTRIAN" "dynamicElementType" : "PEDESTRIAN"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment