由于使用Z3的实数编码的问题,统计的是Z3 /smt2 /st
产生可能是有益的,以判断是否雷亚尔引擎“有问题/做大量的工作”?
就我而言,我有一个问题的两个主要相当于编码,无论是使用实数。 在编码“小”的差别,然而,这使得在运行时间有很大的区别,即,该编码的需要2:30分钟和编码乙13分钟。 Z3的统计数据显示, conflicts
和quant-instantiations
大多是等价的,但有些则没有,例如grobner
, pivots
和nonlinear-horner
。
这两种不同的统计资料作为依据 。
编辑 (解决狮子座的评论):
所述SMT2编码由两个版本生成是〜30K线和其中使用实数的断言洒遍布代码。 的主要区别在于编码乙使用大量尚未得以实时类型的常量从范围0.0
到1.0
由不等式限定,例如0.0 < r1 < 1.0
或0.0 < r3 < 0.75 - r1 - r2
,而在编码大量的这些尚未得以常数已被替换为固定的实数值从相同的范围内,例如, 0.1
或0.75 - 0.01
。 两个编码使用非线性真实算术,例如r1 * (1.0 - r2)
从两种编码一些随机的例子可以作为一个依据 。 所有存在的变量如上描述尚未得以实数。
PS:是否引入别名为真正的固定值,例如,
(define-sort $Perms () Real)
(declare-const $Perms.$Full $Perms)
(declare-const $Perms.$None $Perms)
(assert (= $Perms.Zero 0.0))
(assert (= $Perms.Write 1.0))
造成显著的性能损失?