def main(): parser = argparse.ArgumentParser() parser.add_argument('--api', default='http://localhost:1234') parser.add_argument('--map_name', default='montlake') parser.add_argument('--hours', type=int, default=24) parser.add_argument('--cmp1', type=int, default=None) parser.add_argument('--cmp2', type=int, default=None) args = parser.parse_args() if args.cmp1 and args.cmp2 and args.cmp1 > args.cmp2: sys.exit( '--cmp1={} --cmp2={} invalid, --cmp1 is the baseline'.format(args.cmp1, args.cmp2)) print('Simulating {} hours of data/system/scenarios/{}/weekday.bin'.format(args.hours, args.map_name)) print('') num_succeeded_last = 0 results2 = None for pct in range(100, 0, -10): start = time.time() results = abst_helpers.run_sim(args, modifiers=[{'CancelPeople': pct}]) print('{}% of people cancelled: {:,} trips cancelled, {:,} trips succeeded. Simulation took {:.1f}s'.format( pct, results.num_cancelled, len(results.trip_times), time.time() - start)) if len(results.trip_times) < num_succeeded_last: print('--> less trips succeeded this round, so likely hit gridlock') break num_succeeded_last = len(results.trip_times) if args.cmp2 == pct: results2 = results if args.cmp1 == pct: print('') print('Baseline cancelled {}%, experimental cancelled {}%'.format( args.cmp1, args.cmp2)) results.compare(results, results2) print('')
def main(): parser = argparse.ArgumentParser() parser.add_argument('--api', default='http://localhost:1234') parser.add_argument('--country_code', default='us') parser.add_argument('--city_name', default='seattle') parser.add_argument('--map_name', default='montlake') parser.add_argument('--hours', type=int, default=24) parser.add_argument('--cap_pct', type=int, default=80) parser.add_argument('--rounds', type=int, default=10) parser.add_argument('--cap_all_roads', type=bool, default=True) args = parser.parse_args() print('Simulating {} hours of data/system/{}/{}/scenarios/{}/weekday.bin'. format(args.hours, args.country_code, args.city_name, args.map_name)) baseline = abst_helpers.run_sim(args) edits = get(args, '/map/get-edits').json() for _ in range(args.rounds): print('') print('{} roads have a cap'.format(len(edits['commands']))) experiment = abst_helpers.run_sim(args, edits=edits) baseline.compare(experiment) print('{:,} trips changed due to the caps'.format( len(experiment.capped_trips))) if args.cap_all_roads: edits['commands'] = cap_all_roads(args) # Individual cap per road; don't merge adjacent roads that happen to have the same cap. edits['merge_zones'] = False else: # Cap the busiest road busiest_road, thruput = find_busiest_road(args) cmd = get(args, '/map/get-edit-road-command', params={ 'id': busiest_road }).json() cmd['ChangeRoad']['new']['access_restrictions'][ 'cap_vehicles_per_hour'] = int( (args.cap_pct / 100.0) * thruput) edits['commands'].append(cmd) # Write the final edits f = open('cap_edits.json', 'w') f.write(get(args, '/map/get-edits').text) f.close()
def main(): parser = argparse.ArgumentParser() parser.add_argument('--api', default='http://localhost:1234') parser.add_argument('--country_code', default='us') parser.add_argument('--city_name', default='seattle') parser.add_argument('--map_name', default='montlake') parser.add_argument('--hours', type=int, default=24) parser.add_argument('--cmp1', type=int, default=None) parser.add_argument('--cmp2', type=int, default=None) args = parser.parse_args() if args.cmp1 and args.cmp2 and args.cmp1 > args.cmp2: sys.exit('--cmp1={} --cmp2={} invalid, --cmp1 is the baseline'.format( args.cmp1, args.cmp2)) print('Simulating {} hours of data/system/{}/{}/scenarios/{}/weekday.bin'. format(args.hours, args.country_code, args.city_name, args.map_name)) print('') num_succeeded_last = 0 results2 = None for pct in range(100, 0, -10): start = time.time() results = abst_helpers.run_sim( args, modifiers=[{ "ChangeMode": { "pct_ppl": pct, "departure_filter": [0.0, 86400.0], "from_modes": ["Walk", "Bike", "Transit", "Drive"], "to_mode": None } }]) print( '{}% of people cancelled: {:,} trips cancelled, {:,} trips succeeded. Simulation took {:.1f}s' .format(pct, results.num_cancelled, len(results.trip_times), time.time() - start)) if len(results.trip_times) < num_succeeded_last: print( '--> less trips succeeded this round, so likely hit gridlock') break num_succeeded_last = len(results.trip_times) if args.cmp2 == pct: results2 = results if args.cmp1 == pct: print('') print('Baseline cancelled {}%, experimental cancelled {}%'.format( args.cmp1, args.cmp2)) results.compare(results, results2) print('')