2-OPT 算法仍然没有删除所有的交叉点

问题描述

我用 Python 编写了 2-OPT 算法,但有时它不会删除交集。我无法找到问题所在。你能帮我吗?

大多数情况下,该算法会找到没有任何交叉点的路线,但很少会找不到没有交叉点的路线。


    def route_distance(route):
        length = len(route)
        
        result = 0
        for i in range(length):
            if i + 1 < length:
                result += distance(route[i + 1,:],route[i,:])
         
        return result
    
    
    def swap_route(route,i,j):
        return np.concatenate((route[0:i],route[j:-len(route)+i-1:-1],route[j+1:len(route)]))
    
            
    
    def opt(cluster):
        route = cluster
        
        n = len(route)
         
        solution = np.arange(route.shape[0]) 
    
        distance = route_distance(route)
        
        improvement = True
        
        while improvement:
            improvement = False
            for i in range(1,n-2):
                for j in range(i + 1,n):
                    route_swapped = swap_route(route,j)
                    distance_route_swapped = route_distance(route_swapped)
                    if (distance_route_swapped < distance):    
                        route = route_swapped
                        improvement = True
                        distance = distance_route_swapped
                        
        
        return (route,distance)
    ```
    
    Cluster is a n x 2 matrix of coordinates:
    [[x y]
    [1 2]
    [3 4]
    [2 2]]

For example

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)