dispatch.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import numpy as np
  2. from entity import *
  3. from KM import KM
  4. def dispatch(match_list):
  5. drivers = list(set([match.driver for match in match_list]))
  6. orders = list(set([match.order for match in match_list]))
  7. label = np.zeros(shape=(len(drivers),len(orders)))
  8. label = label+1000
  9. for match in match_list:
  10. driver = match.driver
  11. order = match.order
  12. value = match.value
  13. label[drivers.index(driver),orders.index(order)] = value
  14. # label[drivers.index(driver),orders.index(order)] = value + 1000
  15. # print(label)
  16. max_dispatch = KM(label).max_dispatch
  17. return [Match(orders[col],drivers[row]) for row,col in max_dispatch]
  18. if __name__ == '__main__':
  19. d1 = Driver(1,15,20)
  20. d2 = Driver(2,3,40)
  21. d3 = Driver(3,33,44)
  22. d4 = Driver(4,10,19)
  23. d5 = Driver(5,12,39)
  24. o1 = Order(1,13,25,15,15,70)
  25. o2 = Order(2,40,14,30,21,70)
  26. o3 = Order(3,31,46,20,41,70)
  27. o4 = Order(4,25,35,11,29,70)
  28. test_data = [Match(o2,d1,get_value=True),Match(o3,d1,get_value=True),Match(o2,d1,get_value=True),
  29. Match(o1,d2,get_value=True),Match(o3,d2,get_value=True),Match(o2,d3,get_value=True),
  30. Match(o2,d4,get_value=True),Match(o3,d4,get_value=True),Match(o4,d5,get_value=True)]
  31. res = dispatch(test_data)
  32. print(res)
  33. pass