问题的简要说明。我有许多对象,我们称这个对象为 X。每个 X 可以分配给多个容器 Y。每个 Y,每个 X 需要两个。每个 X 都有一个属性 L。每个 Y 都有其 L 级别的最小规范,即分配给特定 Y 的两个 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”字段属性(这里 dies 对应于 X)