SAT求解器如何产生模型(赋值[s])?

时间:2015-04-14 07:00:55

标签: solver sat

这是一个非常简单的cnf实例,如(x1或x2或x3)&(x1或x2)&(x2或x3),公式绝对可以满足,解是x1 = x2 = x3 = 1,足够了。那么,我的问题是求解器如何使用DPLL或其他程序产生赋值?感谢。

1 个答案:

答案 0 :(得分:1)

嗯,基本上,对于CDCL的情况

CDCL SAT求解器实现DPLL ,但可以学习新的子句并按时间顺序回溯。使用冲突分析的子句学习不会影响健全性或完整性。冲突分析使用解析操作识别新的子句。因此,每个学习的条款可以通过一系列解决步骤从原始条款和其他学习条款中推断出来。如果cN是新的学习条款,那么当且仅当φ∪{cN}也是可满足时,φ是可满足的。修改后的回溯步骤也不会影响健全性或完整性,因为从每个新学习的条款中获取回溯信息。)。(来源:Wikipedia

它的工作原理如下:

首先选择一个分支变量x1。黄色圆圈意味着任意决定。

enter image description here

现在应用单位传播,产生x4必须为1(即True)。灰色圆圈表示单位传播期间的强制变量分配。生成的图形称为蕴涵图。

enter image description here

随意选择另一个分支变量x3。

enter image description here

应用单位传播并找到新的蕴涵图。

enter image description here

这里变量x8和x12分别被强制为0和1。

enter image description here

选择另一个分支变量x2。

enter image description here

查找蕴涵图。

enter image description here

选择另一个分支变量x7。

enter image description here

查找蕴涵图。

enter image description here

发现冲突!

enter image description here

找出导致此冲突的切口。从削减开始,找到一个相互矛盾的条件。

enter image description here

取消这种情况并将其作为一个条款。

enter image description here

将冲突条款添加到问题中。

enter image description here

非按时间顺序跳回到适当的决策级别。

enter image description here

后跳并相应地设置变量值。

enter image description here

(完全来自Wikipedia: Conflict-Driven_Clause_Learning#Example

以下是使用CDCL算法的求解程序列表(不完整),您应该查看它们: