2017-02-08 40 views
1

免責聲明:我幾乎是全新的clingo,並回答設置編程一般。解決邏輯謎題與答案設置編程

我試圖用clingo解決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). 

但是,這是不是很擴展到諸多變數大難題。任何人都可以建議一個更好的方式來做到這一點?

+0

您應該更改標題。 ASP可以參考Active Server Pages,這是一個關於堆棧溢出的高度被販賣的主題。 – Tony

+0

在'persons'和'house'中使用';',但是''''''使用''',這是非常不同的。看看'clingo --text '給你帶來了什麼。 –

回答

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).