Z3'ü kullanarak 12000'den fazla boole değişkeni ile SAT sorununu çözmeye çalışıyorum. Değişkenlerin çoğunun çözümde yanlış olarak değerlendirmesini bekliyorum. İlk önce "polarite yanlış" ı denemek için Z3'ü SAT çözücü olarak yönlendirmek veya ipucu vermek için bir yol var mı? Bunu cryptominisat 2 ile denedim ve iyi sonuçlar aldım.Z3 Z3'ü SAT Çözücü olarak kullanma polaritesi
cevap
Z3, çözücü ve ön işlemciler topluluğudur. Bazı çözücüler için ipuçları sağlayabiliriz. (check-sat)
komutu kullanıldığında, Z3 çözücüyü bizim için otomatik olarak seçecektir. Çözücüyü kendimiz seçmek istiyorsak, (check-sat-using <strategy>)
'u seçmeliyiz. Örneğin, aşağıdaki komut Z3'e bir Boole SAT çözücü kullanması talimatını verecektir.
(check-sat-using sat)
Biz her zaman kullanarak ilk "yanlış kutuplarını" denemek için zorlayabilirsiniz:
(check-sat-using (with sat :phase always-false))
Ayrıca ön işlemler kontrol edebilirsiniz. Biz sat
çağırmadan önce CNF formülü koymak istiyorsak kullanmalıdır:
(check-sat-using (then tseitin-cnf (with sat :phase always-false)))
EDIT: Eğer DIMACS giriş biçimini ve Z3 v4.3.1 kullanıyorsanız, o zaman için parametreleri ayarlamak olamaz tüm kullanılabilir çözücüler komut satırını kullanarak. Bir sonraki sürüm bu sınırlamayı ele alacak.
git clone https://git01.codeplex.com/z3 -b unstable
ve Z3 derlemek: Bu arada, kullanmakta iş-içinde-ilerleme şube indirebilirsiniz. Ardından, kutup false zorlamak için, bu modül için mevcut tüm seçenekleri gösterecektir komut satırı seçeneği
sat.phase=always_false
komut z3 -pm:sat
kullanın. Yığın taşması için
(declare-const p Bool)
(declare-const q Bool)
(declare-const r Bool)
(declare-const s Bool)
(assert (or (not p) (not q) (not r)))
(assert (or r s))
(assert (or r (not s)))
(assert (or r (and p q)))
(echo "With always false")
(check-sat-using (then tseitin-cnf (with sat :phase always-false)))
(get-model)
(echo "With always true")
(check-sat-using (then tseitin-cnf (with sat :phase always-true)))
(get-model)
Anlık cevap için teşekkürler! –
Şu anda, Z3 için giriş biçimi olarak DIMACS kullanıyorum. İpucu kullanmak için DIMACS/CNF cümleleri SMT formatına çevirmeli miyim? Z3'ün SMT kümesi boolean ifadesi olarak formüle edilen orijinal problemimi çözmesine izin vermeye çalıştım. Ama ben SAT çözücünün benim durumumda çok daha hızlı olduğunu buldum. –
Yanıtı, DIMACS giriş formatı ile ilgili bilgilerle güncelledim. –
- 1. z3 :: tactic ve z3 :: 'in amacı
- 2. Z3
- 3. z3 Real Exponentiation
- 4. Z3 niceleyici desteği
- 5. z3 modelinden bir z3 dizisinin func ifadesini okuyun
- 6. z3: iddialardaki değişken bildirimleri ekleme
- 7. Choco Çözücü
- 8. Harici SAT çözücüsünden çıktı alma
- 9. Z3'te özyinelemeyle nasıl baş edilir?
- 10. Sudoku Çözücü Kod açıklaması
- 11. Z3 Güç Modulo İfadeleri
- 12. Doğrulama algoritmalarını SAT sorunlarına çeviren derleyiciler
- 13. Sudoku metodu ve çözücü
- 14. JavaScript denklemi çözücü kitaplığı
- 15. Yakut anagram çözücü
- 16. Git lang x: = [...] string {"Sat", "Sun"} vs x: = [] string {"Sat", "Sun"}
- 17. Z3'te toUpperCase işlevi nasıl eklenir?
- 18. Python sözdizimi hatası denklemi çözücü
- 19. SMT Z3 usecases (DbC gibi) ve Z3'e açık kaynak alternatifi için pratik örnekler mi arıyorsunuz?
- 20. Z3'te artan çözüm nasıl çalışır?
- 21. Örneklenmiş kod çözücü çıkışları ile seq2seq uygulanması
- 22. GHC'yi kitaplık olarak kullanma
- 23. Z3/Python Python değerlerini modelden alma
- 24. Caffe ile pycaffe arasındaki çözücü parametrelerini değiştirme
- 25. WebP kodlayıcı/kod çözücü şu anda
- 26. Excel 2010 Çözücü kullanarak Makro kaydedilemiyor
- 27. Swift 4 özel kodlayıcı ve kod çözücü
- 28. Z3'teki uyarı iletisinin arkasındaki sebep nedir: "niceleyici için bir desen bulamadı (niceleme kimliği: k! 18)"
- 29. Üretim olarak Kentor.AuthServices.StubIdp'yi kullanma IDP
- 30. Plotmath içinde altdizini% olarak kullanma
Hoşgeldin:
İşte SON DÜZENLEME
SMT 2.0 tam bir örnek (da mevcuttur online) 'dir! Ne denedin? – IronMan84
Büyüyen karmaşıklığı olan birkaç CNF/DIMACS dosyası oluşturdum. Bazıları hemen Z3/DIMACS tarafından çözülebilir. Diğerleri saatler alır ya da hiç bitmez. Dosyalar için Cryptominisat 2'yi kullandım ve "--polarity-mode = false" ekledikten sonra çözdüm. Z3'ün INI parametrelerinde polarite ile ilgili bir parametre bulamadım. Bu nedenle, yığın akışında akıllıca bir ipucu bulmayı umuyorum. –