首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带枚举的MiniZinc global_cardinality函数

带枚举的MiniZinc global_cardinality函数
EN

Stack Overflow用户
提问于 2020-12-27 21:21:01
回答 1查看 507关注 0票数 1

根据医生们

枚举类型的一个关键行为是,当它们被用于期望整数的位置时,它们会自动被强制到整数。例如,这允许我们使用在整数(如global_cardinality_low_up )上定义的全局约束。

global_cardinality*家族有两种类型:谓词和函数。在谓词的情况下,枚举项的数组确实会强迫ints,而强制的函数似乎不起作用。例如,

代码语言:javascript
复制
include "global_cardinality_closed.mzn";

enum MyEnum = {A, B, C};
array[1..2] of MyEnum: toCount = [A, C];

array[1..100] of var MyEnum: values;

%1
constraint let {
    array[int] of var int: counts = global_cardinality_closed(values, toCount);
} in counts[1] > counts[2];

%2
constraint global_cardinality_closed(values, toCount, [5, 6]);

在MiniZincIDE中编译上面的代码片段将得到以下结果:

代码语言:javascript
复制
MiniZinc: type error: no function or predicate with this signature found: `global_cardinality_closed(array[int] of var MyEnum,array[int] of MyEnum)'
Cannot use the following functions or predicates with the same identifier:
predicate global_cardinality_closed(array[$_] of var int: x,array[$_] of int: cover,array[$_] of var int: counts);
    (requires 3 arguments, but 2 given)

同时,%2之后的代码也编译得很好。

我是错过了什么,还是应该提交一个bug?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-27 21:41:57

要使%1工作,您可以

代码语言:javascript
复制
include "global_cardinality_closed_fn.mzn";

或者简单的

代码语言:javascript
复制
include "globals.mzn";

函数是通过使用谓词实现的:

代码语言:javascript
复制
include "global_cardinality_closed.mzn";

/** @group globals.counting
  Returns an array with number of occurrences of \a cover[\p i] in \a x.

  The elements of \a x must take their values from \a cover.
*/
function array[$Y] of var int: global_cardinality_closed(array[$X] of var int: x,
                                                         array[$Y] of int: cover) :: promise_total =
  let { array[int] of int: cover1d = array1d(cover);
        array[index_set(cover1d)] of var 0..length(x): counts;
        constraint global_cardinality_closed(array1d(x),cover1d,counts); } 
  in arrayXd(cover,counts);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65470590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档