2016-02-12 15 views
5

Trong Microsoft Z3, khi chúng tôi cố gắng giải quyết một công thức, Z3 luôn trả về kết quả theo cùng trình tự, khi có hai hoặc nhiều giải pháp thỏa đáng.Cách nhận kết quả ngẫu nhiên từ Microsoft Z3?

Có thể nhận các kết quả ngẫu nhiên từ Z3 sao cho cho cùng một đầu vào, nó sẽ tạo ra chuỗi đầu ra khác nhau trong thực thi khác nhau.

Xin lưu ý rằng, tôi đang sử dụng API C hoặc C#. Tôi không sử dụng Z3 sử dụng smt2lib. Vì vậy, nếu bạn có thể cho tôi một ví dụ hàm C hoặc C# API có thể thêm ngẫu nhiên, nó sẽ hữu ích hơn.

+1

Có vẻ như bạn cần đặt hạt giống. – Carcigenicate

Trả lời

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) 

Lấy từ here.

+0

Ngôn ngữ này là gì? Looks Scheme-y – Carcigenicate

+0

Đó là smt2, đầu vào bình thường của Z3 mà không có bất kỳ API nào. Kiểm tra điều này ra rise4fun.com/Z3. – mmpourhashem

+0

Tôi đã thử các tham số ở trên sử dụng mã 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); ... Rất tiếc, tôi không thể làm cho nó hoạt động. Khi tôi chạy mã, tôi nhận được cảnh báo như thế này ... CẢNH BÁO: thông số không xác định 'smt.arith.random_initial_value' CẢNH BÁO: thông số không xác định 'random_seed' Bất kỳ ý tưởng nào tôi đã làm sai? –

Các vấn đề liên quan