def test_allocate(): intersections = [ # (x,y) is the place of a intersection (0, 0), (0, 2), (0, 6), (0, 8), (0, 12), (0, 14), (2, 0), (2, 2), (2, 6), (2, 7), (2, 8), (2, 12), (2, 14), (3, 0), (3, 2), (3, 6), (3, 7), (3, 8), (3, 12), (3, 14), (4, 0), (4, 2), (4, 4), (4, 6), (4, 7), (4, 8), (4, 12), (4, 14), (5, 0), (5, 2), (5, 4), (5, 6), (5, 8), (5, 12), (5, 14), (7, 0), (7, 2), (7, 4), (7, 6), (7, 8), (7, 12), (7, 14), ] city = City(intersections, 0, None) coordinator = TaxiCoordinator( city=city, auction_type='first-price', drivers_schedule=[ #[(0, 12)], #[(0, 12)], [10, 24] ], init_pos=(4, 8)) print(coordinator.drivers) while city.time_sys.hour_in_sim() < 24: customer_calls = city.step() coordinator.allocate(customer_calls)
def test_payoff_bidding(): intersections = [ # (x,y) is the place of a intersection (0, 0), (0, 2), (0, 6), (0, 8), (0, 12), (0, 14), (2, 0), (2, 2), (2, 6), (2, 7), (2, 8), (2, 12), (2, 14), (3, 0), (3, 2), (3, 6), (3, 7), (3, 8), (3, 12), (3, 14), (4, 0), (4, 2), (4, 4), (4, 6), (4, 7), (4, 8), (4, 12), (4, 14), (5, 0), (5, 2), (5, 4), (5, 6), (5, 8), (5, 12), (5, 14), (7, 0), (7, 2), (7, 4), (7, 6), (7, 8), (7, 12), (7, 14), ] city = City(intersections, 0) coordinator = TaxiCoordinator(city=city, auction_type='second-price', drivers_schedule=[[], [], []], init_pos=(4, 8)) while city.time_sys.hour_in_sim() < 24: customer_calls = city.step() coordinator.allocate(customer_calls) for driver in coordinator.drivers: print('Driver-{} payoff {}'.format(driver.idx, driver.get_payoff())) print('Company payoff', coordinator.get_payoff())
(5, 0), (5, 2), (5, 4), (5, 6), (5, 8), (5, 12), (5, 14), (7, 0), (7, 2), (7, 4), (7, 6), (7, 8), (7, 12), (7, 14), ] city = City(intersections, 0, None) coordinator = TaxiCoordinator( city=city, auction_type='first-price', drivers_schedule=[ #[(0, 12)], [], [(10, 24)] ], init_pos=(4, 8)) print(coordinator.drivers) customer_calls = [ CustomerCall((0, 0), (7, 14), 9.5), CustomerCall((3, 2), (2, 2), 1) ] coordinator.allocate(customer_calls) #coordinator.drivers[0].timeline.dump_json(os.path.join('data', 'driver_0.json'))
def test_start_from_shift(): intersections = [ # (x,y) is the place of a intersection (0, 0), (0, 2), (0, 6), (0, 8), (0, 12), (0, 14), (2, 0), (2, 2), (2, 6), (2, 7), (2, 8), (2, 12), (2, 14), (3, 0), (3, 2), (3, 6), (3, 7), (3, 8), (3, 12), (3, 14), (4, 0), (4, 2), (4, 4), (4, 6), (4, 7), (4, 8), (4, 12), (4, 14), (5, 0), (5, 2), (5, 4), (5, 6), (5, 8), (5, 12), (5, 14), (7, 0), (7, 2), (7, 4), (7, 6), (7, 8), (7, 12), (7, 14), ] city = City(intersections, 0, None) coordinator = TaxiCoordinator( city=city, auction_type='second-price', drivers_schedule=[ #[(0, 12)], #[(0, 12)], [(5, 10)] ], init_pos=(4, 8)) print(coordinator.drivers) customer_calls = [ CustomerCall((4, 4), (5, 4), 1), CustomerCall((5, 6), (5, 8), 2), CustomerCall((4, 7), (4, 12), 11) ] coordinator.allocate(customer_calls) schedule = coordinator.drivers[0].generate_complete_schedule(16, True) print('Schedule') for e in schedule.events: print(e)
def test_payoff_bidding_city_lambd_schedule(): from util.common import daily_schedules_to_weekly_schedules intersections = [ # (x,y) is the place of a intersection (0, 0), (0, 2), (0, 6), (0, 8), (0, 12), (0, 14), (2, 0), (2, 2), (2, 6), (2, 7), (2, 8), (2, 12), (2, 14), (3, 0), (3, 2), (3, 6), (3, 7), (3, 8), (3, 12), (3, 14), (4, 0), (4, 2), (4, 4), (4, 6), (4, 7), (4, 8), (4, 12), (4, 14), (5, 0), (5, 2), (5, 4), (5, 6), (5, 8), (5, 12), (5, 14), (7, 0), (7, 2), (7, 4), (7, 6), (7, 8), (7, 12), (7, 14), ] lambd_schedule = [(7, 9, 3.0), (17, 19, 3.0), (9, 17, 2.0), (19, 23, 2.0)] city = City(intersections, 0, lambd_schedule) daily_schedule_for_drivers = [[(8, 12), (14, 23)], [(10, 12)]] weekly_schedule_for_drivers = daily_schedules_to_weekly_schedules( daily_schedule_for_drivers) coordinator = TaxiCoordinator(city=city, auction_type='second-price', drivers_schedule=weekly_schedule_for_drivers, init_pos=(4, 8)) while city.time_sys.hour_in_sim() < 24: customer_calls = city.step() coordinator.allocate(customer_calls) for driver in coordinator.drivers: print('Driver-{} payoff {}'.format(driver.idx, driver.get_payoff())) print('Company payoff', coordinator.get_payoff())
def test_shifts_with_weekly_schedule(): from util.common import daily_schedules_to_weekly_schedules intersections = [ # (x,y) is the place of a intersection (0, 0), (0, 2), (0, 6), (0, 8), (0, 12), (0, 14), (2, 0), (2, 2), (2, 6), (2, 7), (2, 8), (2, 12), (2, 14), (3, 0), (3, 2), (3, 6), (3, 7), (3, 8), (3, 12), (3, 14), (4, 0), (4, 2), (4, 4), (4, 6), (4, 7), (4, 8), (4, 12), (4, 14), (5, 0), (5, 2), (5, 4), (5, 6), (5, 8), (5, 12), (5, 14), (7, 0), (7, 2), (7, 4), (7, 6), (7, 8), (7, 12), (7, 14), ] city = City(intersections, 0, None) daily_schedule_for_drivers = [[(8, 12), (14, 23)], [(10, 12)]] weekly_schedule_for_drivers = daily_schedules_to_weekly_schedules( daily_schedule_for_drivers) coordinator = TaxiCoordinator(city=city, auction_type='second-price', drivers_schedule=weekly_schedule_for_drivers, init_pos=(4, 8)) print(coordinator.drivers) customer_calls = [ CustomerCall((4, 4), (5, 4), 4), CustomerCall((5, 6), (5, 8), 9), CustomerCall((4, 7), (4, 12), 15) ] coordinator.allocate(customer_calls) for driver in coordinator.drivers: schedule = driver.generate_complete_schedule(24, True) print('Schedule for driver-{}'.format(driver.idx)) for e in schedule.events: print(e)
level = logging.ERROR if args.verbose == 'info': level = logging.INFO elif args.verbose == 'debug': level = logging.DEBUG logging.basicConfig(format=FORMAT, level=level, datefmt='%d-%m-%Y:%H:%M:%S') config = Config(waiting_time_threshold=args.waiting_time_threshold, payment_ratio=args.payment_ratio) city = City(config.intersections, initial_hour=0, lambd_schedule=config.city_lambd_schedule) coordinator = TaxiCoordinator(city=city, auction_type=args.auction_type, payment_rule=args.payment_rule, bidding_strategy=args.bidding_strategy, drivers_schedule=config.driver_schedules, init_pos=config.init_pos, payment_ratio=config.payment_ratio, driving_velocity=config.driving_velocity, charge_rate_per_kilometer=config.charge_rate_per_kilometer, gas_cost_per_kilometer=config.gas_cost_per_kilometer, waiting_time_threshold=config.waiting_time_threshold) while city.time_sys.hour_in_sim() < args.timelimit: customer_calls = city.step() coordinator.allocate(customer_calls) if args.bidding_strategy == 'lookahead' and city.time_sys.hour_in_sim() % 8 == 0: coordinator.train() logging.info('Update the lookahead policy.') if args.dump: coordinator.dump_history_payoff(os.path.join('data', 'company-history-payoff.npy'))