DPLL算法程序

时间:2017-05-06 20:03:57

标签: algorithm login sat satisfiability

我试图在实际编码之前理解DPLL程序。

例如,我有这些条款:

C1 : {c, !d, !b}    
C2 : {d, a}
C3: {b, !d, !a}    
C4: {d, c, b, a}    
C5: {c, !d, !b}    
C6: {d, c, b}    
C7: {c}

现在我将决策变量视为d = 0,b = 0.该子句现在看起来像这样。

C1: {c, 1, 1}
C2: {a}
C3: {1, !a}
C4: {c, a}
C5: {c, 1, 1}
C6: {c}
C7: {c}

单位传播和纯文字规则如何在这里发挥作用?

此外,在C3 : {1, !a}中 - 当我a = 1时,这会变为{1, 0}。这个条款的最终价值应该是多少?它应该是{1}吗?

如果任何子句具有值{!b},那么在应用决策变量之后,这是对文字的否定,那么如何继续?

1 个答案:

答案 0 :(得分:1)

这一步不会发生这种情况,因为输入中有单位条款可以先解决。

{ c }(该子句)是一个单位,其文字c是正数,因此c(变量)被强制为1,那么我们有

C2 : {d, a}
C3: {b, !d, !a}    

作为活动子句,因为忽略了真正的子句。

现在b是一个纯文字(它并不总是,但由于某些子句不再处于活动状态而成为一个),但实际的SAT求解器通常不检查,除非在预处理过程中无法有效检查。

最后你要设置da或两者都没关系。