clingo: размещение элемента в соответствии с правилами - PullRequest
0 голосов
/ 18 февраля 2019

Здравствуйте, я пытаюсь узнать больше о клинго, есть следующие термины: 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 Ответ

0 голосов
/ 19 февраля 2019

Первое правило

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) ровно в одну строку и столбец.

Я предлагаю заменить v (X) наw (X) и определите

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

Это означает, что вы получаете все возможные значения из v (X, Y) в w.

...