繁体   English   中英

TSP使用python

[英]TSP using python

我已经做了功课,想出解决旅行者推销员问题的python程序。 在课堂上,他们解释了它应该如何工作并展示了一个例子。

path_map = [[0,10,15,20],
        [5,0,9,10],
        [6,13,0,12],
        [8,8,9,0]]

这是一个示例地图我认为它是流行的问题,我可以找到解决这个问题的算法在互联网上。 但我不能。 我试过自己的版本。 但我失败了。 任何帮助将不胜感激。 这是我到目前为止所拥有的

class TSP:

def __init__(self, init, path_map):
    self.init = init
    self.cost = 0
    self.path_map = path_map
    self.vertices = [i for i in range(1,len(path_map)+1)]

def min_path(self, start):
    if not self.vertices:
        return self.path_map[start-1][init-1]
    else:
        m = [i for i in range(len(self.vertices)+1)]
        i=0
        for v in self.vertices:
            tv = self.vertices.pop(v-1)
            m[i]=self.cost + self.min_path(v)
            self.vertices.insert(v-1,tv)
            i = i + 1
        self.cost = self.cost + min(m)

    return cost `

我得到的,当我尝试运行它时:

>>> t = TSP(1,path_map)
>>> t.min_path(1)
Traceback (most recent call last):
  File "<pyshell#54>", line 1, in <module>
    t.min_path(1)
  File "/home/wanhrust/python/TSP.py", line 42, in min_path
    m[i]=self.cost + self.min_path(v)
  File "/home/wanhrust/python/TSP.py", line 42, in min_path
    m[i]=self.cost + self.min_path(v)
  File "/home/wanhrust/python/TSP.py", line 42, in min_path
    m[i]=self.cost + self.min_path(v)
  File "/home/wanhrust/python/TSP.py", line 41, in min_path
    tv = self.vertices.pop(v)
IndexError: pop index out of range
  1. 生成大量随机解决方案。
  2. 按长度排序这些解决方案。
  3. 删除最差的50%
  4. 以某种方式将最好的50%相互结合(将它们拼接在一起)
  5. 转到2。

重复此操作,直到找到稳定的解决方案。 它(几乎可以肯定)不会是最优的,但它会比随机好得多。

IndexError:pop索引超出范围 - 当迭代索引不存在时的情况列表,例如list = [1,2,3],有3个元素,并且你试图得到list [10],你会得到那个错误

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM