MiniZinc: как суммировать подмассивы равной длины?

Проблема, с которой я столкнулся, заключается в том, как добавить переменные из a[0..9] в b[10..19]. Мой код:

array[0..19] of int: a=array1d(0..19,[0,1,2,3,4,5,6,7,8,9,9,8,7,6,5,4,3,2,1,0]);
array[0..19] of int: b=array1d(0..19,[9,8,7,6,5,4,3,2,1,0,0,1,2,3,4,5,6,7,8,9]);
array[0..9] of var int: c;
constraint
    forall(i in 0..9, j in 10..19)
    (
        c[i]=a[i]+b[j]
    );
solve satisfy;
output[show(c[i]) | i in 0..9];

Однако MiniZinc выдает мне предупреждение "Обнаружена несогласованность модели при вызове" forall "в выражении понимания массива с i = 0 с j = 11" и выводит "=====UNSATISFIABLE=====".

Как мне заставить это работать?

1 ответ

Решение

(Извлекает ответ из моих комментариев.)

Ваш forall Цикл пытается присвоить c[i] много раз с разными значениями, что недопустимо. В MiniZinc, в отличие от традиционных языков программирования, переменные решения не могут быть переназначены.

Я предполагаю, что вы имеете в виду сложение в параллельном цикле:

constraint  
  forall(i in 0..9) ( c[i]=a[i]+b[i+10])
;
Другие вопросы по тегам