0

我正在使用 cligo 来解决洪水问题。我使用谓词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 的一种。我需要的基本上是两件事:

  1. 确定哪个子集更大,即颜色值为 2 或 3 的单元格是否更多(顺便说一句,颜色的数量不固定,因此解决方案必须是通用的)
  2. 获取最大集合成员的颜色值

如何比较谓词逻辑中 n (n>=2) 集的基数?

先感谢您!

4

1 回答 1

0

I found an answer which is more domain (i.e. clingo) specific than general.

What I initially do is count the number of cells that are of color C:

frontier_subset_size(C,N) :- color(C), N = #count{ X : frontier(X,C) }.

Then I filter the biggest set(s) using the #max aggregate:

max_subset_color(C) :- frontier_subset_size(C,N), N = #max{ M : frontier_subset_size(_,M) }.

This works as desired for this specific problem.

Yet I would like to know how to do that in pure predicate logic.

于 2018-12-18T20:28:40.647 回答