冲突驱动子句学习回溯澄清


9

这里的Wikipedia页面上它很好地描述了CDCL算法(似乎图片是由普林斯顿的Sharad Malik创建的幻灯片拍摄的)。但是,当描述如何回溯时,它只是说“到适当的位置”。MiniSAT还使用了CDCL算法的变体,因此我阅读了本文。他们似乎在说,您应该回溯到Learned子句是unit子句之前。那当然是澄清,但对我来说没有意义。据我所知,最后一个赋值肯定会成为学习到的冲突子句的一部分(也许我在这里错了?),所以当您回溯一步时,您将立即使学习到的子句成为单位,最后分配的值将翻转,并且该算法将完全按照DPLL进行,而不会回溯足够远。另外,维基百科页面不遵循此规则,它似乎可以回溯得多。

应该回溯多远?

Answers:


7

这是MiniSAT论文中的相关段落:

False

您似乎遗漏的一点是,一旦由于未完成的分配(回溯)使Learned子句变为单位时,求解器不会在那里停止。在此之前,可能还有其他与当前冲突无关的任务,并且实验表明,最好也撤销这些无关的任务。因此,求解器将继续撤消分配,直到下一次撤消使学习的子句变为非单位,即它将包含多个未分配的变量。求解器在此处停止,运行单元传播以满足unit子句,然后继续搜索,并正常分配变量。

还要注意,当前的决策变量可能不会出现在Learned子句中。CDCL求解器的常见策略是找到第一个唯一的蕴含点,并在Learned子句中使用该变量。在某些情况下,第一个UIP是决策变量,但通常不是。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.