entity.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import numpy as np
  2. import random
  3. import pickle
  4. # 司机
  5. class Driver():
  6. def __init__(self,id,x,y):
  7. self.id = id
  8. self.x = x
  9. self.y = y
  10. # 订单
  11. class Order():
  12. def __init__(self,id,x,y,to_x,to_y,order_time):
  13. self.id = id
  14. self.x = x
  15. self.y = y
  16. self.to_x = to_x
  17. self.to_y = to_y
  18. # time range: 1 ~ 144
  19. self.order_time = order_time
  20. self.travel_distance = (abs(self.to_x - self.x) + abs(self.to_y - self.y) ) * random.uniform(0.93,1.08)
  21. self.travel_time = int(self.travel_distance / 5 + random.randint(0,1))
  22. if self.travel_time==0:
  23. self.travel_time = 1
  24. self.arrive_time = self.order_time + self.travel_time
  25. self.arrive_time = self.arrive_time if self.arrive_time<=144 else self.arrive_time-144
  26. if 0<order_time<34 or 84<order_time<110 or order_time>137:
  27. self.order_money = (15 + (max(self.travel_distance,8)-8) * 2.3 ) * random.uniform(0.96,1.15)
  28. else:
  29. self.order_money = (12 + (max(self.travel_distance,8)-8) * 1.8 ) * random.uniform(0.90,1.10)
  30. # 配对
  31. cancel_prob = 0.20
  32. class Match():
  33. def __init__(self,order,driver,is_cancel = False):
  34. self.order = order
  35. self.driver = driver
  36. self.distance = (abs(order.x - driver.x) + abs(order.y - driver.y) ) * random.uniform(0.96,1.03)
  37. if random.random() < cancel_prob:
  38. is_cancel = True
  39. self.order.order_money = 0
  40. self.order.to_x = self.driver.x
  41. self.order.to_y = self.driver.y
  42. self.order.arrive_time = self.order.order_time + 1 if self.order.order_time<144 else 1
  43. self.order.travel_time = 1
  44. self.money = order.order_money
  45. self.is_cancel = is_cancel
  46. def save(object_to_save, path):
  47. with open(path, 'wb') as f:
  48. pickle.dump(object_to_save, f)
  49. def load(path):
  50. with open(path, 'rb') as f:
  51. object1 = pickle.load(f)
  52. return object1