我在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