z3 - 将 Z3 用于 MAX-SAT 的问题

标签 z3

我对 MAX-SAT 很感兴趣,并希望 Z3 将其作为内置功能。有没有计划在不久的将来这样做?

在没有上述情况的情况下,我尝试从命令行使用示例 maxsat 应用程序。不幸的是,每当我执行 exec.sh“filename.z3”时,我总是得到以下响应:“正在检查硬约束是否可满足...结果:0”。我究竟做错了什么?我向您保证,此响应似乎完全独立于文件的实际内容。

最后,maxsat示例中的注释没有明确说明如何将约束标记为硬或软。硬约束应该是公式前面有 :formula,软约束应该是公式前面有 :assumption。那么,要将“(assert (> x 0))”标记为软的,我们究竟要把“:assumption”放在哪里呢? (我已经阅读了关于硬约束和软约束的查询,但问题/响应似乎更多是在寻找不可满足的核心的背景下,而不是不可满足公式的“最大可满足核心”。)

最佳答案

Z3 发行版中的 MaxSAT 示例演示了如何使用 Z3 API 实现两种 MaxSAT 算法。该示例仍然使用旧的(已弃用的)API 来断言约束,但可以轻松修改它以使用新的求解器 API。示例应用程序读取 SMT 1.0 文件。但是,MaxSAT 函数可用于使用 C API 创建的公式。该脚本假定 :assumption字段是软约束并且:formula很难。这是一个小例子,其中 (> x 0) , (> y 0) , (< x y)(> x (- y 1))是软约束,(> (+ x y) 0)(< (- x y) 100)是很难的。示例应用程序返回 3 .也就是说,最多可以满足三个软约束。

(benchmark ex
  :extrafuns ((x Int))
  :extrafuns ((y Int))
  ;; Soft Constraints
  :assumption (> x 0)
  :assumption (> y 0)
  :assumption (< x y)
  :assumption (> x (- y 1))
  :formula 
  (and 
  ;; Hard Constraints
  (> (+ x y) 0)
  (< (- x y) 100)
))

也就是说,我们没有计划在 Z3 API 中直接支持 MaxSAT。在未来的版本中,我们可能会将 MaxSAT 示例移植到其他 API(.NET、Python 和 C++)。

关于z3 - 将 Z3 用于 MAX-SAT 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10694072/

相关文章:

java - Z3 for Java 的性能问题

z3 - Z3 按位计算?

smtp - SMT : to add multiple assertions or single and? 中哪种做法更好

z3 - 有没有办法在SMTLIB中表达 "if and only if"?

z3 - 为 Z3 开发新理论求解器的指南和/或最小工作示例

c++ - 如何获得所有模型或所有凸评估?

z3 - 在 z3 中列出 concat

z3 - Z3_ast 是否引用计数 Z3 之外的引用?

c++ - 在 C++ API 中支持 Z3 的浮点理论

z3 - 定义 SMT2 中位向量的规则