在冲突驱动子句学习的SAT求解中,每当求解器检测到候选变量赋值集合导致冲突时,它必须查看冲突的原因,从中推导出一个子句(即整个问题的引理),并将其添加到已知子句集合中。这需要选择一个蕴含图中的割,从中推导出引理。
常见的方法是选择第一个唯一蕴含点。
根据https://users.aalto.fi/~tjunttil/2020-DP-AUT/notes-sat/cdcl.html,
一个在蕴含图中的顶点l是唯一蕴含点(UIP),如果从最新的决策文字顶点到冲突顶点的所有路径都经过l。
按照标准术语,第一个UIP是从冲突回溯时遇到的第一个UIP。
用另一种术语来说,UIP是相对于最新的决策点和冲突的蕴含图上的支配者。因此,可以通过构建蕴含图并使用标准算法来查找支配者来找到它。
但是,寻找支配者可能需要大量的CPU时间,我得到的印象是实用的CDCL求解器使用了一种针对此上下文的更快的算法。然而,我没有能够找到比“取第一个UIP”更具体的内容。
什么是发现第一个UIP的最佳已知算法?
常见的方法是选择第一个唯一蕴含点。
根据https://users.aalto.fi/~tjunttil/2020-DP-AUT/notes-sat/cdcl.html,
一个在蕴含图中的顶点l是唯一蕴含点(UIP),如果从最新的决策文字顶点到冲突顶点的所有路径都经过l。
按照标准术语,第一个UIP是从冲突回溯时遇到的第一个UIP。
用另一种术语来说,UIP是相对于最新的决策点和冲突的蕴含图上的支配者。因此,可以通过构建蕴含图并使用标准算法来查找支配者来找到它。
但是,寻找支配者可能需要大量的CPU时间,我得到的印象是实用的CDCL求解器使用了一种针对此上下文的更快的算法。然而,我没有能够找到比“取第一个UIP”更具体的内容。
什么是发现第一个UIP的最佳已知算法?