Используя тот же индекс в сумме - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь написать простое ограничение, но, возможно, я делаю основную ошибку кодирования. Я хочу использовать один и тот же индекс дважды, но 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" и говорит, что его не существует.

Я бы хотел, чтобы ограничение суммировало переменную z для всех [t], во всех 3 моих [i] и сумму на [l], где [l] должно быть точно таким же значением.

Каким будет правильный способ кодирования этого ограничения?

1 Ответ

2 голосов
/ 09 апреля 2019

Вы должны помнить приоритеты операторов и решить проблему с круглыми скобками.

Позвольте привести небольшой пример:

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

execute
{
writeln(a);
}

Это не работает, но работает нормально:

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

execute
{
writeln(a);
}
...