Смелое/Осторожное рассуждение в клинго

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

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

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

Больше никакой информации в руководстве нет. Я попробовал несколько примеров и не могу понять проблему.

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

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

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

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

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

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

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

клинго версия 5.3.0

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

Решение...

Ответ: 1

q

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

Ответ: 2

q p

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

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

Модели : 2

Храбрый: да

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

Звонки : 1

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

Время процессора: 0,002 с

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

клинго версия 5.3.0

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

Решение...

Ответ: 1

q

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

Ответ: 2

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

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

Модели : 2

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

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

Звонки : 1

Время: 0,001 с (Решение: 0,00 с 1-я модель: 0,00 с Ненасыщенность: 0,00 с)

Время процессора: 0,001 с

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


person BobHU    schedule 14.04.2019    source источник


Ответы (1)


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

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

Изменить: последний ответ даст вам окончательный результат, то есть смелые/осторожные последствия входной программы. Если все, что вам нужно, это конечный результат, вы можете вызвать clingo, как это, чтобы получить смелые последствия (например, программы 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

person tkrennwa    schedule 14.04.2019
comment
Таким образом, для окончательного результата пересечения осторожности я должен обратиться к последнему набору ответов, а для случая объединения я должен обратиться к первому, так ли это? Если это так, то все остальные модели можно рассматривать как промежуточные результаты. Как же тогда вычисляются эти промежуточные результаты и имеют ли они какое-то значение или применение? - person BobHU; 15.04.2019
comment
Последний набор атомов всегда будет давать вам храбрые/осторожные последствия. - person tkrennwa; 15.04.2019