]> Skullheadx's Git Forge - The-Traveling-Salesman-Problem.git/commitdiff
one tree lower bound
authorSkullheadx <94652084+Skullheadx@users.noreply.github.com>
Wed, 28 Dec 2022 06:43:11 +0000 (01:43 -0500)
committerSkullheadx <94652084+Skullheadx@users.noreply.github.com>
Wed, 28 Dec 2022 06:43:11 +0000 (01:43 -0500)
graph.py
main.py

index b3cad99a8c8fb20f8fffe6efb6ec61c512501462..48aa6c79b94ebf273c1204c6e7b42b4aa11d6463 100644 (file)
--- 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 eedd9ff8580c9f191c88b42ce9045b12569cad95..dcface54ee506b94395c779e96ed95f8f96363c9 100644 (file)
--- 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()