我試圖影響由Z3生成的模型值的結果隨機性。據我瞭解,這個選項是非常有限的:在線性算術的情況下,單純形求解器不允許仍然滿足給定約束的隨機結果。然而,有一個選項smt.arith.random_initial_value(「使用線性運算(默認情況下,基於單面程序隨機初始值:FALSE)」),我似乎這並沒有得到工作:Z3生成模型值的隨機性
from z3 import *
set_option('smt.arith.random_initial_value',True)
x = Int('x')
y = Int('y')
s = Solver()
s.add(x+y > 0)
s.check()
s.model()
這似乎總是產生[y = 0,x = 1]。即使在給定約束條件下未使用的變量的模型完成似乎始終會產生確定性結果。
有關這個選項如何工作的任何想法或提示?
您是否有興趣獲得一種隨機模型的迭代方法?您可以通過添加隨機約束(例如'x> = rand()')來細化給定的模型,直到您不滿爲止。 – usr