【问题标题】:converting 2 opt swap to 3 opt swap将 2 opt 互换转换为 3 opt 互换
【发布时间】:2016-05-19 09:39:22
【问题描述】:

我正在为旅行商问题编写一个 3-opt 算法,我已经让 2-opt 工作,我正在尝试将其转换为 3-opt。 我不知道如何交换 3 点,谁能帮帮我?

我的代码:

private void ThreeOptSwap(int i, int k, int l) {
    int size = route.size();
    new_Route = new ArrayList<Point>();
    new_Route.addAll(route);
    // 1. take route[0] to route[i-1] and add them in order to new_route
    for ( int c = 0; c <= i - 1; c++ )
    {
        new_Route.set(c, route.get(c) );
    }

    // 2. take route[i] to route[k] and add them in reverse order to new_route
    int dec = 0;
    for ( int c = i; c <= k; c++ )
    {
        new_Route.set( c, route.get( k - dec ) );
        dec++;
    }

    // 3. take route[k+1] to end and add them in order to new_route
    for ( int c = k + 1; c < size; c++ )
    {
        new_Route.set( c, route.get( c ) );
    }
}

【问题讨论】:

    标签: java algorithm traveling-salesman


    【解决方案1】:

    您不必交换三个点,而是交换路线的三个边缘,这就是您在这里遇到问题的原因。例如,假设您的行程是 0,1,...,i,i+1,..., j, j+1, ..., k, k+1,...,n,0。 您需要做的是删除三个边 [i,i+1]、[j,j+1] 和 [k,k+1] 并尝试重建您的游览(请注意,如果您尝试使用所有可能性重建,您还将实施 2-OPT,您还将返回当前游览)。 您在幻灯片 39 上有一个示例 here

    【讨论】:

      猜你喜欢
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 2018-05-18
      • 2017-08-03
      • 1970-01-01
      • 2023-04-10
      • 2019-02-20
      相关资源
      最近更新 更多