📜  DAA-旅行商问题

📅  最后修改于: 2021-01-12 03:37:06             🧑  作者: Mango


问题陈述

旅行者需要从一个列表中访问所有城市,在该列表中,所有城市之间的距离是已知的,每个城市应仅被访问一次。他一次访问每个城市并返回原城市的最短路线是什么?

旅行商问题是最臭名昭著的计算问题。我们可以使用蛮力方法来评估每个可能的游览,然后选择最佳游览。对于图中n个顶点,有( n -1)个!数量的可能性。

尽管没有多项式时间算法,但可以使用更少的时间来获得解决方案,而不是使用动态编程方法进行暴力破解。

让我们考虑图G =(V,E) ,其中V是一组城市, E是一组加权边。边e(u,v)表示顶点uv连接。顶点uv之间的距离为d(u,v) ,该距离应为非负数。

假设我们从1号城市开始,访问了一些城市之后,现在在j号城市。因此,这是部分游览。我们当然需要知道j ,因为这将确定接下来前往哪些城市最方便。我们还需要知道到目前为止访问过的所有城市,以便我们不再重复其中的任何一个。因此,这是一个适当的子问题。

对于包含1jЄS的城市SЄ{1,2,3,…,n}的子集,令C(S,j)是访问S中每个节点一次的最短路径的长度,从1开始,到j结束。

什么时候S | > 1,我们定义C(S,1) = ∝,因为路径无法在1开始和结束。

现在,让我们用较小的子问题来表达C(S,j) 。我们需要从1开始,到j结束。我们应该这样选择下一个城市

$$ C(S,j)=最小值\:C(S-\ lbrace j \ rbrace,i)+ d(i,j)\:where \:i \ in S \:and \:i \ neq jc( S,j)= minC(s- \ lbrace j \ rbrace,i)+ d(i,j)\:where \:i \ in S \:and \:i \ neq j $$

Algorithm: Traveling-Salesman-Problem 
C ({1}, 1) = 0 
for s = 2 to n do 
   for all subsets S Є {1, 2, 3, … , n} of size s and containing 1 
      C (S, 1) = ∞ 
   for all j Є S and j ≠ 1 
      C (S, j) = min {C (S – {j}, i) + d(i, j) for i Є S and i ≠ j} 
Return minj C ({1, 2, 3, …, n}, j) + d(j, i) 

分析

最多有$ 2 ^ nn $个子问题,每个子问题都需要线性时间才能解决。因此,总运行时间为$ O(2 ^ nn ^ 2)$。

在下面的示例中,我们将说明解决旅行商问题的步骤。

分析

根据上图,准备下表。

1 2 3 4
1 0 10 15 20
2 5 0 9 10
3 6 13 0 12
4 8 8 9 0

S =Φ

$$ \ small Cost(2,\ Phi,1)= d(2,1)= 5 \ small Cost(2,\ Phi,1)= d(2,1)= 5 $$

$$ \ small Cost(3,\ Phi,1)= d(3,1)= 6 \ small Cost(3,\ Phi,1)= d(3,1)= 6 $$

$$ \ small Cost(4,\ Phi,1)= d(4,1)= 8 \ small Cost(4,\ Phi,1)= d(4,1)= 8 $$

S = 1

$$ \ small成本(i,s)=最小\ lbrace成本(j,s –(j))+ d [i,j] \ rbrace \ small Cost(i,s)= min \ lbrace成本(j,s )-(j))+ d [i,j] \ rbrace $$

$$ \ small Cost(2,\ lbrace 3 \ rbrace,1)= d [2,3] + Cost(3,\ Phi,1)= 9 + 6 = 15cost(2,\ lbrace3 \ rbrace,1)= d [2,3] + cost(3,\ Phi,1)= 9 + 6 = 15 $$

$$ \ small Cost(2,\ lbrace 4 \ rbrace,1)= d [2,4] + Cost(4,\ Phi,1)= 10 + 8 = 18cost(2,\ lbrace4 \ rbrace,1)= d [2,4] + cost(4,\ Phi,1)= 10 + 8 = 18 $$

$$ \ small Cost(3,\ lbrace 2 \ rbrace,1)= d [3,2] + Cost(2,\ Phi,1)= 13 + 5 = 18cost(3,\ lbrace2 \ rbrace,1)= d [3,2] + cost(2,\ Phi,1)= 13 + 5 = 18 $$

$$ \ small Cost(3,\ lbrace 4 \ rbrace,1)= d [3,4] + Cost(4,\ Phi,1)= 12 + 8 = 20cost(3,\ lbrace4 \ rbrace,1)= d [3,4] + cost(4,\ Phi,1)= 12 + 8 = 20 $$

$$ \ small Cost(4,\ lbrace 3 \ rbrace,1)= d [4,3] + Cost(3,\ Phi,1)= 9 + 6 = 15cost(4,\ lbrace3 \ rbrace,1)= d [4,3] + cost(3,\ Phi,1)= 9 + 6 = 15 $$

$$ \ small Cost(4,\ lbrace 2 \ rbrace,1)= d [4,2] + Cost(2,\ Phi,1)= 8 + 5 = 13cost(4,\ lbrace2 \ rbrace,1)= d [4,2] + cost(2,\ Phi,1)= 8 + 5 = 13 $$

S = 2

$$ \ small Cost(2,\ lbrace 3,4 \ rbrace,1)= \开始{cases} d [2,3] + Cost(3,\ lbrace 4 \ rbrace,1)= 9 + 20 = 29 \ \ d [2,4] + Cost(4,\ lbrace 3 \ rbrace,1)= 10 + 15 = 25 = 25 \ small Cost(2,\ lbrace 3,4 \ rbrace,1)\\\ lbrace d [ 2,3] + \ small cost(3,\ lbrace4 \ rbrace,1)= 9 + 20 = 29d [2,4] + \ small Cost(4,\ lbrace 3 \ rbrace,1)= 10 + 15 = 25 \ end {cases} = 25 $$

$$ \ small Cost(3,\ lbrace 2,4 \ rbrace,1)= \ begin {cases} d [3,2] + Cost(2,\ lbrace 4 \ rbrace,1)= 13 + 18 = 31 \ \ d [3,4] + Cost(4,\ lbrace 2 \ rbrace,1)= 12 + 13 = 25 = 25 \ small Cost(3,\ lbrace 2,4 \ rbrace,1)\\\ lbrace d [ 3,2] + \ small cost(2,\ lbrace4 \ rbrace,1)= 13 + 18 = 31d [3,4] + \ small Cost(4,\ lbrace 2 \ rbrace,1)= 12 + 13 = 25 \ end {cases} = 25 $$

$$ \ small Cost(4,\ lbrace 2,3 \ rbrace,1)= \ begin {cases} d [4,2] + Cost(2,\ lbrace 3 \ rbrace,1)= 8 + 15 = 23 \ \ d [4,3] + Cost(3,\ lbrace 2 \ rbrace,1)= 9 + 18 = 27 = 23 \ small Cost(4,\ lbrace 2,3 \ rbrace,1)\\\ lbrace d [ 4,2] + \ small cost(2,\ lbrace3 \ rbrace,1)= 8 + 15 = 23d [4,3] + \ small Cost(3,\ lbrace 2 \ rbrace,1)= 9 + 18 = 27 \ end {cases} = 23 $$

S = 3

$$ \ small Cost(1,\ lbrace 2,3,4 \ rbrace,1)= \开始{cases} d [1,2] + Cost(2,\ lbrace 3,4 \ rbrace,1)= 10 + 25 = 35 \\ d [1,3] + Cost(3,\ lbrace 2,4 \ rbrace,1)= 15 + 25 = 40 \\ d [1,4] + Cost(4,\ lbrace 2,3 \ rbrace,1)= 20 + 23 = 43 = 35 cost(1,\ lbrace 2,3,4 \ rbrace),1)\\ d [1,2] + cost(2,\ lbrace 3,4 \ rbrace ,1)= 10 + 25 = 35 \\ d [1,3] + cost(3,\ lbrace 2,4 \ rbrace,1)= 15 + 25 = 40 \\ d [1,4] + cost(4 ,\ lbrace 2,3 \ rbrace,1)= 20 + 23 = 43 = 35 \ end {cases} $$

最低费用路径为35。

从成本{1,{2,3,4},1}开始,我们得到d [1,2]的最小值。当s = 3时,从1到2选择路径(成本为10),然后向后移动。当s = 2时,我们得到d [4,2]的最小值。从2到4选择路径(成本为10),然后向后移动。

s = 1时,我们得到d [4,3]的最小值。选择4到3的路径(成本为9),然后我们将转到s =Φ步骤。我们得到d [3,1]的最小值(成本为6)。

价值观