SAT çözücüler için 1-out-of-kısıtlama kodlaması


25

Bir sorunu kodlamak için çözücü bir SAT kullanıyorum ve SAT örneğinin bir parçası olarak, ben boolean değişkenler var bu tam olarak bir gerçek olması gerektiğini amaçlanan ve nerede dinlenme gerektiği yanlış ol. (Bunu bazen "sıcak" bir kodlama olarak tanımlandığını gördüm.)x1,x2,,xn

SAT'da "tam olarak doğru olması gerekir " kısıtlamasını kodlamak istiyorum . SAT çözücüsünü olabildiğince verimli bir şekilde çalıştırmak için bu kısıtlamayı kodlamanın en iyi yolu nedir?x1,,xn

Bu kısıtlamayı kodlamanın birçok yolunu görebiliyorum:

  • İkili kısıtlamalar. Ben İkili kısıtlamaları ekleyebilirsiniz herkes için i , j en çok bir sağlamak için x i doğrudur ve ardından eklemek x 1x 2x n en az biri doğru olduğundan emin olmak için.¬xi¬xji,jxix1x2xn

    Bu, cümlecikleri ekler ve fazladan boole değişkeni içermez.Θ(n2)

  • İkili kodlama. Ben tanıtmak olabilir yeni boole değişkenler i 1 , i 2 , ... , i lg n (ikilik sistemde) bir tamsayı temsil etmek i öyle ki 1 i n (emin olmak için bir kaç boolean sınırlamalar ekleyerek i istenilen aralığındadır ). Sonra, x i'nin ağaç ve tüm diğer x j'lerin yanlış olduğunu zorlayan kısıtlamalar ekleyebilirim . Başka bir deyişle, her biri için j , biz hükümler olduğunu zorlama eklemek i = jlgni1,i2,,ilgni1inixixjj .i=jxj

    Bu, cümleleri ekler ve kaç tane ekstra boole değişkeni bilmiyorum.Θ(nlgn)

  • Gerçek değerlerin sayısını sayın. Boole toplayıcı devreler bir ağaç uygulanması ve gerektirir ki , her bir tedavi x i , 0 ya da bunun yerine sahte ya da gerçek bir 1 ve Tseitin SAT devre dönüşümünü kullanımı maddeleri. Bir yarı toplayıcılar ağacı yeterlidir: her yarı toplayıcının taşıma çıktısını 0 olacak şekilde sınırlandırın ve ağaçtaki son yarı toplayıcının son çıktısını 1 olacak şekilde sınırlandırın. Ağaç herhangi bir şekilde seçilebilir ( dengeli ikili ağaç veya dengesiz veya her neyse).x1+x2++xn=1xi

    Bu, kapılarında yapılabilir ve böylece Θ ( n ) cümleleri ve Θ ( n ) yeni boolean değişkenleri ekler .Θ(n)Θ(n)Θ(n)

    Bu yaklaşımın özel bir örneği, boole değişkenlerini , y i'nin x 1x 2x i değerini içermesi gerektiği düşüncesiyle ortaya koymaktır . Bu hedef maddeleri ekleyerek zorunlu olabilir y i¬ x i , y i¬ y i - 1 ve ¬ y ix iy ı -y1,,ynyix1x2xiyi¬xiyi¬yi1 (biz tedavi y 0 için yanlış ile eşanlamlı olarak)i=1,...,n. Daha sonra,i=1,2,,n-1için¬ y i¬ x i + 1 kısıtlamalarını ekleyebiliriz. Bu, temel olarak, ağacın maksimum dengesiz bir şekle sahip olduğu, yarım katlı bir ağacın Tseitin dönüşümüne eşittir.¬yixiyi1y0i=1,,n¬yi¬xi+1i=1,2,,n1

  • Kelebek ağı N bitler üzerinde bir kelebek ağı kurabilir , n- bit girişini 000 01 olacak şekilde sınırlayabilir, n- bit çıkışını x 1 x 2x n olacak şekilde sınırlayabilir ve her 2-bit kelebek geçidini bağımsız bir kapı olarak ele alabilirim bu, sınırsız bırakılan yeni ve yeni bir boolean değişkeni temel alan kararını vererek ya takas eder ya da girişini değiştirmez. Daha sonra, devreyi SAT yan tümcelerine dönüştürmek için Tseitin dönüşümünü uygulayabilirim.nn00001nx1x2xn

    Bu, kapıları gerektirir ve böylece Θ ( n lg n ) cümleleri ve Θ ( n lg n ) yeni boolean değişkenleri ekler .Θ(nlgn)Θ(nlgn)Θ(nlgn)

Gözden kaçtığım başka yöntemler var mı? Hangisini kullanmalıyım? Bunu test eden ya da deneysel olarak deneyen biri var mı ya da bunlardan herhangi biriyle deneyimi olan var mı? Cümlelerin sayısı ve / veya yeni boole değişkenlerinin sayısı, bunun SAT çözücü performansı üzerindeki etkisini tahmin etmek için iyi bir stand-in ölçütü mü, yoksa değilse, hangi metriği kullanırsınız?


Sadece fark bu yanıt , yani SAT için önem düzeyi kısıtlamaları uygulayan tam olarak bu kısıtlamayı zorunlu kılma ile ilgili bazı referanslar vardır dışına n değişkenleri doğrudur. Bu yüzden benim sorum k = 1 olan özel bir durumdan kaynaklanıyor . Belki de kardinalite kısıtlamaları hakkındaki literatür sorumu aydınlatmaya yardımcı olacaktır.knk=1


Modern SAT çözümleyicilerinin çoğu kardinalite hükümlerini ve kutudan çıkan diğer özel (CNF dışı) kısıtlamaları desteklemektedir.
Dávid Horváth

Yanıtlar:


12

N'den k değişkenindeki özel durum için k = 1 olduğunda, Klieber ve Kwon tarafından 1 ila N Nesnesi Seçmek için Etkin CNF Kodlaması bölümünde açıklandığı gibi kumandan değişkeni kodlaması vardır . Basitleştirilmiş: Değişkenleri küçük gruplara ayırın ve bir komutan değişkenin durumunun, bir değişken grubunun ya tamamen ya da hepsi-bir ya da yanlış olduğunu ima etmesine neden olan maddeler ekleyin. Ardından, aynı algoritmayı tekrar tekrar komutan değişkenlerine uygulayın. Sürecin sonunda, nihai komutan değişkenlerinin avuçlarından birinin gerçek olmasını talep eder. Sonuç, O (n) yeni cümle ve O (n) yeni değişkenlerdir.

DPLL tabanlı çözücülerdeki iki izlemeli değişmezlerin yaygınlığı göz önüne alındığında, O (n) yan tümcesinin büyümesinin, daha fazla yan tümce ekleyen kodlama şemalarına göre belirleyici bir avantaj olduğunu düşünüyorum.


2
Eğer "küçük grup" iki boyuta sahipse, bu sadece ikili komuttur, burada "komutan" sonucu sonuç bitidir ve taramanın yanlış olduğu iddia edilir. Özyinelemeyle yapıldığında, bu yöntem tamamen geneldir (N'nin 1'inde çalışır) ve gerçekten pratik olarak uygulanabilir.
d8d0d65b3f7cf42

3

Magnus Björk'ün bir makalesinde denenmeye değer olabilecek iki teknik anlatılmaktadır.

nx1,,xny1,,ybb=lgn(x1xn)2lgncümleleri: biz sadece eklerizxi¬yjxiyjji

knx1,,xny1,,ynykyk+1O(nlg2n)O(nlg2n)

Kağıt

Magnus Björk. Başarılı SAT Kodlama Teknikleri . 25 Temmuz 2009

nkn

Alan M. Frisch, Paul A. Giannaros. En Sıkı Kısıtlamanın SAT Kodlamaları: Bazıları Eski, Bazıları Yeni, Bazıları Hızlı, Bazıları Yavaş . ModRef 2010.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.