Minizinc - 实现计数约束

问题描述

我正在解决这个问题。我有两个决策变量 x 和 y。对于 x 中的相同值以及 y 中相应的相同值,我必须计算该值在 y 中的出现次数。 我试图实现它。但我怀疑功能是否符合预期。

我的代码

set of int: x = 1..4;
set of int: y = 1..3;
set of int: a = 1..10;
set of int: b = 1..5;

%Decision variables
array[x,y] of var a: recordA;
array[x,y] of var b: recordB;

constraint  forall(i in x ) (
                alldifferent([recordB[i,j] | j in y])
                );
constraint  forall(i in x ) (
                alldifferent([recordA[i,j] | j in y])
                ); 

%constraint forall(i,k in x,j in y where i<k /\ recordB[i,j]=recordB[k,j]) (
%            forall(i,j in y where recordA[i,j]=recordA[k,j])(
%                 count(recordA,recordA[i,j]) 
%);
OR

%Maybe something like this
%constraint forall(i in x,j in y,m in b)(
%                  count(col(recordA,j),count(col(recordB,m))
 %           );

这个想法是对于每个 recorB 和每个 recordA,遍历所有的 y(对于所有的 x)并计算有多少值出现在对应的相同 recordA 的相同 recordB 中。

例如-对于记录B中的值r1-​​>记录A中出现的值r2的计数。

Example

在这种情况下,recordB 在 recordB[1]、recordB[6] 和 recordB[11] 处出现了 3 次值为 4 相应地,recordA 在 recordA[1]、recordA[6] 处有两次值 5,但在 recordA[11] 处值为 1。

我想在记录A对应的记录B中计算这些相同值的出现次数

并且recordA的每一行都是唯一的 而recordB的每一行都是唯一的

感谢您的建议

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)