From c915b077d2feff8e24d3c008adf70d691860a804 Mon Sep 17 00:00:00 2001 From: Skullheadx <94652084+Skullheadx@users.noreply.github.com> Date: Wed, 28 Dec 2022 01:43:11 -0500 Subject: [PATCH] one tree lower bound --- graph.py | 26 ++++++++++++++++---------- main.py | 12 +++++++----- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/graph.py b/graph.py index b3cad99..48aa6c7 100644 --- a/graph.py +++ b/graph.py @@ -78,7 +78,7 @@ def find_shortest_route(routes: list) -> list: return shortest_route -def print_info(route: list, time: float, method_name: str, mst: float, ot: float, r=0) -> None: +def print_info(route: list, time: float, method_name: str, one_tree: float, one_tree_time:float, r=0) -> None: print( f""" Traveling Salesman Problem @@ -86,8 +86,8 @@ Method Used: {method_name} Time Used: {round(time, r):,} seconds Number of Nodes: {(len(route) - 1):,} Distance: {round(calculate_route(route), r):,} -Minimum Spanning Tree: {round(mst, r):,} -One Tree: {round(ot, r):,} +One Tree Lower Bound: {round(one_tree, r):,} +One Tree Time Used: {round(one_tree_time, r):,} """) @@ -129,10 +129,16 @@ def find_MST(graph: list) -> float: def find_one_tree(graph: list) -> float: - removed_vertex = graph[0] - mst = find_MST(graph[1:]) - distances = [] - for town in graph[1:]: - distances.append(distance(removed_vertex, town)) - distances.sort() - return mst + distances[1] + lower_bound = None + + for removed_vertex in graph: + g = graph[:graph.index(removed_vertex)] + graph[graph.index(removed_vertex)+1:] + mst = find_MST(g) + distances = [] + for town in g: + distances.append(distance(removed_vertex, town)) + distances.sort() + d = mst + distances[1] + if lower_bound is None or d < lower_bound: + lower_bound = d + return lower_bound diff --git a/main.py b/main.py index eedd9ff..dcface5 100644 --- a/main.py +++ b/main.py @@ -27,15 +27,17 @@ def main(): filename = "graph1.txt" graph = read(GRAPH_PATH, filename) - time_start = perf_counter() + route_time_start = perf_counter() # route = brute_force(graph) # 10 nodes in 85.042 seconds. Optimal = 2,262.29 route = nearest_neighbor(graph) # 100 nodes in 0.5762094999663532 seconds. Distance = 6,270.568142156188 - time_end = perf_counter() + route_time_end = perf_counter() - MST = find_MST(graph) - ONE_TREE = find_one_tree(graph) + # MST = find_MST(graph) + one_tree_time_start = perf_counter() + one_tree = find_one_tree(graph) + one_tree_time_end = perf_counter() - print_info(route, time_end - time_start, "NN Heuristic", MST, ONE_TREE, r=100) + print_info(route, route_time_end - route_time_start, "NN Heuristic", one_tree, one_tree_time_end-one_tree_time_start,r=100) display = Display(os.path.join(GRAPH_PATH, filename), route) display.show() -- 2.54.0