【问题标题】:MiniZinc: how to sum equal-length subarrays?MiniZinc:如何对等长子数组求和?
【发布时间】:2017-11-15 05:42:48
【问题描述】:

我遇到的问题是如何将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 给我警告“检测到模型不一致,在 i = 0 和 j = 11 的数组理解表达式中调用 'forall'”并输出“=====UNSATISFIABLE=====”。

如何让它工作?

【问题讨论】:

  • forall 循环尝试多次分配 c[i] 不同的值,这是不允许的。也许您的意思是在并行循环中添加:forall(i in 0..9) ( c[i]=a[i]+b[i+10])?
  • 好的,谢谢,可以了。好吧,您的意思是决策变量具有与参数相似的特征(即一个参数只能被赋予一个值),对吧?
  • 是的,与传统编程语言不同,在 MiniZinc 中不能重新分配决策变量。

标签: minizinc


【解决方案1】:

(从我的 cmets 中提取答案。)

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多