基数约束类型失败;如何正确使用minizinc`card`

卡斯特马

以下模型适用于兰福德问题

int: m = 2;
int: n = 3;

set of int: DOM = 1..m*n;
set of int: RAN = 1..n;

array [DOM] of var 1..n: nos;

constraint forall(j in DOM, k in j+1..m*n) (nos[j] = nos[k] /\ forall(l in j + 1 .. k - 1)(nos[l] != nos[k]) -> k - j = nos[j] + 1);

constraint forall(r in RAN)( sum([1 | i in DOM where nos[i] = r]) = m);

solve satisfy;

但是,以更自然的阅读约束

constraint forall(r in RAN)( card({i | i in DOM where nos[i] = r}) = m);

失败并显示错误

MiniZinc: type error: no function or predicate with this signature found: `card(var opt set of int)'

有什么建议么?

科布

您设置的大小取决于var,这意味着您将像想象var optvar那样插入该类型

有关更多信息,请参见此处:

MiniZinc:类型错误:预期的int的“ array [int]”,实际的var opt int的“ array [int]”

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章