mirror of
https://github.com/a-b-street/abstreet.git
synced 2024-12-24 06:55:40 +03:00
07a8a21fec
to manage edits are stomping on each other. #325
64 lines
1.9 KiB
Python
64 lines
1.9 KiB
Python
import requests
|
|
import statistics
|
|
|
|
|
|
# Returns Results
|
|
def run_sim(args, modifiers=[], edits=None):
|
|
requests.post(args.api + '/sim/load', json={
|
|
'load': 'data/system/scenarios/{}/weekday.bin'.format(args.map_name),
|
|
'modifiers': modifiers,
|
|
})
|
|
if edits:
|
|
requests.post(args.api + '/map/set-edits', json=edits)
|
|
requests.get(args.api + '/sim/goto-time',
|
|
params={'t': '{}:00:00'.format(args.hours)})
|
|
raw_trips = requests.get(
|
|
args.api + '/data/get-finished-trips').json()['trips']
|
|
|
|
# Map trip ID to the duration (in seconds) of the trip. Filter out aborted
|
|
# (failed) trips.
|
|
num_aborted = 0
|
|
trip_times = {}
|
|
for (_, trip, mode, duration) in raw_trips:
|
|
if mode is None:
|
|
num_aborted += 1
|
|
else:
|
|
trip_times[trip] = duration
|
|
|
|
return Results(num_aborted, trip_times)
|
|
|
|
|
|
class Results:
|
|
def __init__(self, num_aborted, trip_times):
|
|
self.num_aborted = num_aborted
|
|
# Maps trip ID to seconds
|
|
self.trip_times = trip_times
|
|
|
|
# self is the baseline, results2 is the experiment
|
|
def compare(self, results2):
|
|
faster = []
|
|
slower = []
|
|
|
|
for trip, after_dt in results2.trip_times.items():
|
|
before_dt = self.trip_times.get(trip)
|
|
if not before_dt:
|
|
# The trip didn't finish in time in the baseline run
|
|
continue
|
|
if before_dt:
|
|
if before_dt > after_dt:
|
|
faster.append(before_dt - after_dt)
|
|
elif after_dt > before_dt:
|
|
slower.append(after_dt - before_dt)
|
|
|
|
print('{:,} trips faster, average {:.1f}s savings'.format(
|
|
len(faster), avg(faster)))
|
|
print('{:,} trips slower, average {:.1f}s loss'.format(
|
|
len(slower), avg(slower)))
|
|
|
|
|
|
def avg(data):
|
|
if data:
|
|
return statistics.mean(data)
|
|
else:
|
|
return 0.0
|