我正在使用Z3和Yices解決一些研究問題的時間不到一年。使用這些求解器,我總是需要評估性能,特別是兩件事:建模/檢查(可滿足性)所需的時間和空間(內存)。在Z3的情況下,我發現沒有線索直接找到它們。我嘗試了「統計」(使用Z3 NET API提供的「DisplayStatistics」功能),並找到如下所示的輸出(例如):如何查找建模/檢查Z3中可滿足性所需的內存和時間(NET API)
num。衝突:122
num。決定:2245
num。傳播:27884(二進制:21129)
num。重新啓動:1
num。最終檢查:1
num。分鐘。 lits:52
num。添加等式:3766
num。 mk bool var:2782
num。 del bool var:658
num。 mk enode:1723
num。 del enode:78
num。 mk從句:3622
num。 del子句:1517
num。 mk bin子句:3067
num。 mk lits:18935
num。 ta衝突:28
num。添加行:5091
num。樞軸:328
num。 assert lower:2597
num。 assert upper:3416
num。 assert diseq:1353
num。 bound prop:787
num。固定等式:697
num。偏移等式:866
num。 pseudo nl .: 34
num。 EQ。適配器:820
我不知道如何解釋這些值以瞭解使用的內存/時間。有一些方法可以找到運行時間(使用計時器類,如秒錶)。但是,在空間需求的情況下,我沒有找到任何方法。如果我可以得到建模所需的布爾變量(低級別,SAT解算器)的數量對我來說可以很好地工作。
這將是偉大的,如果任何人都可以告訴我的解決方案。
謝謝。我有一個不同的問題。我很想知道Z3中的MAXSAT功能(特別是在Z3 NET API中)。我發現我需要實現這樣的功能(如C API示例中所示)。在Yices的情況下,有內置函數(例如,yices_max_sat),它根據加權斷言(使用yices_assert_weighted)工作。 Z3能否提供如此簡單的方法來使用NET API使用MAXSAT? – Ashiq 2012-01-03 20:03:12
我使用'assumptions'實現了'yices_max_sat'命令。命令'yices_assert_weighted'只是創建一個'hidden'布爾變量(即一個假設變量)並將權重與它相關聯。所以,這兩個命令可以在Z3 API的頂部使用'assumptions'來模擬。有許多方法可以在Z3 API之上實現MAXSAT。 'maxsat.c'示例描述了其中兩個。我們沒有計劃在官方API中支持MAXSAT。這就是說,在未來的版本中,我們可能會包含.NET版本的'maxsat.c'。 – 2012-01-03 20:21:41
謝謝。 .NET版本的maxsat.c對我非常有幫助。我希望我們能很快得到它。但是,從maxsat.c示例來看,如何設置權重並不清楚。 – Ashiq 2012-01-03 23:02:47