Matlab中可能的“旅行推销员”功能?

时间:2014-10-10 17:05:13

标签: matlab

我希望使用矩阵解决旅行推销员类型问题,以便找到转换之间的最短时间。矩阵看起来像这样:

A =  [inf 4 3 5; 
      1 inf 3 5;
      4 5 inf 3;
      6 7 1 inf] 

y轴表示“from”节点,x轴表示“to”节点。我试图找到从节点1到节点4的最佳时间。我被告知有一个名为“TravellingSalesman”的Matlab函数。这是真的,如果没有,我将如何解决这个矩阵?

谢谢!

1 个答案:

答案 0 :(得分:0)

以下是解决从节点1到节点n的路径的TSP的强力算法概述:

C = inf
P = zeros(1,n-2)
for each permutation P of the nodes [2..n-1]
   // paths always start from node 1 and end on node n
   C = A(1,P(1)) + A(P(1),P(2)) + A(P(2),P(3)) + ... + 
       A(P(n-3),P(n-2)) + A(P(n-2),n)
   if C < minCost
      minCost = C
      minPath = P
   elseif C == minCost         // you only need this part if you want
      minPath = [minPath; P]   // ALL paths with the shortest distance
   end
end

请注意,总和中的第一个和最后一个因素是不同的,因为您事先知道第一个和最后一个节点是什么,因此您不必将它们包含在排列中。因此,在给出的示例中,使用n=4,实际上只有2!=2个可能的路径。

可以使用perms(2:n-1)预先计算排列列表,但这可能涉及存储大矩阵(n! x n)。或者,您可以在生成每个排列时计算成本。 Mathworks文件交换中有几个文件,其中包含适用于您的nextPerm等名称。无论哪种方式,随着n的增长,您将产生大量的排列,并且您的计算将需要很长时间。