Альтернатива z3 для функции Gecode branch()?

В решателе ограничений, таком как Gecode, мы можем контролировать исследование пространства поиска с помощью функции ветвления. например branch(home , x , INT_VAL_MIN ) Это начнет исследование пространства поиска с минимально возможного значения переменной x в его домене и попытается найти решение. (Таких альтернатив много.)

Для z3 у нас есть такая встроенная гибкость?? Возможна любая альтернатива??


person user13387285    schedule 27.05.2020    source источник
comment
Какова ваша цель? Помочь решателю найти удовлетворительное решение или оптимизировать значение x?   -  person Patrick Trentin    schedule 27.05.2020
comment
Несколько ваших последних вопросов (stackoverflow.com/questions/62034323, stackoverflow.com/questions/61968612, этот) также расплывчаты и открыты, а также не показывают усилий по исследованию с вашей стороны. Это не увеличивает ваши шансы на получение ответов на SO.   -  person Malte Schwerhoff    schedule 28.05.2020


Ответы (1)


Решатели SMT обычно не позволяют давать такого рода «подсказки», они действуют скорее как черные ящики.

Сказав это, каждый решатель использует массу внутренних эвристик, а сам z3 имеет ряд настроек, с которыми вы можете играть, чтобы дать ему подсказки. Если вы запустите:

z3 -pd

он отобразит все варианты, которые вы можете предоставить, а их буквально более 600! К сожалению, эти параметры не очень хорошо задокументированы, и то, как они влияют на решатель, довольно загадочно. Единственный надежный способ выяснить это — изучить исходный код и посмотреть, что они делают, что не для слабонервных. Но в любом случае это будет не так очевидно, как приводимая вами фича ветки для gecode.

Однако есть и другие приемы, которые можно использовать для ускорения решения SMT-решателей, к сожалению, эти вещи обычно очень специфичны для конкретной задачи. Если вы опубликуете конкретные экземпляры, вы можете получить лучшие предложения.

person alias    schedule 27.05.2020