問題の簡単な説明。いくつかのオブジェクトがあり、このオブジェクトを 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に対応します)