在总和中使用相同的索引

Using the same index in a sum

我正在尝试编写一个简单的约束,但我可能犯了一个基本的编码错误。我想使用同一个索引两次,但是 OPL 给我一条错误消息,指出第二个索引不存在。

forall(i in 1..3, t in 10)
   sum(l in 1..2)
     z[i][l][t]+z[i+3][l][t]<=1;

我删除了参数的名称并将它们替换为值,因为我认为这是一个 "grammatical" 错误,我不想让这个问题太混乱。 OPL 在我的第二个 "l" 索引下划线并告诉我它不存在。

我想让约束对所有 [t] 的 z 变量求和,在我的所有 3 个 [i] 和 [l] 上求和,其中 [l] 必须是完全相同的值。

编写此约束的正确方法是什么?

你应该记住运算符的优先级,你可以用括号解决你的问题。

让我举个小例子:

int a=sum(i in 1..2) 1+i;

execute
{
writeln(a);
}

这行不通,但效果很好:

int a=sum(i in 1..2) (1+i);

execute
{
writeln(a);
}