Z3是否支持优化问题

时间:2013-06-20 10:38:04

标签: z3

我在去年8月的一篇帖子中看到,Z3不支持优化。 但是它也表示开发人员正计划增加这样的支持。

我在源代码中找不到任何暗示已经发生的事情。

任何人都可以告诉我,如果我认为没有支持是正确的,或者是否已添加,但我不知道错过了它?

谢谢, 奥马尔

2 个答案:

答案 0 :(得分:3)

如果您的优化具有整数值目标函数,那么一种合理运行的方法是运行二进制搜索以获得最佳值。假设您正在解决约束C(x,y,z),最大化目标函数f(x,y,z)

  1. (x0, y0, z0)找到任意解决方案C(x,y,z)
  2. 计算f0 = f(x0, y0, z0)。这将是你的第一个下限。
  3. 只要您不知道目标值的任何上限,请尝试解决约束C(x,y,z) ∧ f(x,y,z) > 2 * L,其中L是您的最佳下限(最初,f0 ,无论你发现什么都更好。)
  4. 一旦同时具有上限和下限,请应用二进制搜索:求解C(x,y,z) ∧ 2 * f(x,y,z) > (U - L)。如果公式可满足,则可以使用模型计算新的下限。如果它不可满足,(U - L) / 2是一个新的上限。
  5. 步骤3.如果您的问题不允许最大值,则不会终止,因此如果您不确定,可能需要绑定它。

    您当然应该使用pushpop来逐步解决问题的连续性。您还需要能够为中间步骤提取模型并评估它们的f

    我们在Kaplan的工作中使用了这种方法并取得了相当的成功。

答案 1 :(得分:1)

Z3目前不支持优化。这是在TODO列表中,但尚未实现。以下幻灯片描述了将在Z3中使用的方法:

用无穷小计算的库已经实现,可在unstable(正在进行中)分支中使用,也可在rise4fun在线使用。