Я пытаюсь повлиять на случайность результатов для значений модели, сгенерированных 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]. Даже завершение модели для переменных, не используемых в данных ограничениях, кажется, все время дает детерминированные результаты.
Любые идеи или подсказки о том, как работает этот вариант?
x >= rand()
, пока вы не потеряете контроль. - person usr   schedule 20.06.2014