2016-02-12 13 views
5

In Microsoft Z3, quando proviamo a risolvere una formula, Z3 restituisce sempre i risultati nella stessa sequenza, quando ci sono due o più soluzioni soddisfacenti.Come ottenere risultati casuali da Microsoft Z3?

È possibile ottenere risultati casuali da Z3 in modo che per lo stesso input generi una sequenza di output diversa in un'esecuzione diversa.

Si noti che, sto usando API C o C#. Non sto usando Z3 usando smt2lib. Quindi, se puoi darmi un esempio di funzione API C o C# che può aggiungere randomizzazione, sarà più utile.

+1

Sembra che sia necessario impostare il seme. – Carcigenicate

risposta

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) 

Tratto da here.

+0

Che lingua è questa? Sembra Schema-y – Carcigenicate

+0

È smt2, normale input di Z3 senza alcuna API. Controlla questo rise4fun.com/Z3. – mmpourhashem

+0

Ho provato i parametri sopra usando il codice API C ... 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); ... Purtroppo non sono riuscito a farlo funzionare. Quando eseguo il codice, ricevo un avviso come questo ... ATTENZIONE: parametro sconosciuto 'smt.arith.random_initial_value' ATTENZIONE: parametro sconosciuto 'random_seed' Qualche idea di dove ho sbagliato? –