使用Optimize.minimize()时可以使用“超时”获得解决方案吗?

时间:2019-03-26 18:23:33

标签: z3 z3py

我正在尝试最小化一个变量,但是z3需要很长时间才能为我提供解决方案。

我想知道是否可以在触发超时时获得解决方案。

如果可以,我该怎么做?

提前谢谢!

1 个答案:

答案 0 :(得分:2)

如果通过“解决方案” 表示最优值的最新近似值,则也许可以检索到它,只要所使用的优化算法找到了中间解决方案。 (某些优化算法-例如maxres-找不到任何中间解决方案)。

示例:

import z3

o = z3.Optimize()
o.add(...very hard problem...)
cf = z3.Int('cf')
o.add(cf = ...)
obj = o.minimize(cf)
o.set(timeout=...)
res = o.check()
print(res)
print(obj.upper())

即使res = unknown由于超时,objective实例也包含z3在超时之前找到的最优值的最新近似值。

不幸的是,我不确定是否也可以使用o.model()(或任何其他方法)来检索相应的次优模型。


对于OptiMathSAT,我将说明如何在单元测试timeout.py中检索最佳值的最新近似值和相应的模型。

相关问题