旅行推销员变异算法

时间:2016-07-13 12:52:06

标签: algorithm traveling-salesman kruskals-algorithm

我很难找到下一个TSP问题变化的矛盾例子。

  

输入:G =(V,E)无向完整图,它保存三角形不等式,w:E-> R +权重函数和源顶点s。

     

输出:简单的汉密尔顿循环,以s开始和结束,重量最小。

算法:

1. S=Empty-Set   
2. B=Sort E by weights.   
3. Initialized array M of size |V|, 
   where each cell in the array holds a counter (Initialized to 0)
   and a list of pointers to all the edges of that vertex (In B).    

4. While |S|!=|V|-1  
    a. e(u,v)=removeHead(B).  
    b. If e does not close a cycle in S then     
          i.    s=s union {e}   
         ii.    Increase degree counter for u,v.  
        iii.    If M[u].deg=2 then remove all e' from B s.t e'=(u,x).   
         iv.    If M[v].deg=2 then remove all e' from B s.t e'=(v,x).

5. S=S union removeHead(B).

这将类似于Kruskal算法(使用union-find DS) 步骤4.b.iii和4.b.iv将使用指针列表完成。

我非常怀疑这个算法是否属实,所以我立刻转而找到它为什么是错误的。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

假设我们有一个包含4个顶点(a, b, c, d)的图形,其边缘权重如下:

w_ab = 5
w_bc = 6
w_bd = 7
w_ac = 8
w_da = 11
w_dc = 12

             7
       |--------------|
   5   |   6      12  |
a ---- b ---- c ----- d
|______________|      |
|      8              |
|_____________________|
      11

三角形不等式适用于此图中的每个三角形。

当更好的周期为a-b-c-d-a(费用为32)时,您的算法将选择周期a-b-d-c-a(费用34)。

答案 1 :(得分:0)

您的程序可能不会终止。考虑具有节点{1,2,3,4}和边{(1,2),(1,3),(2,3),(2,4),(3,4)}的图。该图中唯一的哈密顿循环是{(1,2),(1,3),(2,4),(3,4)}。假设最低加权边是(2,3)。然后你的程序将选择(2,3),选择{(1,2),(1,3)}中的一个并消除另一个,选择{(2,4),(3,4)}中的一个并消除另一个,然后永远循环。

这样的细微差别使旅行商问题变得如此困难。

答案 2 :(得分:0)

考虑4个顶点上的完整图形,其中{a,b,c,d}是节点,被设想为方形的顺时针排列角。设边缘权重如下。

w({a,b}) := 2, // "edges"
w({b,c}) := 2,
w({c,d}) := 2,
w({d,a}) := 2,
w({a,c}) := 1, // "diagnoals"
w({b,d}) := M

其中M是一个大于2的整数。一方面,哈密顿循环包括" edge"重量为8.另一方面,包含{a,c}(最轻的边缘)的哈密顿循环必须包含{b,d}且总重量

1 + M + 2 + 2 = 5 + M > 8

大于最小可能的重量。总的来说,这意味着通常最小权重的hamitonian循环不一定包含最小边缘,这是由原始问题中的算法选择的。此外,由于M趋于无穷大,因此算法在approximation ratio方面任意严重,因为

(5 + M) / 8

任意增长。