对于我开始的项目,我需要使用 SAT 求解器。我以前使用过其中一些,但主要用于实验,而这里项目的主要限制是良好的性能。我正在尝试寻找替代方案,并尝试了解每种替代方案如何针对我的特定要求进行定位。尤其是:
我需要提取令人满意的分配,不仅检查可满足性,而且求解器应该允许我重复求解相同的公式,寻找不同的可能令人满意的分配,最终以有效的方式迭代所有这些(例如,没有我必须添加一个子句并重新开始)。
该项目应该仍然得到积极维护和相当的生产质量,而不是自出版以来放弃的一些赢得竞争的研究项目(见
picosat
)。此外,由于我使用的是 C++,所以求解器应该提供一个高效且(可能)良好的书面 C++ 接口。
我考虑的第一个候选人是 Z3,但我对文档感到困惑,无法理解是否支持上面的第 1 点,并且考虑到我只需要 SAT 而不是 SMT,这是否可能是矫枉过正。C++ 接口似乎也很容易使用,但我无法忍受我必须用纯字符串命名变量的事实(这与我周围的算法非常糟糕。这不是可以避免的吗?)。
那么你能给我一些关于使用哪个 SAT 求解器的建议,或者通过对 Z3 的疑问来阐明一些观点吗?