【问题标题】:Solving a Logic Puzzle with Answer Set Programming使用答案集编程解决逻辑难题
【发布时间】:2017-02-08 21:41:47
【问题描述】:

免责声明:我对 cligo 和一般的答案集编程几乎完全陌生。

我正在尝试使用 cligo 解决 grid logic puzzle。首先,我想生成包含每个类别的一个实例的所有模型。

例如,如果有三个人: person(a; b; c)., 三间房子:house(w; x; z)., 和三种颜色: color(r; g; y).

我想要一个潜在的稳定模型 assign(a, r, x), assign(b, g, z), assign(c, y, w) 另一个潜在的稳定模型是 assign(a, g, w), assign(b, y, z), assign(c, r, x) 等。也就是说,每个人只出现一次,颜色也是如此。我认为,一旦有了这些模型,我就可以使用约束来消除模型,直到难题解决为止。

我尝试过使用选择规则和约束:

{assign(P, C, H)} :- person(P), color(C), house(H).
P1=P2 :- assign(P1, C, H), assign(P2, C, H).

但这并不能完全扩展到具有许多变量的大型谜题。谁能建议一个更好的方法来做到这一点?

【问题讨论】:

  • 你应该改变你的标题。 ASP 可以参考 Active Server Pages,这是 Stack Overflow 上的热门话题。
  • 您在personshouse 中使用;,但在color 中使用,,这是非常不同的。看看clingo --text <yourprogramfile>给你什么。

标签: answer-set-programming clingo


【解决方案1】:

假设你想写color(r;g;y).下面的呢?

% assign each house exactly one person/color 1 {assign(P, C, H) : person(P), color(C) } 1 :- house(H). % assign each person exactly one house/color 1 {assign(P, C, H) : house(H), color(C) } 1 :- person(P). % assign each color exactly one person/house 1 {assign(P, C, H) : house(H), person(P) } 1 :- color(C).

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-19
    • 2011-05-31
    • 2017-05-07
    • 2011-06-10
    • 1970-01-01
    相关资源
    最近更新 更多