2016-02-12 6 views
5

In Microsoft Z3, wenn wir versuchen, eine Formel zu lösen, gibt Z3 immer die Ergebnisse in der gleichen Reihenfolge zurück, wenn es zwei oder mehr erfüllbare Lösungen gibt.Wie bekomme ich zufällige Ergebnisse von Microsoft Z3?

Ist es möglich, zufällige Ergebnisse von Z3 zu erhalten, so dass es für die gleiche Eingabe unterschiedliche Ausgabesequenzen in unterschiedlicher Ausführung generiert.

Bitte beachten Sie, dass ich C oder C# API verwende. Ich benutze Z3 nicht mit smt2lib. Also, wenn Sie mir ein C oder C# API-Funktionsbeispiel geben können, das Randomisierung hinzufügen kann, wird es nützlicher sein.

+1

Klingt, als müssten Sie den Samen setzen. – Carcigenicate

Antwort

1
(set-option :smt.arith.random_initial_value true) 
(declare-const x Int) 
(declare-const y Int) 
(assert (> (+ x y) 0)) 
(check-sat-using (using-params qflra :random_seed 1)) 
(get-model) 
(check-sat-using (using-params qflra :random_seed 2)) 
(get-model) 
(check-sat-using (using-params qflra :random_seed 3)) 
(get-model) 

Aus here übernommen.

+0

Welche Sprache ist das? Sieht Schema-y – Carcigenicate

+0

Es ist smt2, normale Eingabe von Z3 ohne API. Überprüfen Sie dies auf rise4fun.com/Z3. – mmpourhashem

+0

Ich habe versucht, oben genannten Parameter mit C-API-Code ... cfg = Z3_mk_config(); Z3_set_param_value (cfg, "MODEL", "true"); Z3_set_param_value (cfg, "TIMEOUT", TIME_OUT); Z3_set_param_value (cfg, "SMT.ARITH.RANDOM_INITIAL_VALUE", "true"); Z3_set_param_value (cfg, "RANDOM_SEED", "1"); Solver = Z3_mk_context (cfg); ... Leider konnte ich es nicht funktionieren lassen. Wenn ich den Code ausführe, erhalte ich eine Warnung ... WARNUNG: unbekannter Parameter 'smt.arith.random_initial_value' WARNUNG: unbekannter Parameter 'random_seed' Irgendeine Idee, wo ich falsch gemacht habe? –

Verwandte Themen