Kodowanie ograniczenia 1 na n dla solverów SAT


25

Używam solwera SAT do zakodowania problemu, a jako część instancji SAT mam zmienne logiczne gdzie jest zamierzone, że dokładnie jedna z nich powinna być prawdziwa, a reszta powinna być fałszywa . (Czasami widziałem to opisywane jako kodowanie „na gorąco”).x1,x2,,xn

Chcę zakodować ograniczenie „dokładnie jeden z musi być prawdziwe” w SAT. Jaki jest najlepszy sposób na zakodowanie tego ograniczenia, aby solver SAT działał tak skutecznie, jak to możliwe?x1,,xn

Widzę wiele sposobów kodowania tego ograniczenia:

  • Wiązania parami. Mógłbym dodać ograniczenia parowe dla wszystkich aby upewnić się, że co najmniej jeden x_i jest prawdziwy, a następnie dodać x_1 \ lor x_2 \ lor \ cdots \ lor x_n, aby upewnić się, że co najmniej jeden jest prawdziwy . i , j x i x 1x 2x n¬xi¬xji,jxix1x2xn

    Dodaje to klauzule Θ(n2) i żadnych dodatkowych zmiennych boolowskich.

  • Kodowanie binarne. Mógłbym wprowadzić lgn nowych zmiennych boolowskich i1,i2,,ilgn aby reprezentować (binarnie) liczbę całkowitą i taką, że 1in (dodając kilka ograniczeń boolowskich, aby zapewnić, że i jest w żądanym zakresie). Następnie mogę dodać ograniczenia wymuszające, że xi jest drzewem i że wszystkie inne xj są fałszywe. Innymi słowy, do każdego j dodajemy klauzule wymuszające, że i=jxj .

    Dodaje to klauzule Θ(nlgn) i nie wiem, ile dodatkowych zmiennych boolowskich.

  • Policz liczbę prawdziwych wartości. Mógłbym zaimplementować drzewo boolowskich obwodów sumujących i wymagać, aby x1+x2++xn=1 , traktując każdy xi jako 0 lub 1 zamiast fałszu lub prawdy, i użyj transformacji Tseitin do przekształcenia obwodu w klauzule SAT. Wystarczy drzewo pół-sumatorów: ogranicz wyjściową wartość przenoszenia każdego pół-sumatora do 0, a końcową moc wyjściową końcowego pół-sumatora w drzewie należy wynosić 1. Drzewo można wybrać tak, aby miało dowolny kształt ( zrównoważone drzewo binarne, niezrównoważone lub cokolwiek innego).

    Można to zrobić w Θ(n) bramy i w ten sposób zwiększa Θ(n) rozdziałów i Θ(n) nowych zmiennych logicznych.

    Szczególnym przykładem tego podejścia jest wprowadzenie zmiennych boolowskich y1,,yn , przy założeniu, że yi powinien zawierać wartość x1x2xi . Tę intencję można egzekwować, dodając klauzule yi¬xi , yi¬yi1 i ¬yixiyi1 (gdzie traktujemy y0 jako synonimem false) dla i=1,,n . Następnie możemy dodać ograniczenia ¬yi¬xi+1 dla i=1,2,,n1 . Zasadniczo jest to równoważne transformacji Tseitin drzewa pół-sumatora, w którym drzewo ma maksymalnie niezrównoważony kształt.

  • Sieć motyli. Mógłbym zbudować sieć motylkową na bitach, ograniczyć wejście bitowe do , ograniczyć wyjście bitowe do i traktować każdą 2-bitową bramę motylkową jako niezależną bramę, która albo zamienia, albo nie zamienia danych wejściowych przy podejmowaniu decyzji na podstawie nowej zmiennej boolowskiej, która nie jest ograniczona. Następnie mogę zastosować transformację Tseitin, aby przekształcić obwód w klauzule SAT.n 000 01 n x 1 x 2x nnn00001nx1x2xn

    Wymaga bramy i w ten sposób zwiększa i zawartych nowe zmienne logiczne.Θ ( n lg n ) Θ ( n lg n )Θ(nlgn)Θ(nlgn)Θ(nlgn)

Czy są jakieś inne metody, które przeoczyłem? Którego powinienem użyć? Czy ktoś to przetestował lub wypróbował eksperymentalnie, czy też ktoś ma z tym jakieś doświadczenie? Czy liczba klauzul i / lub liczba nowych zmiennych boolowskich jest dobrą miarą zastępczą do oszacowania wpływu tego na wydajność solvera SAT, a jeśli nie, jakiej metryki byś użył?


Właśnie zauważyłem, że w tej odpowiedzi znajdują się odniesienia do egzekwowania ograniczeń liczności dla SAT, tj. Wymuszania ograniczenia, że ​​dokładnie spośród zmiennych jest prawdziwe. Moje pytanie sprowadza się więc do szczególnego przypadku, w którym . Może literatura na temat ograniczeń liczności pomoże rzucić światło na moje pytanie.n k = 1knk=1


Większość nowoczesnych solverów SAT obsługuje klauzule liczności i inne specjalne ograniczenia (inne niż CNF) po wyjęciu z pudełka.
Dávid Horváth

Odpowiedzi:


12

Dla specjalnego przypadku k spośród n zmiennych true, gdzie k = 1, istnieje kodowanie zmiennych dowódcy, jak opisano w Efektywnym kodowaniu CNF do wybierania obiektów 1 na N przez Kliebera i Kwon. Uproszczone: Podziel zmienne na małe grupy i dodaj klauzule, które powodują, że stan zmiennej dowódcy sugeruje, że grupa zmiennych jest fałszywa lub fałszywa „wszystko oprócz jednego”. Następnie rekurencyjnie zastosuj ten sam algorytm do zmiennych dowódcy. Pod koniec procesu żądaj, aby dokładnie jedna z niewielu ostatnich zmiennych dowódcy była prawdziwa. Wynikiem jest O (n) nowe klauzule i O (n) nowe zmienne.

Biorąc pod uwagę wszechobecność literałów o dwóch obserwacjach w rozwiązaniach opartych na DPLL, myślę, że wzrost klauzuli O (n) jest decydującą przewagą nad schematami kodowania, które dodałyby więcej klauzul.


2
Jeśli „mała grupa” ma rozmiar drugi, to jest to po prostu dodatek binarny, gdzie „dowódca” jest bitem wyniku, a przeniesienie jest uważane za fałszywe. Sporządzono rekurencyjnie, ta metoda jest w pełni ogólna (działa na 1 z N) i jest praktycznie wykonalna.
d8d0d65b3f7cf42

3

Artykuł Magnusa Björka opisuje dwie techniki, które mogą być warte wypróbowania.

Dla 1-out- można jednocześnie używać kodowania binarnego i binarnego. Zatem mamy x 1 , , x n jako kodowanie jednorazowe, i y 1 , , y b jako kodowanie binarne, gdzie b = lg n . Możemy łatwo zakodować ograniczenie „co najmniej jednego” w jednej klauzuli: ( x 1x n ) . Możemy również wymusić, aby oba kodowania były spójne z 2 lg nnx1,,xny1,,ybb=lgn(x1xn)2lgnklauzule: dodajemy po prostu lub x ixi¬yj , zgodnie z tym, czy j- ty bit binarnego kodowania i wynosi 0 czy 1. W końcu ograniczenie „co najwyżej jeden” następuje automatycznie. Pozwala to również pozostałej części instancji SAT na korzystanie z dowolnego wygodniejszego kodowania.xiyjji

W przypadku -out-of- n można zastosować sieć sortującą do danych wejściowych x 1 , , x n, aby uzyskać posortowane dane wyjściowe y 1 , , y n , a następnie dodać klauzulę wymagającą, aby y k było prawdziwe i y k + 1 jest fałszem. Istnieje wiele prostych sieci sortujących, które wymagają jedynie jednostek porównawczych O ( n lg 2 n ) . Dlatego otrzymujemy kodowanie wykorzystujące O ( n lg 2knx1,,xny1,,ynykyk+1O(nlg2n) klauzule i zmienne tymczasowe.O(nlg2n)

Papier jest

Magnus Björk. Skuteczne techniki kodowania SAT . 25 lipca 2009 r.

Poniższy artykuł zawiera szczegółową listę kodowań dla 1-out-of- i k -out-of- n , z pewną eksperymentalną oceną każdego z nich. Wnioski nie są do końca jasne (kodowanie poleceń w ich eksperymentach wygląda całkiem nieźle).nkn

Alan M. Frisch, Paul A. Giannaros. Kodowania SAT ograniczenia At-Most-k: Niektóre stare, niektóre nowe, niektóre szybkie, niektóre powolne . ModRef 2010.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.