我试图在实际编码之前理解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}
,那么在应用决策变量之后,这是对文字的否定,那么如何继续?
答案 0 :(得分:1)
这一步不会发生这种情况,因为输入中有单位条款可以先解决。
{ c }
(该子句)是一个单位,其文字c
是正数,因此c
(变量)被强制为1,那么我们有
C2 : {d, a}
C3: {b, !d, !a}
作为活动子句,因为忽略了真正的子句。
现在b
是一个纯文字(它并不总是,但由于某些子句不再处于活动状态而成为一个),但实际的SAT求解器通常不检查,除非在预处理过程中无法有效检查。
最后你要设置d
或a
或两者都没关系。