我试图编写一个简单的约束,但是我可能犯了一个基本的编码错误。我想两次使用相同的索引,但是OPL给我一条错误消息,指出第二个索引不存在。
forall(i in 1..3, t in 10)
sum(l in 1..2)
z[i][l][t]+z[i+3][l][t]<=1;
我已经删除了参数的名称,并用值替换了它们,因为我认为这是“语法上的”错误,我不想让这个问题太令人困惑。 OPL强调了我的第二个“ l”索引,并告诉我它不存在。
我希望约束所有[i]的所有[t]的z变量和[l]的和,其中[l]必须是完全相同的值。
编码此约束的正确方法是什么?
答案 0 :(得分:2)
您应该记住操作员的优先级,并且可以通过括号解决问题。
让我给你举个小例子:
int a=sum(i in 1..2) 1+i;
execute
{
writeln(a);
}
不起作用
但是
int a=sum(i in 1..2) (1+i);
execute
{
writeln(a);
}
工作正常
致谢