Ось один із способів генерування унікального екземпляра -SAT з урахуванням примірника SAT φ, який, на вашу думку, задовольняє. Розглянемо формулу ψ ( x ), задану формулоюkφψ(x)
φ(x)∧h(x)=y,
де - хеш-функція, яка відображає призначення x на k- бітове значення (для деякого невеликого значення k ), а y - випадкове k- бітове значення. Якщо φ має близько 2 k задовольняючих задач, то (евристично) будемо вважати, що ψ матиме рівно одне задовольняюче завдання (з постійною ймовірністю). Ми можемо перевірити, чи є це випадок , використовуючи вирішувач SAT (а саме, тест чи ψ виконаємо, якщо вона є, і х 0 є одним задовольняє завдання, тест чи ψ ( х ) ∧ хhxkkykφ2kψψx0 задовольняється). Якщо k невідомо, ви можете знайти k за допомогою двійкового пошуку або просто шляхом повторення значення кожного кандидата k = 1 , 2 , … , n (де n - кількість булевих змінних у x ).ψ(x)∧x≠x0kkk = 1 , 2 , … , nнх
Ви можете вибрати хеш-функцію вільно. Напевно, ви захочете зробити це максимально просто. Одна надзвичайно проста конструкція полягає у тому, щоб виділити випадкове підмножину k біт з x . Трохи більш складна конструкція полягає в тому, щоб i- й біт h ( x ) був xor двох випадково вибраних бітів з x (вибираючи окрему пару бітових позицій для кожного i , незалежно). Зберігаючи ч просто буде тримати ψ відносно просто.годкхih ( x )хiгодψ
Цей вид перетворень іноді використовується / пропонується, як частина схеми для оцінки кількості задовольняючих завдань формулі ; Я адаптував це під ваші особливі потреби.φ
В Інтернеті ви можете знайти багато тестових таблиць екземплярів SAT, і ви можете застосувати це перетворення до всіх них, щоб отримати колекцію унікальних екземплярів SAT.к
Іншою можливістю буде генерування унікальних екземплярів -SAT з криптографії. Наприклад, припустимо, що f : { 0 , 1 } n → { 0 , 1 } n - криптографічна одностороння перестановка. Нехай x є випадковим чином обраним елементом { 0 , 1 } n , і y = f ( x ) . Тоді формула φ ( x ), задана f ( x ) =кf: { 0 , 1 }н→ { 0 , 1 }нх{ 0 , 1 }ну=f(x)φ(x) - це унікальнийекземпляр k -SAT. В якості іншого прикладу виберіть два великих простих числа p , q випадковим чином і нехай n = p q . Тоді формула φ ( x , y ), задана x ⋅ y = n ∧ x > 1 ∧ y > 1 ∧ x ≤ y (з очевидною відповідністю між бітовими рядками та цілими числами), є унікальною kf(x)=ykp,qn=pqφ(x,y)x⋅y=n∧x>1∧y>1∧x≤yk-SAT екземпляр. Однак ці конструкції не здаються корисним способом порівняння чи оптимізації вашого вирішувача. Усі вони мають особливу структуру, і немає підстав вважати, що ця структура є репрезентативною для реальних проблем. Зокрема, екземпляри SAT, витягнуті з криптографічних проблем, як відомо, є надзвичайно важкими, набагато складнішими, ніж екземпляри SAT, отримані з багатьох інших реальних програм SAT-вирішувачів, тому вони не є дуже хорошою основою для порівняльного аналізу вашого вирішувача.
Взагалі всі методи, згадані у цій відповіді, мають той недолік, що вони генерують унікальні екземпляри -SAT з певною структурою, тому вони можуть бути не тим, що ви шукаєте - або, принаймні, ви не хочете покладатися виключно за формулами, сформованими таким чином. Кращим підходом було б визначити програми Unique k -SAT (на вашу думку, хто збирається використовувати ваш вирішувач і з якою метою?), А потім спробувати отримати деякі реалістичні приклади з цих областей додатків.kk
Для відповідної теми див. Також Створення цікавих проблем комбінаторної оптимізації