""" ========================== 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()