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 0137: 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