From fe5a7f53bcf65ffd7f3a7c93ebb9d1ebf9be9737 Mon Sep 17 00:00:00 2001 From: Jacob Theisen <jacobth@stud.ntnu.no> Date: Tue, 23 Nov 2021 23:17:51 +0100 Subject: [PATCH] so --- ov9/program1.py | 123 +++++++++++++++++++++++++++++++----------------- 1 file changed, 80 insertions(+), 43 deletions(-) diff --git a/ov9/program1.py b/ov9/program1.py index 6121084..ade277a 100644 --- a/ov9/program1.py +++ b/ov9/program1.py @@ -1,6 +1,6 @@ import sys from queue import PriorityQueue - +import timeit class int_points (object): def __init__(self, id, type, name): @@ -32,45 +32,51 @@ class results(object): #prep nodes -with open('./test_files/noder.txt.1','r') as file: - node_file = file.read() - -node_file = node_file.split() -num_of_nodes = int(node_file[0]) -node_file.pop(0) - node_arr = [] -for i in range(0, len(node_file), 3): - #nodenr breddegrad lengdegrad - node_arr.append(nodes(int(node_file[i]), float(node_file[i+1]), float(node_file[i+2]))) +start = timeit.default_timer() +with open('./noder.txt','r') as file: + for i in file: + i = i.split() + if len(i) == 1: + num_of_nodes = int(i[0]) + else: + node_arr.append(nodes(int(i[0]), float(i[1]), float(i[2]))) -#prep edges -with open('./test_files/kanter.txt.1','r') as file: - edge_file = file.read() +slutt = timeit.default_timer() +print('nodes loaded correct in: ', slutt - start) -edge_file = edge_file.split() -num_of_edges = int(edge_file[0]) -edge_file.pop(0) edge_arr = [] -for i in range(0, len(edge_file), 5): - #franode tilnode kjøretid lengde fartsgrense - edge_arr.append(edges(int(edge_file[i]), int(edge_file[i+1]), int(edge_file[i+2]), int(edge_file[i+3]), int(edge_file[i+4]))) - -#prep intresting -with open('./test_files/interessepkt.txt.1','r') as file: - intresting_file = file.read() +#prep edges +start = timeit.default_timer() +with open('./kanter.txt','r') as file: + for i in file: + i = i.split() + if len(i) == 1: + num_of_edges= int(i[0]) + else: + edge_arr.append(edges(int(i[0]), int(i[1]), int(i[2]), int(i[3]), int(i[4]))) + +slutt = timeit.default_timer() +print('edges loaded correct in: ', slutt - start) -intresting_file = intresting_file.split('\n') -num_of_intresting = int(intresting_file[0]) -intresting_file.pop(0) +#prep intresting intresting_arr = [] -for i in range(len(intresting_file)): - #nodenr kode "Navn på stedet" - tmp_values = intresting_file[i].split() - intresting_arr.append(int_points(int(tmp_values[0]), int(tmp_values[1]), ' '.join(tmp_values[2:]))) - +start = timeit.default_timer() +with open('./interessepkt.txt','r') as file: + for i in file: + i = i.split() + if len(i) == 1: + num_of_intresting= int(i[0]) + else: + try: + intresting_arr.append(int_points(int(i[0]), int(i[1]), ' '.join(i[2:]))) + except: + print(i) + exit() +slutt = timeit.default_timer() +print('int_points loaded correct in: ', slutt - start) max_num = max(edge_arr,key=lambda item:item.time) res_arr = [] @@ -88,18 +94,27 @@ def rec_func2(node, global_fra): path.append(node.node) return path +def find_bensin(arr): + with open('./bensin.csv', 'w') as file: + print('bensin to be found on disse benserne: ') + for u in arr: + a = next(a for a in node_arr if str(a.node) == str(u.id)) + print(u.name) + file.write(f'{a.bredde},{a.lengde}\n') + return end_que = PriorityQueue() queue = PriorityQueue() we_soon_to_be_done = False -def dijkstras(slutt, start): +def dijkstras(slutt, start, bensin): global we_soon_to_be_done global queue node_count= 0 + bensin_arr = [] while queue or not end_que.empty: node_count +=1 - if node_count % 100 == 0: - print(node_count) + if node_count % (num_of_nodes//100) == 0: + print(f'searched {node_count/(num_of_nodes//100)}% of nodes') if we_soon_to_be_done: tmp_que_item = end_que.get() current_node = [b for b in res_arr if b.node == tmp_que_item][0] @@ -107,21 +122,28 @@ def dijkstras(slutt, start): tmp_que_item = queue.get() current_node = [b for b in res_arr if b.total_time == tmp_que_item and b.in_que][0] - if current_node.total_time == 422488: - print('ye', node_count) for tmp_edge in edge_arr: if tmp_edge.fra == current_node.node: current_neighbour = [a for a in res_arr if a.node == tmp_edge.til][0] if not current_neighbour.visited and not current_neighbour.in_que: current_neighbour.total_time = current_node.total_time + tmp_edge.time current_neighbour.prev = current_node.node - if tmp_edge.til == slutt: + if bensin: + a = next((a for a in intresting_arr if a.id == current_neighbour.node), -1) + if a != -1: + if a.type == 2: + print(f'en benser er funnet: {a.name}') + bensin_arr.append(a) + if len(bensin_arr) >= 10: + find_bensin(bensin_arr) + break + if tmp_edge.til == slutt and not bensin: current_node.visited = True current_node.in_que = False we_soon_to_be_done = True end_que.put(tmp_edge.til) else: - if tmp_edge.fra == slutt: + if tmp_edge.fra == slutt and not bensin: end_que.put(tmp_edge.til) else: current_neighbour.in_que = True @@ -140,13 +162,17 @@ def dijkstras(slutt, start): print('Done mapping, calcualting result') end_node = [b for b in res_arr if b.node == slutt][0] travel_arr = rec_func2(end_node, start) - travel_arr = reversed(travel_arr) + travel_arr = list(reversed(travel_arr)) print(f'total time: {end_node.total_time}\nshortest path: {"->".join(str(v) for v in travel_arr)}') count = 0 for i in res_arr: if i.total_time != max_num.time +1: count +=1 print('total nodes added to map: ', count) + with open('./path.csv', 'w') as file: + for noob in travel_arr: + a = next(a for a in node_arr if str(a.node) == str(noob)) + file.write(f'{a.bredde},{a.lengde}\n') break else: if we_soon_to_be_done: @@ -163,14 +189,25 @@ def init_things(): if len(sys.argv) > 1: if sys.argv[1] == '-d': #node_id - start = 6368906 - slutt = 6789998 + start = 20 + slutt = 400 init_table() queue.put(0) start_node = next(a for a in res_arr if a.node == start) start_node.total_time = 0 start_node.in_que = True - dijkstras(slutt, start) + if len(sys.argv) > 2: + if sys.argv[2] == '-b': + print('les go bensin') + start = timeit.default_timer() + dijkstras(slutt, start, True) + slutt = timeit.default_timer() + print(f'total time for locating bensin is: {slutt-start}') + else: + start = timeit.default_timer() + dijkstras(slutt, start, False) + slutt = timeit.default_timer() + print(f'total time for locating path is: {slutt-start}') elif sys.argv[1] == '-a': print('A* not yet implemented') else: -- GitLab