首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell:与快速简单的SAT求解器绑定

Haskell:与快速简单的SAT求解器绑定
EN

Stack Overflow用户
提问于 2014-01-04 21:24:31
回答 2查看 2.4K关注 0票数 5

今天,我也想研究haskell的SAT解决方案。首先,我想要为picosat解决程序编写我自己的接口。

然后我发现那里有SBV库。它是Z3、Yices、CVC4和Boolector的接口。

另外,我在github上做了谷歌搜索,它甚至可以使用Picosat装订

考虑到快速/高性能的限制,是否还有其他的haskell绑定到SAT求解器上值得考虑。认证:适用于高性能SAT解决方案(例如,持续数天的问题,以及我检查2^20或更多SAT问题时需要尽可能快完成的问题)。例如,我在hackage中特别缺少的是绑定到像平岭这样的快速并行SAT解算器。(此外,我还意外地发现了github上当前更新的picosat绑定,我很可能错过了其他选项)

SBV库的默认选项是Z3 SMT解决程序。我的猜测是正确的吗,皮科卫星对于普通SAT的解决比Z3快吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-04 23:48:21

坦白说,我是你提到的Haskell picosat绑定的作者。

SBV是一个非常健壮的库,它已经存在了一段时间了,如果您想要一个外部SMT或SAT解算器的接口,比如Yice或Z3,那是很好的。Picosat是我编写的一个简单得多的库,因为我想要一个可以简单安装而不需要外部依赖的库。

我的猜测是正确的吗,皮科卫星对于普通SAT的解决比Z3快吗?

我不知道您的性能限制是什么,但就底层解决程序库而言,您不会注意到Z3或Picosat之间的显著差异,直到遇到真正的巨大问题(数十亿变量)。这两个库都是经过高度优化的库,瓶颈(至少是Haskell方面的瓶颈)可能会在库和Haskell运行时之间编组数据。

票数 6
EN

Stack Overflow用户

发布于 2014-01-05 03:44:02

SBV是线程安全的。

比较Z3和玲玲的SAT成绩不是一件容易的事。我敢说,除非你花时间找出精确的参数来微调它们的内部启发,否则它们可能或多或少是一样的。

好的是SBV提供了一个公共接口,因此您只需导入一个不同的桥接器就可以更改求解器:

import Data.SBV.Bridge.Z3

vs

import Data.SBV.Bridge.Boolector

如果您编译boolector来使用line,那么只需更改Haskell一行就可以很容易地测试性能。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20926938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档