我正在使用clingo解决flood-it问题。我使用谓词frontier([CELL], [COLOR], [TIMESTEP])
来跟踪所有与洪水相邻的单元。边界集可能看起来像这样:
frontier(c(1,3),2,3) frontier(c(2,1),2,3) frontier(c(2,2),3,3) frontier(c(2,3),3,3) frontier(c(3,1),3,3) frontier(c(3,2),3,3) frontier(c(4,1),3,3)
我们可以将此集合分为两个子集。每个颜色值分别为2或3的一种。我基本上需要做的两件事:
如何比较谓词逻辑中n(n> = 2)个集合的基数?
提前谢谢!
答案 0 :(得分:0)
我找到的答案比一般的域(即clingo)更具体。
我最初要做的是计算颜色为C的单元格的数量:
frontier_subset_size(C,N) :- color(C), N = #count{ X : frontier(X,C) }.
然后,我使用#max
集合过滤最大的集合:
max_subset_color(C) :- frontier_subset_size(C,N), N = #max{ M : frontier_subset_size(_,M) }.
这可以解决此特定问题。
但是我想知道如何用纯谓词逻辑来做到这一点。