Z3 минимизация и время ожидания

Я пытаюсь использовать решатель z3 для минимизации проблемы. Я пытался получить тайм-аут и вернуть лучшее решение до сих пор. Я использую Python API, и параметр времени ожидания "smt.timeout" с

set_option("smt.timeout", 1000) # 1s timeout

Это фактически истекает примерно через 1 секунду. Однако большее время ожидания не обеспечивает меньшую цель. Я закончил тем, что включил многословие с

set_option("verbose", 2)

И я думаю, что z3 последовательно оценивает большие значения моей цели, пока проблема не будет решена:

(opt.maxres [0:6117664])
(opt.maxres [175560:6117664])
(opt.maxres [236460:6117664])
(opt.maxres [297360:6117664])
...
(opt.maxres [940415:6117664])
(opt.maxres [945805:6117664])
...

Таким образом, у меня есть два вопроса:

Могу ли я, наоборот, сказать z3 начинать с верхней границы и последовательно возвращать модели с меньшим значением для моей целевой функции (как, например, аннотации Minizinc)indomain_max http://www.minizinc.org/2.0/doc-lib/doc-annotations-search.html)Похоже, что решатель возвращает удовлетворительный экземпляр моей проблемы. Как это найти? Если он пытается последовательно оценить большие значения моей цели, он не должен был найти удовлетворительного экземпляра, когда истекает время ожидания ...

редактировать: В журнале opt.maxres верхняя граница никогда не сжимается.

Для записи я нашел более подробное описание опций в источнике здесьopt_params.pyg

редактировать Извините, что беспокою, я недавно окунулся в это. Во всяком случае, я думаю, что это может быть полезно для других. Я обнаружил, что на самом деле я должен позвонитьOptimize.upper метод, чтобы получить верхнюю границу, и модель все еще не та, которая соответствует этой верхней границе. Я смог добавить его в качестве нового ограничения и вызвать решатель (без оптимизации, просто SAT), но это, вероятно, не лучшая идея. Чтениемэтот Я чувствую, что должен позвонитьOptimize.update_upper после истечения времени ожидания решателя, но у интерфейса python такого метода нет (?). По крайней мере, теперь я могу получить верхнюю границу и соответствующую модель (ценой ненужных вычислений, я думаю).

Ответы на вопрос(1)

Ваш ответ на вопрос