2

問題の簡単な説明。いくつかのオブジェクトがあり、このオブジェクトを X と呼びます。各 X はいくつかのコンテナー Y に割り当てることができます。各 Y には、X が 2 つ必要です。各 X には属性 L があります。各 Y には、その L レベルの最小仕様があります。つまり、特定の Y に割り当てられた 2 つの X は、Y の L 仕様と等しいかそれを超えている必要があります。

        X is an array of structs with field L (single value) with values 0 to 5
        Y is an array of structs with field L (single value) with values 0 to 8
        CP cp = new CP();
        IIntVar[] dies = cp.IntVarArray(X.size(), 0, 10);
        IIntVar[] YvarL= cp.IntVarArray(Y.size(), 0, 10);
        for (int i = 1; i <= Y.Lenth; i++)
        {
            IIntExpr tempL = cp.IfThen(cp.Eq(dies[0], i), cp.Sum(YvarL[i], X[0].L));
            for (int j = 1; j < X.Length(); j++)
                cp.IfThen(cp.Eq(dies[j], i), cp.Sum(YvarL[i], X[j].L);
            cp.Add(cp.Ge(YvarL[i], Y[i].L)
        }

しかし、5 行目に Argument 2: Cannot convert from 'ILOG.Concert.IIntExpr' to 'ILOG.Constraint.IConstraint' というエラーが表示されます。

私が達成しようとしているのは、「i」の値を持つすべての「死ぬ」決定変数について、対応する X 変数の「L」属性フィールドの合計が、Y[i] の「L」フィールド属性を超えなければならないということです (ここで死ぬはXに対応します)

4

1 に答える 1

1

Opl は正しい:cp.Sum(YvarL[i], X[0].L)整数式ですが、 ifThen構文には制約引数が必要です。

于 2019-12-06T17:52:55.500 に答える