使用生成器的2-opt算法代替嵌套for循环

时间:2018-04-01 12:09:06

标签: python-3.x nested generator traveling-salesman

我在TSP问题上使用了opt-2方法,并修改了我在网上找到的一些代码。我传入一个列表road_map,它是一个包含区域(字符串),城市(字符串),纬度(浮点)和经度(浮点)的元组列表,如下所示(这里组成的拉特和长点)

[('South England' 'London', '32.361538', '-86.279118'), 
 ('Yorkshire', 'Manchester', 35,6656, '-86.4543')]

我想使用这个2-opt算法对地图重新排序并返回一个包含比前一个更短距离的新地图/路线,这将是best_map。

下面是我正在使用的两个函数,但是对于嵌套的fors和if语句来说它似乎很混乱。我认为使用生成器函数必须有一个更清晰的方法,但我无法思考如何。有什么想法吗?

def opt2(best_map, i, j):

   new_map = best_map[:]
   new_map[i:j] = best_map[j:i:-1]

   return new_map


def start_opt2(road_map):

   best_map = road_map[:]
   best_distance = compute_total_distance(best_map)

   for i in range(len(best_map) + 1):
       for j in range(i+1, len(best_map)):
          new_map = opt2(best_map, i, j)
          new_distance = compute_total_distance(new_map)

          if new_distance < best_distance:
               best_distance= new_distance
               best_map = new_map
               break


return best_map

0 个答案:

没有答案