Мы используем Microsoft Z3 C и C# API (у меня есть 2 программы).Получите случайные результаты от Microsoft Z3 C или C# API
В Microsoft Z3, когда мы пытаемся решить формулу, Z3 всегда возвращает результаты в той же последовательности, когда есть два или более выполнимых решения.
Можно ли получить случайные результаты из Z3, чтобы при одном и том же вводе он генерировал бы различную последовательность вывода в разных исполнениях.
Обратите внимание, что я не могу напрямую использовать smt2-код. Я этот issue, люди предложили использовать параметры «random_seed» и «smt.arith.random_initial_value».
(вариант установленный: smt.arith.random_initial_value истина)
(объявлять-Const х Int)
(объявлять-Const у Int)
(утверждать (> (+ ху) 0))
(чек-сБ-используя (с помощью-PARAMS qflra: RANDOM_SEED 1))
(получить-модель)
(чек-сБ-используя (с помощью-PARAMS qflra: RANDOM_SEED 2))
(получить-модель)
(check-sat-using (using-params qflra: random_seed 3))
(get-model)
Это решение smt2 работает, и я смог проверить его с помощью boost4fun. Но эти параметры недоступны в Z3 C или C# API.
В коде C мы пытаемся установить эти параметры с помощью функции «Z3_set_param_value», я получаю предупреждение, как это.
ВНИМАНИЕ: неизвестный параметр «smt.arith.random_initial_value»
ВНИМАНИЕ: неизвестный параметр «RANDOM_SEED»
Может кто-нибудь наставит меня, как использовать эти параметры? Кроме того, есть ли другой способ получить случайные результаты при выполнении кода Z3 c-api или C# api?
Большое спасибо. Я попробовал глобальные параметры. Работает. Действительно ценю это. –
Не могли бы вы рассказать мне, как это сделать, используя C# api? –
Точно так же создайте объект Params (через MkParams) и назначьте его solver.Parameters. Альтернативно установите глобальные параметры через Global.SetParameter. –