关于SAT问题的讨论

已知的NP-complete问题多达几百个,但作为这些问题的“祖先”,历史上第一个被证明的NP-complete问题是来自于布尔逻辑的可满足性问题(SATISFIABLITY problem),简称为SAT。我们知道,布尔表达式是由布尔变量和运算符(NOT , AND , OR)所构成的表达式。如果对于变量的某个true,false赋值,使得一个布尔表达式的值为true,则该布尔表达式是可满足的。例如布尔公式 A = ((NOT x) AND y) OR ( x AND (NOT z)),当 x = false ,y = true z = false时,该布尔表达式值为true,则表达式A就是可满足的。可满足性问题就是判定一个给定合式的布尔公式是否是可满足的。
SAT问题是逻辑学的一个基本问题,也是当今计算机科学和人工智能研究的核心问题之一。自然科学和软件工程研究中的许多重要问题,如程控电话的自动交换、大型数据库的维护、大规模集成电路的自动布线、软件自动开发、机器人动作规划等,都可转化成SAT问题。因此致力于寻找求解SAT问题的快速而有效的算法,不仅在理论研究上而且在许多应用领域都具有极其重要的意义。
SAT的问题被证明是NP-hard的问题。目前解决该问题的方法主要有完备的方法和不完备的方法两大类。完备的方法优点是保证能正确地判断SAT问题的可满足性,但其计算效率很低,平均的计算时间为多项式阶,最差的情况计算时间为指数阶,不适用于求解大规模的SAT问题。不完备的方法的优点是求解的时间比完备的方法快得多,但在很少数的情况下不能正确地判断SAT问题的可满足性。 传统的方法有:枚举法、局部搜索法和贪婪算法等,但由于搜索空间大,问题一般难以求解。对于像SAT一类的NP-hard问题,采用一些现代启发式方法如演化算法往往较为有效。

SAT问题是目前形式验证的核心,尤其是在集成电路EDA 验证中,SAT问题已被广泛应用于模型检验、等价性检验、设计错误诊断 、ATPG检验等,并且已经取得了很大进展。而在SAT问题求解中,局部搜索方法在求解SAT问题的高效率使其一度成为研究热点。基于深度优先搜索的完全算法DPLL受到更为广泛的关注,成为目前SAT解决器的主流算法。具体来说,DPLL算法尽管可以给出无解的证明,但对于较大规模的实例却很耗时。而局部搜索算法可以快速给出最优解或者近似解,但不能证明无解。一些人结合DPLL算法和局部搜索算法的优点,提出了利用近似解加速求解SAT问题的启发式完全算法。该决策策略与布尔约束推理(Boolean constraintpropagation , BCP) 过程相结合,确保在整个搜索过程中尽可能地使大多数子句满足,即子句的布尔值为真,加速解决器找到解的速度。

在一些新的研究领域里,有很多理论问题有待深入研究和探讨,包括有效的布尔可满足性求解方法、更加有效的形式化验证方法,以及非子句形式的SAT问题到CNF SAT的转换方法。基于CNF SAT的等价性验证方法是十分有效的,但其性能极大地受制于后端SAT搜索引擎实际效率的影响。而在VLSI CAD 领域中的绝大多数问题是NP-complete问题或hard问题,它们要求我们不断探索新的启发式算法,从而更好地限制和修剪非解子空间。

猜你喜欢

转载自blog.csdn.net/FYZDMMCpp/article/details/51178686