MiniZinc:如何对等长子数组求和?
MiniZinc: how to sum equal-length subarrays?
我遇到的问题是如何将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 给了我警告 "model inconsistency detected, in call 'forall' in array comprehension expressionwith i = 0 with j = 11" 并输出“=====UNSATISFIABLE=====”。
如何让它工作?
(从我的评论中提取答案。)
您的 forall
循环尝试多次为 c[i] 分配不同的值,这是不允许的。在 MiniZinc 中,与传统编程语言不同,决策变量不能重新分配。
我猜你的意思是在并行循环中进行加法:
constraint
forall(i in 0..9) ( c[i]=a[i]+b[i+10])
;
我遇到的问题是如何将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 给了我警告 "model inconsistency detected, in call 'forall' in array comprehension expressionwith i = 0 with j = 11" 并输出“=====UNSATISFIABLE=====”。
如何让它工作?
(从我的评论中提取答案。)
您的 forall
循环尝试多次为 c[i] 分配不同的值,这是不允许的。在 MiniZinc 中,与传统编程语言不同,决策变量不能重新分配。
我猜你的意思是在并行循环中进行加法:
constraint
forall(i in 0..9) ( c[i]=a[i]+b[i+10])
;