Đây là một cách để tạo một cá thể -SAT duy nhất , được cung cấp một thể hiện SAT mà bạn biết là thỏa đáng. Hãy xem xét công thức được đưa ra bởiφ ψ ( x )kφψ ( x )
φ ( x ) ∧ h ( x ) = y,
Trong đó là hàm băm ánh xạ một phép gán thành giá trị -bit (đối với một số giá trị nhỏ của ) và là giá trị -bit ngẫu nhiên . Nếu có khoảng thỏa mãn các bài tập, thì (theo kinh nghiệm), chúng tôi giả định rằng sẽ có chính xác một bài tập thỏa mãn (với xác suất không đổi). Chúng tôi có thể kiểm tra xem đây có phải là trường hợp sử dụng bộ giải SAT hay không (cụ thể là kiểm tra xem có thỏa đáng hay không; nếu đúng, và là một nhiệm vụ thỏa mãn, kiểm tra xem có thỏa đáng không). Nếux k k y k φ 2 k ψ ψ x 0 ψ ( x ) ∧ x ≠ x 0 k k k = 1 , 2 , ... , n n xhxkkykφ2kψψx0ψ ( x ) ∧ x ≠ x0kkhông biết, bạn có thể tìm thấy bằng cách sử dụng tìm kiếm nhị phân hoặc chỉ bằng cách lặp qua từng giá trị ứng cử viên (trong đó là số lượng biến boolean trong ).kk = 1 , 2 , ... , nnx
Bạn có thể chọn hàm băm một cách tự do. Có lẽ bạn sẽ muốn làm cho nó đơn giản nhất có thể. Một cách xây dựng cực kỳ đơn giản là để chọn ra một tập hợp con ngẫu nhiên gồm bit từ . Một cấu trúc phức tạp hơn một chút là để bit thứ của là xor của hai bit được chọn ngẫu nhiên từ (chọn một cặp vị trí bit riêng biệt cho mỗi , một cách độc lập). Giữ đơn giản sẽ giữ tương đối đơn giản.k x i h ( x ) x i h ψhkxTôih ( x )xTôihψ
Kiểu chuyển đổi này đôi khi được sử dụng / đề xuất, như là một phần của sơ đồ để ước tính số lượng bài tập thỏa mãn cho một công thức ; Tôi đã điều chỉnh nó cho nhu cầu cụ thể của bạn.φ
Bạn có thể tìm thấy nhiều thử nghiệm về các trường hợp SAT trên Internet và bạn có thể áp dụng phép chuyển đổi này cho tất cả chúng, để có được một bộ sưu tập các trường hợp -SAT duy nhất .k
Một khả năng khác là tạo các thể hiện -SAT duy nhất từ mật mã. Chẳng hạn, giả sử là hoán vị một chiều bằng mật mã. Đặt là phần tử được chọn ngẫu nhiên củaf : { 0 , 1 } n → { 0 , 1 } n x { 0 , 1 } n y = f ( x ) φ ( x ) f ( x ) = y k p , q n = p q φ ( x , y ) x ⋅ y = n ∧ x >kf: { 0 , 1 }n→ { 0 , 1 }nx{ 0 , 1 }n và đặt . Thì công thức được cho bởi là một thể hiện -SAT duy nhất . Một ví dụ khác, chọn ngẫu nhiên hai số nguyên tố lớn và đặt . Khi đó công thức được cho bởiy= f( x )φ ( x )f(x)=ykp,qn=pqφ(x,y)x ⋅ y=n∧x>1∧y>1∧x≤y(với sự tương ứng rõ ràng giữa chuỗi bit và số nguyên) là một thể hiện -SAT duy nhất . Tuy nhiên, các công trình này dường như không phải là một cách hữu ích để điểm chuẩn hoặc tối ưu hóa bộ giải của bạn. Tất cả chúng đều có cấu trúc đặc biệt, và không có lý do gì để tin rằng cấu trúc này là đại diện cho các vấn đề trong thế giới thực. Cụ thể, các trường hợp SAT được rút ra từ các vấn đề về mật mã được biết là cực kỳ khó, khó hơn nhiều so với các trường hợp SAT được rút ra từ nhiều ứng dụng giải SAT trong thế giới thực khác, vì vậy chúng không phải là cơ sở tốt để đánh giá trình giải của bạn.k
Nói chung, tất cả các kỹ thuật được đề cập trong câu trả lời này đều có nhược điểm là chúng tạo ra các thể hiện -SAT duy nhất có cấu trúc cụ thể, vì vậy chúng có thể không phải là thứ bạn đang tìm kiếm - hoặc, ít nhất, bạn có thể không muốn dựa vào chỉ dựa trên công thức được tạo ra theo cách này. Cách tiếp cận tốt hơn sẽ là xác định các ứng dụng của Unique -SAT (bạn nghĩ ai sẽ sử dụng bộ giải của mình và cho mục đích gì?), Và sau đó thử lấy một số ví dụ thực tế từ các miền ứng dụng đó.kk
Đối với một chủ đề liên quan, xem thêm Tạo các vấn đề tối ưu hóa tổ hợp thú vị