This article mainly introduces the Python-based subset tree template to solve the traveling salesman problem (TSP), describes the traveling salesman problem briefly, and analyzes the relevant implementation steps and operation skills of Python using the backtracking subset tree template to solve the traveling salesman problem, and the required friends can refer to
The example in this paper describes the Python-based subset tree template to solve the traveling salesman problem (TSP). Share to everyone for your reference, as follows:
Problem
The traveler's question (traveling salesman problem,tsp) is that the traveler is going to travel to several cities, the cost of each city is known, and in order to save money, the traveler decides to depart from the city and return to the initial city after each city trip. Ask him what route he should choose to make the total cost of travel shortest?
Analysis
This problem can be described as follows: g= (V,e) is a weighted, forward graph that finds a forward loop that contains each node in V, that is, a travel route, so that the sum of all the edges on the ring is minimized.
The difference between this question and the previous article http://www.jb51.net/article/122933.htm is that the subject is a graph with a right. Just a little bit of modification.
The length of the solution is fixed n+1.
Each node in the diagram has its own adjacency node. For a node, all its neighboring nodes form the state space of the node. When the path reaches this node, its state space is traversed.
Finally, you can find the best solution!
Obviously, continue to apply the backtracking subset Tree template!!!
Code
"Travel quotient problem (traveling salesman problem,tsp)" # represents a weighted graph n = 5 # nodes with adjacency table a,b,c,d,e = Range (n) # node Name graph = [{b:7, C:6, D:1, E:3 }, {a:7, C:3, D:7, E:8}, {a:6, B:3, D:12, e:11}, {a:1, B:7, C:12, e:2}, {a:3, B:8, c:11, d:2}]x = [0]* (n+1) # A solution (n+1 meta Array, fixed length) X = [] # A set of solutions best_x = [0]* (n+1) # The best solution found (path) min_cost = 0 # Minimum Travel # Conflict Detection def conflict (k): Global N,graph,x,bes T_x,min_cost # K-node, whether the previous has traversed if K < n and X[k] in X[:k]: return True # Back to the departure node if k = = N and x[k]! = x[0]: RE Turn True # The amount of travel for the previous part of the solution exceeds the minimum total travel cost that has been found = SUM ([Graph[node1][node2] for node1,node2 in Zip (X[:k], x[1:k+1])]) if 0 < Min_cost < Cost:return True return False # conflict free # travel salesman problem (TSP) def tsp (k): # Reach (x's) k node global n,a,b,c,d,e,graph,x,x , min_cost,best_x if k > N: # The length of the solution exceeds, has traveled n+1 nodes (if not back to the departure node, then k==n) cost = SUM ([Graph[node1][node2] for Node1,node2 in Zip (x[:-1], x[1:])] # Calculate Total travel if Min_cost = = 0 or cost < min_cost:best_x = x[:] Min_cost = Cost #prin T (x) else:for nodeIn Graph[x[k-1]]: # traversal node X[k-1] adjacency node (state space) x[k] = node if not conflict (k): # Pruning TSP (k+1) # test x[0] = C # Departure section Point: The first node of path X (whichever) TSP (1) # Start with the 2nd node in x print (best_x) print (min_cost)