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('')
Exemple #2
0
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()
Exemple #3
0
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('')