Advertisement
Guest User

Untitled

a guest
Jun 25th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.53 KB | None | 0 0
  1. import time
  2. import csv
  3. from collections import defaultdict
  4. from heapq import *
  5. import copy
  6. from multiprocessing import Process
  7. from multiprocessing import Queue
  8.  
  9.  
  10. def dijkstra(gg, starting_point, destinations, results):
  11. start = time.time()
  12. orig_destinations = copy.deepcopy(destinations)
  13. solution_list = list()
  14. solution_order = list()
  15. q, seen = [(0, starting_point, ())], set()
  16. while q:
  17. (cost, v1, path) = heappop(q)
  18. if v1 not in seen:
  19. seen.add(v1)
  20. path = (v1, path)
  21. if orig_destinations:
  22. if v1 in orig_destinations:
  23. index = [i for i, e in enumerate(orig_destinations) if e == v1]
  24. # index = orig_destinations.index(v1)
  25. # solution_list.insert(index, (cost, path))
  26. for ind in index:
  27. solution_list.insert(ind, cost)
  28. solution_order.insert(ind, v1)
  29. # indux = sorted(index, reverse=True)
  30. for ind in sorted(index, reverse=True):
  31. orig_destinations.pop(ind)
  32. else:
  33. dummy = list()
  34. for i in destinations:
  35. dummy.append(solution_list[solution_order.index(i)])
  36. # return solution_list, solution_order, dummy
  37. results.put([starting_point, destinations, dummy])
  38. print("Starting node:", starting_point, "ended in", time.time() - start, "seconds")
  39. return dummy
  40.  
  41. for c, v2 in gg.get(v1, ()):
  42. if v2 not in seen:
  43. heappush(q, (cost + c, v2, path))
  44.  
  45. print("Starting node:", starting_point, "ended in", time.time() - start, "seconds")
  46. results.append([starting_point, destinations, float("inf")])
  47. return float("inf")
  48.  
  49.  
  50. if __name__ == "__main__":
  51. print('Initializing...\n')
  52. results = Queue()
  53. NewYork_Edgelist = open("./NewYork_Edgelist.csv")
  54.  
  55. reader = csv.reader(NewYork_Edgelist)
  56.  
  57. next(reader, None)
  58. edges = list()
  59. for row in reader:
  60. edges.append(tuple((row[2], row[3], float(row[5]))))
  61.  
  62. g = defaultdict(list)
  63. for l, r, c in edges:
  64. g[l].append((c, r))
  65.  
  66. fromNode1 = '63897'
  67. toNode1 = ['530502', '865238', '1069005', '951981', '61481',
  68. '658516', '164716', '986147', '1148038', '1164216']
  69. fromNode2 = '730938'
  70. toNode2 = ['1098876', '514944', '1114686', '992999',
  71. '129039', '9993', '388307', '72051', '983766', '343466']
  72. fromNode3 = '989066'
  73. toNode3 = ['973564', '567699', '1013916', '251091', '181836',
  74. '1071879', '255966', '1053966', '553308', '799614']
  75. fromNode4 = '989055'
  76. toNode4 = ['971422', '573017', '1014169', '252555', '183338',
  77. '1071108', '256025', '1053896', '553490', '798696']
  78. fromNode5 = '1146036'
  79. toNode5 = ['753174', '1009285', '1007970', '946205', '1065244',
  80. '221882', '1002032', '747905', '44123', '137377']
  81. fromNode6 = '1146390'
  82. toNode6 = ['752513', '1007678', '1007806', '948255', '1064975',
  83. '222897', '1003072', '747508', '44122', '137055']
  84. fromNode7 = '356589'
  85. toNode7 = ['902114', '943364', '858599', '1221848', '1114953',
  86. '757203', '1117318', '814839', '799302', '753403']
  87. fromNode8 = '357784'
  88. toNode8 = ['901758', '943378', '861354', '1221768', '1115282',
  89. '757439', '1118651', '813347', '799198', '753163']
  90.  
  91. print('Starting...\n')
  92. print('Dijkstra sequential')
  93. starting_time = time.time()
  94. dijkstra(g, fromNode1, toNode1, results)
  95. dijkstra(g, fromNode2, toNode2, results)
  96. dijkstra(g, fromNode3, toNode3, results)
  97. dijkstra(g, fromNode4, toNode4, results)
  98. dijkstra(g, fromNode5, toNode5, results)
  99. dijkstra(g, fromNode6, toNode6, results)
  100. dijkstra(g, fromNode7, toNode7, results)
  101. dijkstra(g, fromNode8, toNode8, results)
  102.  
  103. for i in range(1, 9):
  104. result = results.get()
  105. print("Starting node:", result[0], "Result:", result[2])
  106.  
  107. print('\n-------------------------------\n'
  108. 'Total time: ', time.time() - starting_time,
  109. '\n-------------------------------')
  110.  
  111.  
  112.  
  113. print('\n===============================\n===============================\n')
  114.  
  115.  
  116.  
  117. print('Dijkstra multiprocess')
  118. starting_time = time.time()
  119. threads = list()
  120.  
  121. threads.append(
  122. Process(target=dijkstra, args=(g, fromNode1, toNode1, results)))
  123. threads.append(
  124. Process(target=dijkstra, args=(g, fromNode2, toNode2, results)))
  125. threads.append(
  126. Process(target=dijkstra, args=(g, fromNode3, toNode3, results)))
  127. threads.append(
  128. Process(target=dijkstra, args=(g, fromNode4, toNode4, results)))
  129. threads.append(
  130. Process(target=dijkstra, args=(g, fromNode5, toNode5, results)))
  131. threads.append(
  132. Process(target=dijkstra, args=(g, fromNode6, toNode6, results)))
  133. threads.append(
  134. Process(target=dijkstra, args=(g, fromNode7, toNode7, results)))
  135. threads.append(
  136. Process(target=dijkstra, args=(g, fromNode8, toNode8, results)))
  137.  
  138. for x in threads:
  139. x.start()
  140.  
  141. for x in threads:
  142. x.join()
  143.  
  144. for r in threads:
  145. result = results.get()
  146. print("Starting node:", result[0], "Result:", result[2])
  147.  
  148. print('\n-------------------------------\n'
  149. 'Total time: ', time.time() - starting_time,
  150. '\n-------------------------------')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement