将(数学)问题转换为SAT实例


22

我想要做的是将我遇到的一个数学问题转换为布尔可满足性问题(SAT),然后使用SAT解算器进行求解。我想知道是否有人知道手册,指南或任何可以帮助我将问题转换为SAT实例的内容。

另外,我想在比指数时间内更好的解决这个问题。我希望SAT解算器能对我有所帮助。


1
SAT没有有效的方法...但是请看这些幻灯片
Fayez Abdlrazaq Deab 2013年


在尝试其他任何事情之前,请提供一个快速而又肮脏的解决方案,以防万一您只想测试某些东西:cryptlogver。该工具说它专注于加密,但是可以解决问题。此外,您将使用的语言语法非常像c,因此不会有很多问题。安装并不困难,但quartus很大,因此可以喝杯咖啡。
absinthe_minded 2013年

Answers:


20

SAT手册(Steven Prestwich撰写)的第二章深入探讨了如何将离散决策问题转化为CNF。(不幸的是,我认为没有在线的草稿版本-最好去当地的图书馆查阅。)MagnusBjörk古怪的概述中成功引用的其他一些参考文献也很有用。

如果您的问题是连续的,或者您对不等式系统特别感兴趣,那么其他类型的求解器很有可能会有用。正如Kyle指出的那样,SMT求解器(例如Z3YicesOpenSMT)可能是有用的,尽管传统上SMT理论倾向于将重点放在计算机软件的验证上,所以SMT求解器通常对诸如涉及整数间隔的表达式之类的东西有很大的支持。 ,但在插入性约束上的效果可能不佳。对于自然表达为不平等系统的问题,CPLEX是一个值得克服的问题(它过去可免费用于学术领域,现在可能仍然可用)。对于一些组合决策问题(例如查找矩形填充成正方形),约束求解器(如Minion)优于SAT求解器,并且通常更易于使用。


13

除非您将数学问题转换为SAT实例作为学习练习,否则您的时间将更多地花在学习可满足性模理论上。与布尔SAT实例相比,SMT使您更自然地表达方程式和其他约束。一些SMT求解器支持现有量词和通用量词,使您可以超越NP并表达PSPACE问题。

除了更具表现力,SMT求解器更快。并非P = NP更快,而是效率更高,因为好的SMT求解器不会丢弃特定于理论的结构信息,这些信息有助于指导求解器通过搜索空间。直接对SAT实例执行Karp约简运算会迫使SAT求解器重新学习所有结构,通常要花费成倍的成本。例如,在基于DPLL的和基于本地搜索的SAT求解器上,加法都是可交换的;求解器根本不知道它正在处理数字!为了避免尝试所有x + y + z = 10的排列,SAT求解器需要使用对称破译代码,该代码需要图形自同构检测。最好的当前图自同构识别算法在最坏的情况下需要的时间与顶点数量成指数关系,


2
您是否建议任何特定的smt求解器?
Dchris

5

两种将高级语言转换为SMT或CNF的工具。

CVC语法接近CAS。

CBMC它将C程序转换为CNF,从而允许声明。这些断言要么始终为true,要么为false,则找到反例输入。CBMC展开循环,因此某些C程序具有指数级的CNF / SMT。


看来CBMC不会将任意C程序转换为CNF。它基于C程序创建一个CNF,对整数溢出,缓冲区溢出等执行静态分析。
vy32
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.