From bf0add95d3c679e06387edc682466bd983b56fec Mon Sep 17 00:00:00 2001 From: Skullheadx <704277@pdsb.net> Date: Sun, 8 Jan 2023 18:23:47 -0500 Subject: [PATCH] Christofides explanation --- Christofides.png | Bin 0 -> 26387 bytes Christofides_bad.png | Bin 0 -> 27134 bytes README.md | 18 +++++++++++++++++- display.py | 6 +++--- 4 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 Christofides.png create mode 100644 Christofides_bad.png diff --git a/Christofides.png b/Christofides.png new file mode 100644 index 0000000000000000000000000000000000000000..25f61772f6755415eb074bbe6d603f6b80cbb4ff GIT binary patch literal 26387 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

f5h}=mVkbd)wf?Pa1t}# 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 literal 0 HcmV?d00001 diff --git a/Christofides_bad.png b/Christofides_bad.png new file mode 100644 index 0000000000000000000000000000000000000000..23eeee2e3e53a48661324a36bd36e26f09f1aa7c GIT binary patch literal 27134 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 07822bd..f4a667e 100644 --- a/README.md +++ b/README.md @@ -83,4 +83,20 @@ Using these new approximation ratios, we can now determine how effective differe -------------------------------------------------------------------------------------------------------------- **Method 3: Greedy Heuristic** -If we use an approach similar to how we created the Minimum Spanning Tree, we can apply similar logic to create a good heuristic. In each iteration, we determine the shortest edge distance to add to the route, however we must follow the rules that each town is connected to exactly 2 other towns and by adding an edge, we do not create a cycle of length smaller than n. \ No newline at end of file +If we use an approach similar to how we created the Minimum Spanning Tree, we can apply similar logic to create a good heuristic. In each iteration, we determine the shortest edge distance to add to the route, however we must follow the rules that each town is connected to exactly 2 other towns and by adding an edge, we do not create a cycle of length smaller than n. + +-------------------------------------------------------------------------------------------------------------- +**Method 4: The Christofides Algorithm** + +When we compare the MST to the optimal solution, they often share many of the same edges. Meaning that if we modify the MST into a TSP tour, it will be very similar to the optimal solution. +![](Christofides.png) + +Take the above graph for instance. The blue lines represent a TSP tour created using the Christofides Algorithm while the orange lines represent the MST. +The Christofides Algorithm creates a tour by: +1. Finding all odd degree vertices in the MST. Each node in the MST connects a number of other nodes, this number is the degree of the node. For example, the node at (276,378) connects to 2 other nodes, namely (275, 450) and (215, 263). Therefore it has degree 2. +2. Find the perfect matching of all odd degree vertices. By taking each odd degree vertex and creating an edge with another vertex such that all odd degree vertices have been paired up with the minimum cost, we can determine the perfect matching. (Note: In any graph, the sum of all the vertex degrees is equal to twice the number of edges. Therefore, there can not be an odd number of odd degree vertices) +3. Combine the perfect matching and the MST into a multi-graph. This graph will by definition have only even degree vertices (since the MST's odd degree vertices will each receive one more edge therefore its odd degree will become and even degree) +4. Construct an Eulerian Tour of the multi-graph by passing through each edge once until all edges have been passed through. +5. Construct a TSP tour by going through the Eulerian tour and when we encounter a node we have already visited, simply skip over it and connect the previous node to the next one that has not been visited yet. + +-------------------------------------------------------------------------------------------------------------- diff --git a/display.py b/display.py index 3f080a3..b1f88b9 100644 --- a/display.py +++ b/display.py @@ -135,9 +135,9 @@ class Display: for i, node in enumerate(self.nodes): node.draw(self.screen) - self.salesman.draw(self.screen) + # self.salesman.draw(self.screen) pygame.display.update() delta = clock.tick(60) / 1000 # Seconds - # pygame.image.save(self.screen, "Greedy_Heuristic+OneTree.png") - # quit() + # pygame.image.save(self.screen, "Christofides.png") + # quit() \ No newline at end of file -- 2.54.0