0

cplex Java での巡回セールスマン問題のサブツアー除去制約の設定に問題があります。TSP は、一連の顧客 n に対して最も安いルートを見つけることを目的としていますが、各顧客は 1 回だけ訪問する必要があります。

友人が、正しいはずの通常の TSP でサブツアーを削除するためのこれらの cplex コード行を教えてくれました。

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]

コードにエラーは表示されませんが、ソリューションにはまだサブツアーがあります。誰かがそれについて何が悪いのか知っていますか?

これで十分な情報かどうかはわかりません。わかりにくい場合はお知らせください。

4

0 に答える 0