在为 TSP 寻找最佳邻域时替代两个“for”循环?

计算科学 非线性规划 近似 图论 爪哇
2021-11-30 01:10:15

我正在尝试使用禁忌搜索来解决旅行推销员问题。我已经能够成功地找到“足够接近”的最佳解决方案(以及一个最佳解决方案,耶!)。

目前,我正在使用 sub-tour reversal 作为本地搜索程序。它的基本要点类似于 2-opt,但不是交换两个城市,而是反转了这两个城市之间的子旅游,包括这两个城市。即,如果我们有一个游览 [1, 2, 3, 4, 5, 6, 1],我们交换城市 2 和 5,我们得到 [1, 5, 4, 3, 2, 6, 1]。

但是,我使用两个“for”循环来从最初的游览中找到最佳邻域。但如你所知,每一次交换都是一个非常耗时的过程,这将我限制在不到 500 个城市的 TSP 问题上。超过 1000 个城市将占用我的课程时间。

所以我的问题是,我可以应用除两个或循环之外的其他方法来更高效(快速)地找到最佳邻域吗?

现在我的“for”循环看起来像这样:

int col = 1;
for (int i = 1; i < initialSolution.length-1; i++) {
    for (int j = col; j < initialSolution.length-1; j++) {
        if (i == j) {
            continue;
        }
        if ((i == 1) && (j == initialSolution.length-2)) {
            continue;
        }
        if ((j == 1) && (i == initialSolution.length-2)) {
            continue;
        }
        // LOCAL SEARCH PRECEDURE
    }
}

这样我就不会重复以前颠倒的旅程,并且不会颠倒整个旅程。

0个回答
没有发现任何回复~