clingo:按规则放置元素

clingo: placing element according to the rules

你好,我正在尝试了解有关 clingo 的更多信息,有以下术语:v(1,2).v(2,1).v(3,4).v(4,3),意思是第一个元素不能与第二个元素在同一行,第二个不能与第一个元素在同一行,ecc ..想写一些规则来找到一个 2x2 矩阵,其中放置元素(I,J,N)根据那个限制。提前致谢

v(1,2).v(2,1).v(3,4).v(4,3)
rows(1..2).
col(1..2).
1{m(I,J,N) : v(N)}1 :- rows(I), col(J).  
1{m(I,J,N) : rows(I), col(J)}1 :- v(N).
...code...
output 
[1,1,1][1,2,4][2,1,2][2,2,3]
[1,1,4][1,2,1][2,1,2][2,2,3]
[1,1,1][1,2,4][2,1,3][2,2,2]
[1,1,4][1,2,1][2,1,3][2,2,2]

第一条规则

1{m(I,J,N) : v(N)}1 :- rows(I), col(J).

将一个 v(N) 放入矩阵的每个位置,但您没有定义 v(N),您定义了 v(N,M)。

第二条规则

1{m(I,J,N) : rows(I), col(J)}1 :- v(N).

将每个 v(N) 恰好放在一行和一列中。

我建议你用w(X)替换v(X)并定义

w(N) :- v(N,_).
w(N) :- v(_,N).

这意味着您将所有可能的值从 v(X,Y) 转换为 w。