Храбрый / Осторожный рассуждения в клинго - PullRequest
1 голос
/ 14 апреля 2019

В руководстве Clingo есть два режима, называемых осторожным и смелым, которые представлены следующим образом:

смелый Вычислить смелые последствия (объединение всех наборов ответов) логикипрограмма.

осторожный Вычислить осторожные последствия (пересечение всех наборов ответов) логической программы.

Никаких дополнительных сведений в руководстве не приводится.Я попробовал несколько примеров, но у меня возникли проблемы с пониманием проблемы.

Я пытался запустить следующую простую программу ASP:

p :- not q.
q :- not p.

Запуск Clingo без параметра mode даст правильные наборы ответов:

answer 1:{p}
answer 2:{q}

Как описано в руководстве, если работать в смелом режиме, который вычислит объединение всех наборов ответов, я должен получить результат {p, q}.

Аналогично для осторожного случая,ожидается пустой результат.

Однако фактический результат для смелых рассуждений Клинго таков:

версия clingo 5.3.0

Чтение из test / cauensive_reasoning.lp

Решение ...

Ответ: 1

q

Последствия: [1; 2]

Ответ: 2

qp

Последствия: [2; 2]

Удовлетворительно

Модели: 2

Храбрый: да

Последствия: 2

Вызовы: 1

Время: 0,006 с (Решение: 0,00 с 1-я модель: 0,00 с Unsat: 0,00 с)

Время ЦП: 0,002 с

И для осторожного случая:

версия clingo 5.3.0

Чтение из теста / cautims_reasoning.lp

Решение ...

Ответ: 1

q

Последствия: [0; 1]

Ответ: 2

Последствия: [0; 0]

УДОВЛЕТВОРИТЕЛЬНО

Модели: 2

Осторожно: да

Последствия: 0

Вызовы: 1

Время: 0,001 с (Решение:0,00s 1-я модель: 0,00s Unsat: 0,00s)

Процессорное время: 0,001 с

Так что же представляют цифры в []?Как понять осторожный и смелый режим рассуждений в Clingo?

1 Ответ

1 голос
/ 14 апреля 2019

Когда вы вызываете clingo с алгоритмом перечисления --enum-mode brave или --enum-mode cautious, атомы, которые появляются в каждой перечисляемой модели, "сходятся" к набору смелых или осторожных последствий, соответственно.То есть в режиме brave атомы будут монотонно увеличиваться, а в режиме cautious атомы будут монотонно уменьшаться.Думайте об этом как о «бегущем» объединении или пересечении для смелых и осторожных последствий, соответственно

Числа в квадратных скобках [d;p] имеют следующее значение: звонки clingo TextOutput::printMetaдля каждой модели, которая печатает пару целых чисел [d;p] с определенными последствиями d и оставшимися возможными последствиями p, вычисленными как Output::numCons.

Редактировать: последний ответзатем даст вам окончательный результат, то есть, смелые / осторожные последствия входной программы.Если все, что вас волнует, это конечный результат, вы можете вызвать клинго, чтобы получить смелые последствия (например, программы a | b | c | d.):

% echo 'a|b|c|d.' | clingo -e brave | grep -A1 '^Answer:' | tail -n -1
b c d a

и осторожных последствий программы a | b | c | d.(т. е. пустой набор), вам просто нужно запустить clingo в режиме осторожного перечисления:

% echo 'a|b|c|d.' | clingo -e cautious | grep -A1 '^Answer:' | tail -n -1

...