Использование Z3 для выборки из ограниченного пространства

У меня есть куча ограничений на переменные, и я ищу способ эффективной выборки в этом ограниченном пространстве. Я попробовал Z3, и, похоже, он может сказать мне, является ли пространство нетривиальным (т. Е. Выполнимы ли ограничения), но я не вижу способа получить примеры из пространства, если только я не минимизирую или максимизирую что-то .

Я что-то упустил или Z3 просто не для этого?


person syzygy    schedule 30.08.2016    source источник


Ответы (2)


Z3 может предоставить вам модель, т. е. один пример назначения переменных, удовлетворяющих ограничениям (попробуйте команду (get-model) в SMT2 или Solver.Model в .NET API (и команды с аналогичными именами в других API)). Затем вы можете подтвердить отрицание модели, чтобы заставить решатель произвести другое назначение для следующего запроса. Такая схема используется многими приложениями, но она не обязательно «эффективна», но это действительно зависит от того, какую выборку вы пытаетесь достичь (например, модели Z3 не будут случайным образом распределяться по пространству поиска).

person Christoph Wintersteiger    schedule 30.08.2016
comment
Да, я искал случайную выборку. Мне придется использовать что-то еще. Какие-либо предложения? - person syzygy; 30.08.2016
comment
Я думал об использовании стратегии вокруг евклидова расстояния: после создания первой точки запустите оптимизацию, чтобы максимизировать расстояние от ваших констант и существующих решений. Я надеюсь сделать это на github.com/groostav/sojourn-cvg, в стеке Java. Проблема заключается в многословии: похожее на SMT2 lisp намного лучше, чем java API, у меня возникают проблемы с навигацией по нему. Результат может быть медленным, но я надеюсь, что он создаст своего рода ограничивающую рамку с полным фактором вокруг допустимой области - неравномерное распределение, но достаточно хорошее для меня. - person Groostav; 18.10.2017

Существуют методы, которые вы можете использовать для выборки из пространства решений SAT. См. https://simons.berkeley.edu/sites/default/files/docs/4393/moshevardi.pdf

Возможно, некоторые из этих методов можно реализовать поверх Z3.

Существует также существующая реализация алгоритма UniGen для почти равномерной выборки пространства решений SAT на github, но он основан на другом решателе SAT, и не уверен, что он поддерживает решение SMT.

РЕДАКТИРОВАТЬ: кажется, что здесь есть сэмплер SMT на основе Z3: https://github.com/RafaelTupynamba/SMTSampler

person Jeremy Salwen    schedule 29.06.2020