在我用 MiniZincIDE 0.9.9 编写的模型中,以下约束在数组理解期间引发“无法确定边界”错误:
constraint forall(i in Layers)(
layDists[i] == sum(
[Dists[find(a,b,c,d)] | a in Coords, c in Layers, b in Coords, d in Layers
where coordSolLays[a,c] == i ]));
在哪里
array[Coords,Layers] of var Layers: coordSolLays;
array[Layers] of var 0..10000000: layDists;
function var 1..length(Dists): find(var int: a, var int: b, var int: c, var int: d) =
adjIndex[a] + (d-1) + (c-1)*numLays + (b-1)*numLays2;
adjIndex 和 Diss 是参数数组。
错误本身显示为:
MiniZinc: evaluation error:
.../model.mzn:206:
in call 'forall'
in array comprehension expression
with i = 1
.../model.mzn:207:
in binary '=' operator expression
in call 'sum'
.../model.mzn:208:
in array comprehension expression
with a = 1
with c = 1
with b = 1
with d = 1
cannot determine bounds
我知道当无法确定变量边界时通常会引发错误(MiniZinc“无法确定边界”),但是,所有约束变量都是绑定的。
我怀疑问题出在 find(a,b,c,d)、coordSolLays[a,b] 和/或它们的相互作用上,因为用整数或简单变量(即 a、b、i)替换它们中的一个或两个产生一个解决方案。
对可能发生的事情有任何想法吗?提前致谢!