старая vs новая версия Z3

У меня есть экземпляр, который может быть очень эффективно решен старой версией Z3 (версия 2.18). Он возвращает SAT через несколько секунд. Однако когда я пробую его на текущей версии Z3 (версия 4.3.1). По прошествии 10 минут не возвращает никакого результата.

Вот некоторые подробности эксперимента. Может ли кто-нибудь дать совет?

  • есть 4000 переменных типа Bool и 200 переменных типа Int.

  • все ограничения находятся в логике высказываний со сравнением между целыми числами, такими как a ‹b

  • платформа: open suse linux 12.3@thinkpad T400s

  • Z3 v2.18 был загружен как двоичный файл linux в прошлом году (сейчас я не могу найти ссылку)

  • Z3 v4.3.1 был загружен как исходный код, и я компилирую его на своем ноутбуке, используя настройки по умолчанию

В smt файле около 50 000 строк, поэтому я не могу его сюда выложить. Если кому-то интересно, я с удовольствием отправлю файл по электронной почте. Спасибо.


person user2807266    schedule 26.09.2013    source источник
comment
вы пробовали использовать тактику?   -  person Raj    schedule 08.10.2013


Ответы (1)


Z3 - это набор решателей. Конфигурация по умолчанию меняется от версии к версии. Прогресс никогда не бывает монотонным. То есть новая версия может решить больше проблем, но может работать медленнее и не справиться с некоторыми проблемами.

Примечание: автор отправил результаты теста авторам Z3 по электронной почте.

В ветке «незавершенная работа» мне удалось воспроизвести производительность Z3 2.19 с помощью

            (set-option :smt.auto-config false)

Здесь приведены инструкции по загрузке «work-in- прогресс ».

Чтобы получить такое же поведение, мы также должны заменить (check-sat) на (check-sat-using smt)

Кстати, в официальном выпуске мы должны использовать

            (set-option :auto-config false)

вместо

            (set-option :smt.auto-config false)
person Leonardo de Moura    schedule 13.10.2013