Максимальное усилие (максимум | минимум) в оптимизации Z3

Я заинтересован в том, чтобы Z3 предоставил мне модель, и в то же время я был бы счастлив, если бы он попытался принять во внимание целевую функцию как эвристику, но я не хочу платить штраф за производительность за нахождение фактического (max | мин) имум.

Возможно ли это в Z3?


person buggymcbugfix    schedule 02.03.2018    source источник


Ответы (1)


Это уже возможно в Z3 с мягким тайм-аутом, см. этот ответ: Z3 Time Restricted Optimization

Способ добиться того, чего вы хотите, - использовать пошаговое решение:

  • Утвердите все свои жесткие ограничения. (то есть те, которые должны быть удовлетворены)
  • Сделайте check-sat и получите модель
  • Утвердите все свои ограничения «оптимизации».
  • Используйте мягкое время ожидания, как описано здесь: Z3 Time Restricted Optimization

На последнем шаге вы можете настроить, сколько вы хотите ждать, то есть штраф, который вы готовы заплатить.

Примечание по теме: вы также можете поиграть с мягкими ограничениями, которые решатель может «удовлетворить» по желанию, а в противном случае понести штрафные санкции. Возможно, это больше подходит для вашего варианта использования. Узнайте здесь, как это сделать: https://rise4fun.com/Z3/tutorialcontent/optimization#h23

person alias    schedule 02.03.2018
comment
Угу, я исправляюсь! Я тоже попробую эту функцию, спасибо. Как установить мягкие тайм-ауты с синтаксисом smtlib? Я не понимаю, почему вы упоминаете только о программном обеспечении, оно не работает со стандартными задачами? - person Patrick Trentin; 02.03.2018
comment
@PatrickTrentin Совершенно верно; Я думаю, что это должно работать и с обычными ограничениями. Смотрите мой отредактированный ответ. - person alias; 02.03.2018