Spaces:
Runtime error
Runtime error
| """ | |
| ========================== | |
| Traveling Salesman Problem | |
| ========================== | |
| This is an example of a drawing solution of the traveling salesman problem | |
| The function is used to produce the solution is christofides, | |
| where given a set of nodes, it calculates the route of the nodes | |
| that the traveler has to follow in order to minimize the total cost. | |
| """ | |
| import matplotlib.pyplot as plt | |
| import networkx as nx | |
| import networkx.algorithms.approximation as nx_app | |
| import math | |
| G = nx.random_geometric_graph(20, radius=0.4, seed=3) | |
| pos = nx.get_node_attributes(G, "pos") | |
| # Depot should be at (0,0) | |
| pos[0] = (0.5, 0.5) | |
| H = G.copy() | |
| # Calculating the distances between the nodes as edge's weight. | |
| for i in range(len(pos)): | |
| for j in range(i + 1, len(pos)): | |
| dist = math.hypot(pos[i][0] - pos[j][0], pos[i][1] - pos[j][1]) | |
| dist = dist | |
| G.add_edge(i, j, weight=dist) | |
| cycle = nx_app.christofides(G, weight="weight") | |
| edge_list = list(nx.utils.pairwise(cycle)) | |
| # Draw closest edges on each node only | |
| nx.draw_networkx_edges(H, pos, edge_color="blue", width=0.5) | |
| # Draw the route | |
| nx.draw_networkx( | |
| G, | |
| pos, | |
| with_labels=True, | |
| edgelist=edge_list, | |
| edge_color="red", | |
| node_size=200, | |
| width=3, | |
| ) | |
| print("The route of the traveller is:", cycle) | |
| plt.show() | |