Encoding 哪些统计数据表明Z3的有效运行?

Encoding 哪些统计数据表明Z3的有效运行?,encoding,statistics,solver,smt,z3,Encoding,Statistics,Solver,Smt,Z3,SMTLib2指令(获取所有统计信息)显示多个数字,例如: num. conflicts: 4 num. propagations: 0 (binary: 0) num. qa. inst: 23 为了测试不同的公理化和编码,我想知道这些数字中的哪一个适合声明一个Z3运行比另一个更好/更有效 从名字上猜,我会说num.qa。inst-量词实例化的数量-是一个很好的指标(越低=越好),但是其他的呢?量词实例化的数量是检查公理化是否产生过多实例的一个很好的度量。您也可以使用QI

SMTLib2指令
(获取所有统计信息)
显示多个数字,例如:

num. conflicts:     4
num. propagations:  0 (binary: 0)
num. qa. inst:      23
为了测试不同的公理化和编码,我想知道这些数字中的哪一个适合声明一个Z3运行比另一个更好/更有效


从名字上猜,我会说
num.qa。inst
-量词实例化的数量-是一个很好的指标(越低=越好),但是其他的呢?

量词实例化的数量是检查公理化是否产生过多实例的一个很好的度量。您也可以使用QI_PROFILE=true。它将为每个量词生成统计数据。可以使用属性:qid为量词命名。您还可以使用默认的_QID=true,Z3将根据行号生成一个名称。QI_PROFILE_FREQ=将在生成每个实例后显示统计信息。这些选项对于检测实例化循环非常有用

“num.conflicts”用于估计Z3所遍历的搜索空间的大小。如果搜索空间较小,我们可以说公理化“更好”

干杯,
狮子座

感谢您指出附加选项!但是其他数字呢,例如“num.decisions”?在对Z3编码进行基准测试时,应该考虑其中哪一个?“数量冲突”比“数量决策”更相关。顺便说一句,Z3使用非时间回溯。因此,n个决策并不意味着Z3探索了2^n个分支。“num.conflicts”大致等于Z3探索的分支数。在理论推理中,还有其他一些数字可用于检测瓶颈。例如,“pivots”-->Z3在线性运算方面有问题,“gomory cuts”-->整数运算,“接口EQ”-->理论组合,等等。