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])
;