我正在研究使用Z3的两个基于QF_LIA可满足性的任务调度问题。
Z3报告的统计数据中的算术冲突和冲突有什么区别?
这些指标之一是量化Z3解决问题的难易程度的好方法吗?我发现第一种情况的解决时间低于第二种情况,我试图用Z3测量的一些求解器统计数据来支持这个/解释。
问题1比问题2有更多的条款(61k vs 10k)。但我看到arith-add-rows(1M vs 7M)存在巨大差异。这个字段是什么意思?
解决时间:5s
Z3统计数据:
(:arith-add-rows 1274977 :arith-assert-lower 631097 :arith-assert-upper 1736529 :arith-bound-prop 84528 :arith-conflicts 938 :arith-pivots 11305 :二进制传播2934957 :冲突10288 :决定30244 :del-clause 14335 :被淘汰的54岁 :最终检查1 :max-memory 26.31 :记忆11.47 :最小化 - 失败52633 :mk-bool-var 9577 :mk-clause 61136 :num-allocs 62610792 :传播5336053 :重启9 :rlimit-count 60060905)
解决时间:12秒
Z3统计数据:
(:arith-add-rows 7360423 :arith-assert-lower 98284 :arith-assert-upper 106749 :arith-bound-prop 7940 :arith-conflicts 3859 :arith-pivots 24323 :二进制传播77194 :冲突4190 :决定13619 :del-clause 1012 :淘汰 - 变种64 :max-memory 21.89 :记忆4.69 :最小化 - 失败14385 :mk-bool-var 3329 :mk-clause 10681 :num-allocs 33767877 :传播236651 :重启7 :rlimit-count 608859507)
答案 0 :(得分:1)
我的理解是冲突计算Z3尝试的文字作业的数量,但后来结果却产生了冲突。我的猜测是 arith-conflicts 计算算术子解析器引起的冲突次数。
大量冲突可能表明Z3没有进行非常目标导向,即它在没有实际找到解决方案的情况下探索了部分解决方案候选空间。这是我对冲突的解释;不确定Z3团队会同意。
不知道 arith-add-rows 是什么意思。您可以查看Z3的来源以查看它的增量位置。