Max-SMT求解器如何工作?

时间:2012-05-15 13:55:34

标签: formal-verification satisfiability

SMT求解器是在处理类似SAT的可满足性时开发的。正如我们所知,SAT也是为了满足而提出了SAT的变体。其中一个是max-SAT。所以我想问一下是否存在max-SMT求解器,如果它存在,它是如何工作的?

3 个答案:

答案 0 :(得分:1)

用于制作max-SMT的技术之一如下:

  • 增加/制定输入以允许计算模型(赋值)中评估为True的子句数。将此新公式称为 F ,并让变量 K 保持计数。

  • F 上执行二进制搜索,以获得 K 的最佳(最大)可能值,方法是重复调用 K <的不同固定值的求解器/强>

例如,在 F 上运行解算器以及 (K = 20) 子句。

  • 如果是SAT,则将 K 的值加倍,并使用 (K = 40) 运行求解器。

  • 如果是UNSAT,将 K 的值减半,并使用 (K = 10) 运行求解器。

逐步迭代接近 K 的最大可能值。

我知道Yices使用类似的东西(至少它曾经使用过),但是可能会添加其他一些优化/启发式算法。

其他解算器可能会使用不同的技术。

答案 1 :(得分:0)

据我所知,Yices确实支持max-SMT。他们的paper描述了它的工作原理。

答案 2 :(得分:0)

我知道 3 个重要策略。所有这些都归结为解决一系列 SAT 问题。我根据必须满足的硬约束和加权软约束来制定我的答案,总结起来就是 MAX-SAT 的目标。

线性搜索

对于一组给定的(正加权)子句,您有一个最低目标。最小目标为 0 意味着硬约束部分是可满足的,这是 MAX-SAT 解决方案甚至存在的先决条件。

在一个步骤中,您尝试证明严格大于上一步目标的最小目标。假设我们有 3 个软约束,其权重为 2、3、7。您将首先尝试证明(硬约束 + 权重为 2 的约束),如果您成功了,您就会知道 MAX-SAT 目标的下限为 2。严格优于 2 的最小下限将是 3。因此,您将尝试证明(硬约束 + 权重为 2 的约束)如果这也是 SAT 那么 (hc + 2 + 3) then (hc + 7) then ( hc + 7 + 2) 然后 (hc + 7 + 3) 然后 (hc + 7 + 3 + 2)。

如果您在任何时候遇到 UNSAT,则意味着前一步是最大的。

二分搜索

如果您考虑与权重相关的 SAT 问题,您可能会认为按顺序解决这些问题是一种浪费,因为在许多情况下,以前的分配没有用。所以你可以尝试一种叫做二分搜索的方法。这个想法是你在体重秤的中间选择一个问题,如果是SAT,你可以丢弃所有权重比它弱的问题,如果它是UNSAT,你可以丢弃所有权重比它高的问题。使用它,您可以在 O(log(n)) 中找到最佳值,而不是预期的 O(n/2),其中 n 是不同权重组合的数量。

然而,这种方法与线性搜索相比并不像您最初想象的那样有利。事实证明,UNSAT 实例往往比 SAT 实例更耗时。基于二分搜索的 MAX-SAT 求解器在任何时候都有更糟糕的行为,即您不知道求解器何时会停止,并且它必须返回在此之前找到的最佳实例。任何时间行为对于许多实际应用都很重要。

核心驱动搜索

核心驱动搜索基本上是一种反向线性搜索,它会遇到很多 UNSAT 实例,但是为了弥补这一点,它可以访问来自求解器的附加信息,这可能有助于它跳过许多中间问题。

核心驱动搜索可以访问冲突的核心。因此,如果求解器命中 UNSAT,它会得到一个表达存在什么矛盾的子句。现在它可以采用这个子句并用它来排除一些加权的软约束。通过检查给定此子句中哪些不可满足,它可以降低目标的上限,然后在该范围内再次尝试,直到达到 SAT。如果这样做了,它就知道(因为它采用了最大的可行目标)当前的上限就是目标。

总结

对于 MAX-SAT,通常将您的问题作为一系列 SAT 问题来解决。您可能还可以想到一些涉及这些的混合策略。然而,这个问题有一些不同的角度,未来可能会很有趣。

使用权重来指导对所有目标值进行一次搜索的方法(如在混合整数线性规划中所做的那样)并不常见。这主要是因为 Braniac MILP 方法不会在 SAT 中经常发现的大小的工业实例上运行,分配将如何影响软约束并不总是很明显,并且由宽松解决方案通知的分支启发式是在两个值之间进行选择时不太有用(MAX-SAT 可以表示为 0-1 整数线性程序)。

目前 Jakob Nordström 围绕求解器 RoundingSAT 做了一些有趣的工作,它使用称为伪布尔编程的形式主义,可以编码与 0-1 ILP 和 MAX-SAT 相同的问题。 PB 优化具有比 SAT 求解器使用的 CNF 更强的输入格式,是否可以用两项而不是指数项来编码鸽洞约束。然而,如果一个 PBO 求解器被给予一个 CNF 作为输入,它就不能做任何更复杂的推理,最终成为一个 SAT 求解器,每个冲突传播的思考时间更长。 SAT 被速度恶魔主宰。

涉及更多技术细节的较长形式的演示文稿是SAT for Optimization by Fahiem Bacchus (University of Toronto)