Oto jeden ze sposobów wygenerowania unikalnej instancji SAT, biorąc pod uwagę instancję SAT φ , o której wiesz, że jest zadowalająca. Rozważ wzór ψ ( x )kφψ(x) podany przez
φ(x)∧h(x)=y,
gdzie jest funkcją skrótu, która odwzorowuje przypisanie x na wartość k- bitową (dla niektórych małych wartości k ), a y jest losową wartością k- bit. Jeśli φ ma około 2 k spełniających zadania, to (heurystycznie) zakładamy, że ψ będzie miało dokładnie jedno zadowalające zadanie (ze stałym prawdopodobieństwem). Możemy sprawdzić, czy tak jest, używając solwera SAT (a mianowicie sprawdzić, czy iable jest zadowalające; jeśli tak, a x 0 jest zadowalające). Jeśli k nie jest znane, możesz znaleźć khxkkykφ2kψψx0 to jedno zadowalające przypisanie, przetestuj, czy ψ(x)∧x≠x0kk za pomocą wyszukiwania binarnego lub po prostu iterując po każdej wartości kandydującej (gdzie n jest liczbą zmiennych boolowskich w xk=1,2,…,nnx ).
Możesz dowolnie wybierać funkcję skrótu. Prawdopodobnie będziesz chciał uczynić to tak prostym, jak to możliwe. Jeden niezwykle prosta konstrukcja jest posiadanie wyłowić losowy podzbiór k bitów z x . Nieco bardziej zaawansowaną konstrukcją jest, aby i- ty bit h ( x ) był xor dwóch losowo wybranych bitów z x (wybranie osobnej pary pozycji bitów dla każdego i , niezależnie). Utrzymanie h prosty zachowa ψ stosunkowo prosta.hkxih(x)xihψ
Ten rodzaj transformacji jest czasem używany / sugerowany, jako część schematu szacowania liczby spełniających przypisań do formuły φ ; Dostosowałem go do twoich potrzeb.
W Internecie można znaleźć wiele stanowisk testowych instancji SAT i zastosować tę transformację do wszystkich, aby uzyskać kolekcję unikalnych instancji SAT.k
Inną możliwością byłoby wygenerowanie unikatowych instancji SAT z kryptografii. Załóżmy na przykład, że f : { 0 , 1 } n → { 0 , 1 } n jest kryptograficzną kombinacją jednokierunkową. Niech x będzie losowo wybranym elementem { 0 , 1 } n , a niech y = f ( x ) . Zatem wzór φ ( x ) podany przez f ( x y jest unikalnykf:{0,1}n→{0,1}nx{0,1}ny=f(x)φ(x)f(x)=yk -SAT instance. Jako inny przykład wybierz losowo dwie duże liczby pierwsze i niech n = p q . Zatem wzór φ ( x , y ) podany przez x ⋅ y = n ∧ x > 1 ∧ y > 1 ∧ x ≤ y (z oczywistą korelacją między łańcuchami bitów a liczbami całkowitymi) jest unikalnyp,qn=pqφ(x,y)x⋅y=n∧x>1∧y>1∧x≤yk-Sat wystąpienie. Jednak te konstrukcje nie wydają się użytecznym sposobem na porównanie lub optymalizację twojego solvera. Wszystkie mają specjalną strukturę i nie ma powodu, aby sądzić, że ta struktura reprezentuje rzeczywiste problemy. W szczególności instancje SAT wyciągnięte z problemów kryptograficznych są niezwykle trudne, o wiele trudniejsze niż instancje SAT pochodzące z wielu innych rzeczywistych aplikacji solverów SAT, więc nie są one bardzo dobrą podstawą do testowania twojego solvera.
Ogólnie rzecz biorąc, wszystkie techniki wymienione w tej odpowiedzi mają tę wadę, że generują Unikalne k instancje SAT o określonej strukturze, więc mogą nie być tym, czego szukasz - a przynajmniej nie chcieć polegać wyłącznie na podstawie formuł wygenerowanych w ten sposób. Lepszym podejściem byłoby zidentyfikowanie aplikacji Unique -SAT (kto Twoim zdaniem zamierza użyć twojego solvera i do jakiego celu?), A następnie spróbować uzyskać realistyczne przykłady z tych domen aplikacji.k
W pokrewnym temacie zobacz także Generowanie interesujących problemów optymalizacji kombinatorycznej