z3 - SAT 求解器和相位节省
问题描述
DPLL SAT 求解器通常应用Phase Saving启发式算法。这个想法是记住每个变量的最后一次赋值并在分支中 首先使用它。
为了试验分支极性和相位节省的效果,我尝试了几个 SAT 求解器并修改了相位设置。都是Windows 64 位端口,以单线程模式运行。我总是使用中等复杂度的相同示例输入(5619 个变量,11261 个子句,在解决方案中,所有变量的 4% 为真,96% 为假)。
下面列出了生成的运行时间:
这可能只是(坏)运气,但差异非常大。在我的例子中, MiniSat的表现优于所有现代求解器,这让我感到特别惊讶。
我的问题:
对这些差异有任何解释吗?
极性和相位节省的最佳实践?
解决方案
从您的测试中无法得出任何结论。众所周知,DPLL 和基于它的求解器会根据初始搜索条件表现出重尾行为。这意味着同一个求解器可以在同一个实例上同时具有短运行时和长运行时间,具体取决于随机重启发生的时间等因素。不同求解器的搜索时间可能会有很大差异,这取决于(例如)他们如何选择决策变量,即使没有增加相位保存和随机重启的复杂性。
推荐阅读
- python - 充满 NaN 的单元格,在 python 中使用 stack() 将标题转换为行
- javascript - 使用 Vue 事件或 Vuex 在组件之间传递数据(性能)?
- javascript - 格式错误的 Html,onclick 中的功能
- reactjs - 如何为 react-player 提供的控件添加自定义样式?
- r - 在 R 中创建对称频率表
- x86 - 是否需要始终在商店中设置(TLB 的)脏位?
- spring-boot - SpringBoot 2.x @Inject DTO 在控制器内
- c# - datagridview 检索用户输入 C#
- javascript - 如何暂停动态附加的视频?
- r - 我可以使用 geom_text_repel 控制相同值的多个标签的顺序吗?