MAX-SAT使用Z3的问题

MAX-SAT使用Z3的问题,z3,Z3,我对MAX-SAT感兴趣,并希望Z3能将其作为一个内置功能。在不久的将来有没有这样的计划 在没有上述内容的情况下,我尝试从命令行使用示例maxsat应用程序。不幸的是,每当我执行exec.sh“filename.z3”时,总会得到以下响应:“检查硬约束是否可满足……结果:0”。我做错了什么?我向您保证,此响应似乎与文件的实际内容完全无关 最后,maxsat示例中的注释没有明确指定如何将约束标记为硬约束或软约束。硬约束应该是前面有:公式的公式,软约束应该是前面有:假设的公式。那么,为了将“(ass

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

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


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

Z3发行版中的MaxSAT示例演示了如何使用Z3 API实现两个MaxSAT算法。该示例仍然使用旧的(不推荐使用的)API来断言约束,但可以轻松修改以使用新的解算器API。示例应用程序读取SMT1.0文件。但是,MaxSAT函数可用于使用C API创建的公式。脚本假定
:假设
字段是软约束,而
:公式
是硬约束。这里有一个小例子,其中
(>x0)
(>y0)
(>x(-y1))
是软约束,
(>(+xy)0)
是硬约束。示例应用程序返回
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)
))
(基准测试)
:extrafuns((x Int))
:extrafuns((y Int))
软约束
:假设(>x0)
:假设(>y 0)
:假设(x(-y 1))
:公式
(及
硬约束
(>(+xy)0)
(<(-x y)100)
))
也就是说,我们没有计划在Z3API中直接支持MaxSAT。在未来的版本中,我们可能会将MaxSAT示例移植到其他API(.NET、Python和C++)