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