0

我在为 cplex java 中的旅行商问题设置子旅游消除约束时遇到了问题。TSP 是关于为一组客户 n 找到最便宜的路线,而每个客户都应该被访问一次。

一位朋友给了我这些 cplex 代码行,用于在正常 TSP 中消除 subtour 应该是正确的:

forall (i in Nodes) Drive [i][i]==0;
forall (i in Nodes, j in 2..n:(i!=j)) y[i]-y[j] + n*Drive[i][j] <= (n-1);

我将其转移到以下 cplex java 代码中:

for(int i0=0; i0<n; i0++){
    for(int q=0; q<n; q++){
        model.addEq(w[i0][i0][q], 0);
    }
}

for(int i=1; i<n; i++){
    for(int j=2; j<n; j++){
        for(int y=0; y<n; y++){
            model.addLe(model.sum((grossQ[i-1]-grossQ[j-1]), model.prod(n, drive[i][j][y])), (n - 1));
        }
    }
}

我正在使用具有决策变量 drive[i][j][q] 的基于位置的模型,其中 q 表示访问客户的位置。数组 GrossQ = [2..n]

代码没有显示任何错误,但解决方案仍然有一个 subtour。有人知道它有什么问题吗?

我不太确定,如果这是足够的信息。所以让我知道,如果它太混乱了。

4

0 回答 0