2-opt算法不生成正确的路由

时间:2017-05-19 00:27:25

标签: javascript arrays artificial-intelligence graph-algorithm

我正在尝试使用标准的2-opt机制在javascript中生成2-opt路由,我做了以下实现:

// Simple one 2-opt swap
function swap(arr, i, k) {
  return arr.slice(0, i - 1).concat(arr.slice(i - 1, k).reverse(), arr.slice(k));
}

// Complete 2-opt swaps
function swaps(arr) {
  swapies = []; // array of possible swaps
  for (var i = 2; i < arr.length - 1; i++) {
    for (var k = i + 1; k < arr.length; k++) {
      swapies.push(swap(arr, i, k));
    }
  }
  return swapies;
}

a = [0, 3, 1, 2, 4, 0] // route example
swaps(a)
/* =>  [ [ 0, 1, 3, 2, 4, 0 ],
  [ 0, 2, 1, 3, 4, 0 ],
  [ 0, 4, 2, 1, 3, 0 ],
  [ 0, 3, 2, 1, 4, 0 ],
  [ 0, 3, 4, 2, 1, 0 ],
  [ 0, 3, 1, 4, 2, 0 ] ]
 */

据我所知,除 [0,4,2,1,3,0] 交换外,上述输出正确。有谁知道如何解决这个问题?谢谢!

0 个答案:

没有答案