考慮到使用Z3的實數編碼的問題,Z3 /smt2 /st
產生的統計數據可能有助於判斷實數引擎是否「有問題/有很多工作」?Z3實數算術和統計
在我的情況下,我有兩個主要等效的問題編碼,都使用實數。然而,編碼中的「小」差異在運行時造成很大的差異,即編碼A需要2:30min並且編碼B 13min。 Z3統計顯示conflicts
和quant-instantiations
大部分是等效的,但其他的不是,例如grobner
,pivots
和nonlinear-horner
。
這兩種不同的統計信息可用作gist。
EDIT(解決Leo的評論):
SMT2編碼由兩個版本生成的是〜30K線和其中使用實數的斷言灑遍佈代碼。主要區別在於,編碼B使用大量由不等式界定的範圍從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)
。
這兩個編碼中的一些隨機例子可以作爲gist獲得。如上所述,所有發生的變量都是未指定的實數。
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))
造成顯著的性能損失?
是否可以發佈編碼A和B? –
@Leo:看編輯的問題 –