Z3 によって生成されたモデル値の結果のランダム性に影響を与えようとしています。私が理解している限り、これに対するオプションは非常に限られています。線形演算の場合、シンプレックス ソルバーは、指定された制約を満たすランダムな結果を許可しません。ただし、オプション smt.arith.random_initial_value (「線形演算のシンプレックスベースの手順でランダムな初期値を使用する (デフォルト: false)」) があり、これは機能していないようです:
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] を生成するようです。特定の制約で使用されていない変数のモデル補完でさえ、常に決定論的な結果を生成するようです。
このオプションがどのように機能するかについてのアイデアやヒントはありますか?