使用Z3进行MAX-SAT的问题

时间:2012-05-21 23:48:41

标签: z3

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

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

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

1 个答案:

答案 0 :(得分:2)

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 ++)。