MiniZinc:如何将等长子阵列相加?

时间:2017-11-15 05:42:49

标签: minizinc

我遇到的问题是如何将[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 个答案:

答案 0 :(得分:3)

(从我的评论中摘录答案。)

您的forall循环尝试使用不同的值多次分配c [i],这是不允许的。在MiniZinc中,与传统的编程语言不同,决策变量无法重新分配。

我猜你的意思是在并行循环中添加:

constraint  
  forall(i in 0..9) ( c[i]=a[i]+b[i+10])
;