z3 - Z3是否支持优化问题

标签 z3

我在去年 8 月的一篇文章中看到 Z3 不支持优化。
然而,它也表示开发人员正计划添加此类支持。

我在源代码中找不到任何东西表明这已经发生了。

谁能告诉我我关于没有支持的假设是正确的还是添加了但我不知何故错过了它?

谢谢,
奥马尔

最佳答案

如果您的优化具有整数值目标函数,则一种效果相当好的方法是运行二进制搜索以获得最佳值。假设您正在求解一组约束 C(x,y,z) ,最大化目标函数f(x,y,z) .

  • 求任意解(x0, y0, z0)C(x,y,z) .
  • 计算 f0 = f(x0, y0, z0) .这将是您的第一个下限。
  • 只要您不知道目标值的任何上限,请尝试解决约束 C(x,y,z) ∧ f(x,y,z) > 2 * L , 其中 L是您最好的下限(最初是 f0 ,然后是您发现更好的下限)。
  • 一旦你有了上限和下限,应用二分搜索:求解 C(x,y,z) ∧ 2 * f(x,y,z) > (U - L) .如果公式可以满足,您可以使用模型计算新的下限。如果不满意,(U - L) / 2是一个新的上限。

  • 如果您的问题不接受最大值,则第 3 步将不会终止,因此如果您不确定它是否存在,您可能需要绑定(bind)它。

    你当然应该使用 pushpop逐步解决一系列问题。您还需要能够为中间步骤提取模型并评估 f在他们。

    我们在 Kaplan 上的工作中使用了这种方法。以合理的成功。

    关于z3 - Z3是否支持优化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17211490/

    相关文章:

    z3 - UFBV 类别的基准

    python - Z3Py 中的替换

    z3 - 如何确定给定实例拥有的解决方案数量 : Applications in Algebraic Biology

    z3 - 是否可以选择将位向量漂亮地打印为带符号的小数?

    racket - 在某些 Z3 绑定(bind)中是否有不支持声明排序的解决方法?

    z3 - Dafny 证明中的非鲁棒性来源是什么?

    Z3 无法证明群论中的右取消性质?

    python - z3python : using math library

    java - 如何在 Z3 (Java) 中以小数( double )形式从模型中获取实数值?

    Z3:提取存在模型值