Что такое pb.conflict в Z3? - PullRequest
       6

Что такое pb.conflict в Z3?

0 голосов
/ 02 ноября 2018

Я пытаюсь найти оптимальное решение, используя Z3 API для python. Я использовал set_option("verbose", 1) для печати утверждений, которые Z3 генерирует при проверке sat. Одним из операторов, которые он печатает, является оператор pb.conflict . Заявления выглядят примерно так - заявления pb.conflict .

Я хочу знать, что именно является pb.conflict . Что означают эти заявления? Кроме того, какие две цифры напечатаны вместе с ним?

1 Ответ

0 голосов
/ 02 ноября 2018

pb обозначает псевдо-логическое. Псевдо-булева функция - это функция от логического значения до некоторого другого домена, обычно Real. conflict происходит, когда выбор переменной приводит к неудовлетворительному набору предложений, после чего решатель должен вернуться назад. Поддержание минимального обратного отслеживания крайне важно для эффективности, и многие из двигателей SAT тщательно отслеживают это число. Хотя детали полностью зависят от решателя (т. Е. Эти два числа, о которых вы спрашиваете), в целом, чем выше эти числа, тем больше конфликтных ситуаций встречается, и, следовательно, может быть принято решение полностью сбросить состояние или предпринять какое-либо другое действие. Часто есть параметры, которые пользователи могут установить, чтобы указать, когда такие действия предпринимаются, и какие именно. Но опять же, это полностью решает и зависит от реализации.

Поиск в Google по псевдобулевой оптимизации приведет к множеству научных статей, которые вы, возможно, захотите просмотреть.

Если вы действительно хотите найти обработку псевдо-логических значений в Z3, тогда вам лучше всего взглянуть на саму реализацию: https://github.com/Z3Prover/z3/blob/master/src/smt/theory_pb.cpp

...