【问题标题】:Compare cardinality of multiple sets and get specific value from member of greatest set比较多个集合的基数并从最大集合的成员中获取特定值
【发布时间】:2018-11-22 20:34:31
【问题描述】:

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

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

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

提前谢谢你!

【问题讨论】:

    标签: logic planning answer-set-programming clingo


    【解决方案1】:

    我找到了一个比一般的更具体的领域(即 cligo)的答案。

    我最初做的是计算颜色为 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) }.
    

    这可以根据需要解决这个特定问题。

    但我想知道如何在纯谓词逻辑中做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-22
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多