123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import numpy as np
- import random
- import pickle
- # 司机
- class Driver():
- def __init__(self,id,x,y):
- self.id = id
- self.x = x
- self.y = y
- # 订单
- class Order():
- def __init__(self,id,x,y,to_x,to_y,order_time):
- self.id = id
- self.x = x
- self.y = y
- self.to_x = to_x
- self.to_y = to_y
- # time range: 1 ~ 144
- self.order_time = order_time
- self.travel_distance = (abs(self.to_x - self.x) + abs(self.to_y - self.y) ) * random.uniform(0.93,1.08)
- self.travel_time = int(self.travel_distance / 5 + random.randint(0,1))
- if self.travel_time==0:
- self.travel_time = 1
- self.arrive_time = self.order_time + self.travel_time
- self.arrive_time = self.arrive_time if self.arrive_time<=144 else self.arrive_time-144
- if 0<order_time<34 or 84<order_time<110 or order_time>137:
- self.order_money = (15 + (max(self.travel_distance,8)-8) * 2.3 ) * random.uniform(0.96,1.15)
- else:
- self.order_money = (12 + (max(self.travel_distance,8)-8) * 1.8 ) * random.uniform(0.90,1.10)
- # 配对
- cancel_prob = 0.20
- class Match():
- def __init__(self,order,driver,is_cancel = False):
- self.order = order
- self.driver = driver
- self.distance = (abs(order.x - driver.x) + abs(order.y - driver.y) ) * random.uniform(0.96,1.03)
- if random.random() < cancel_prob:
- is_cancel = True
- self.order.order_money = 0
- self.order.to_x = self.driver.x
- self.order.to_y = self.driver.y
- self.order.arrive_time = self.order.order_time + 1 if self.order.order_time<144 else 1
- self.order.travel_time = 1
- self.money = order.order_money
- self.is_cancel = is_cancel
- def save(object_to_save, path):
- with open(path, 'wb') as f:
- pickle.dump(object_to_save, f)
- def load(path):
- with open(path, 'rb') as f:
- object1 = pickle.load(f)
- return object1
|