我想要做的是将我遇到的一个数学问题转换为布尔可满足性问题(SAT),然后使用SAT解算器进行求解。我想知道是否有人知道手册,指南或任何可以帮助我将问题转换为SAT实例的内容。
另外,我想在比指数时间内更好的解决这个问题。我希望SAT解算器能对我有所帮助。
我想要做的是将我遇到的一个数学问题转换为布尔可满足性问题(SAT),然后使用SAT解算器进行求解。我想知道是否有人知道手册,指南或任何可以帮助我将问题转换为SAT实例的内容。
另外,我想在比指数时间内更好的解决这个问题。我希望SAT解算器能对我有所帮助。
Answers:
SAT手册(Steven Prestwich撰写)的第二章深入探讨了如何将离散决策问题转化为CNF。(不幸的是,我认为没有在线的草稿版本-最好去当地的图书馆查阅。)MagnusBjörk古怪的概述中成功引用的其他一些参考文献也很有用。
如果您的问题是连续的,或者您对不等式系统特别感兴趣,那么其他类型的求解器很有可能会有用。正如Kyle指出的那样,SMT求解器(例如Z3,Yices或OpenSMT)可能是有用的,尽管传统上SMT理论倾向于将重点放在计算机软件的验证上,所以SMT求解器通常对诸如涉及整数间隔的表达式之类的东西有很大的支持。 ,但在插入性约束上的效果可能不佳。对于自然表达为不平等系统的问题,CPLEX是一个值得克服的问题(它过去可免费用于学术领域,现在可能仍然可用)。对于一些组合决策问题(例如查找矩形填充成正方形),约束求解器(如Minion)优于SAT求解器,并且通常更易于使用。
除非您将数学问题转换为SAT实例作为学习练习,否则您的时间将更多地花在学习可满足性模理论上。与布尔SAT实例相比,SMT使您更自然地表达方程式和其他约束。一些SMT求解器支持现有量词和通用量词,使您可以超越NP并表达PSPACE问题。
除了更具表现力,SMT求解器更快。并非P = NP更快,而是效率更高,因为好的SMT求解器不会丢弃特定于理论的结构信息,这些信息有助于指导求解器通过搜索空间。直接对SAT实例执行Karp约简运算会迫使SAT求解器重新学习所有结构,通常要花费成倍的成本。例如,在基于DPLL的和基于本地搜索的SAT求解器上,加法都是可交换的;求解器根本不知道它正在处理数字!为了避免尝试所有x + y + z = 10的排列,SAT求解器需要使用对称破译代码,该代码需要图形自同构检测。最好的当前图自同构识别算法在最坏的情况下需要的时间与顶点数量成指数关系,