Унікальні


16

Це питання, ймовірно, знаходиться на межі між темою та поза темою, однак тут я бачив подібні запитання, тому я його запитую.


Я реалізую унікальний вирішувач k -SAT, вхід якого є формулою k -CNF, що має щонайменше 1 задовольняюче завдання. Щоб перевірити його практичну поведінку, мені потрібен набір таких формул. Я шукав їх в Інтернеті, і нічого не знайшов (хоча, з іншого боку, дуже легко знайти набори звичайних k -CNF формул).

Де я можу знайти унікальні екземпляри k -SAT?

Крім того, я буду задоволений також тим, що знаю будь-яку процедуру для створення однозначно задоволених екземплярів. Єдиний мені підхід підходить під назвою посадженої генерації екземплярів SAT : ви випадково генеруєте призначення з n змінних, потім ви генеруєте лише ті пропозиції, які згодні з таким призначенням. Цей підхід для моїх цілей незадовільний з наступних причин:

  • Отримана формула може мати додаткові небажані задоволення.
  • Щоб бути впевненим, що формулою однозначно задоволено бажане завдання, вам слід ввести всі можливі пункти, які з нею згодні. Це дозволило б створити формули із занадто великою кількістю застережень, які, ймовірно, буде легко вирішити, а отже, не є репрезентативною для найгіршого випадку поведінки рішення. Мені не очевидно, як ми можемо ефективно змусити унікальність, зберігаючи кількість пунктів розумною.

Як ми можемо генерувати однозначно задоволені формули з розумною кількістю пунктів? Під розумним я маю на увазі далеко не максимум .2k⋅(nk)


Дано формулу SAT з змінними та застереженнями. Якщо кількість застережень становить від до то формула або однозначно задоволена, або не піддається задоволенню. .. Я також опрацював рівняння для k-SAT. Повідомлю вас, якщо я його знайду. n m 3 n - 2 n 3 n - 2 n - 2 n - 1 FFnm3n−2n3n−2n−2n−1F
— Tayfun Pay

Якщо у вас на руках достатньо часу (а екземпляри досить малі), ви можете генерувати екземпляри на фазовому переході та протестувати їх за допомогою SAT-рішення. Якщо у формулі немає рішення, відмовтесь від неї. Якщо в ньому є рішення X, додайте пункт, який наполягає на тому, що рішення не є X, і запустіть вирішувач ще раз. Це є основним, але повільним.
— Ендрю Д. Кінг

Відповіді:


7

Ось один із способів генерування унікального екземпляра -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,…,nnx

Ви можете вибрати хеш-функцію вільно. Напевно, ви захочете зробити це максимально просто. Одна надзвичайно проста конструкція полягає у тому, щоб виділити випадкове підмножину k біт з x . Трохи більш складна конструкція полягає в тому, щоб i- й біт h ( x ) був xor двох випадково вибраних бітів з x (вибираючи окрему пару бітових позицій для кожного i , незалежно). Зберігаючи ч просто буде тримати ψ відносно просто.hkxih(x)xihψ

Цей вид перетворень іноді використовується / пропонується, як частина схеми для оцінки кількості задовольняючих завдань формулі ; Я адаптував це під ваші особливі потреби.φ

В Інтернеті ви можете знайти багато тестових таблиць екземплярів SAT, і ви можете застосувати це перетворення до всіх них, щоб отримати колекцію унікальних екземплярів SAT.k


Іншою можливістю буде генерування унікальних екземплярів -SAT з криптографії. Наприклад, припустимо, що f : { 0 , 1 } n → { 0 , 1 } n - криптографічна одностороння перестановка. Нехай x є випадковим чином обраним елементом { 0 , 1 } n , і y = f ( x ) . Тоді формула φ ( x ), задана f ( x ) =kf:{0,1}н→{0,1}нх{0,1}нy=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

Для відповідної теми див. Також Створення цікавих проблем комбінаторної оптимізації


Перша частина вашого крипто-абзацу неправильна, оскільки (якщо існують односторонні функції) існують односторонні функції, які не є ін'єкційними.

Дякую, @RickyDemer! Я мав на увазі односторонню перестановку, але це було не те, що я писав. Виправлено.
— DW

6

Ви можете розглянути алгоритми, які використовуються для генерування пазлів судоку - імовірно узагальнених до - оскільки (як правило) головоломки судоку мають унікальне рішення. З іншого боку, головоломки судоку також гарантовано мають хоча б одне рішення ... Але пошук цього рішення все-таки може стати хорошим орієнтиром для вашого вирішувача.n×n

Ви можете використовувати генератор судоку разом зі скороченням до SAT або подумати про те, як застосувати методи, використовувані в генерації судоку, для більш прямого генерування унікальних екземплярів SAT. Для перших, очевидно, ваші екземпляри SAT матимуть якусь структуру, але мені незрозуміло, чи це більш-менш структура, ніж, наприклад, посадка розчину або використання техніки ізоляції свідків. Напевно, залежить від ваших потреб та вашого вирішувача.

Я знаю тут одне посилання: Генерування головоломок судоку: від легкого до зла .


4

Я думаю, що хорошим тестовим випадком було б генерувати випадкові однозначно задоволені 3XOR екземпляри (посаджені екземпляри) з обмеженнями, а потім перетворити їх у 3SAT екземпляри.Θ(n)


2

Імхо, один з найкращих способів створення "імовірно важких" екземплярів SAT при контролі кількості рішень - це цілі екземпляри / схеми, що кодуються, кодовані у двійковій системі. код не дуже складний, він використовує в основному схеми додавання EE і не призводить до "великих" випадків SAT. кількість рішень дорівнює кількості факторів (включаючи "перестановки" факторів). тому прості числа генерують рівно два рішення, . одне рішення може бути гарантовано при подальшому «порівнянні» обмеженняяке обмежує чинникиякі <(1,p),(p,1)a<ba≠1 .b≠p

Крім того, при такому підході порівняно легко знайти цифри, хоча приблизно багато факторів / рішень бажані. «Рівніше» число, тим більше факторів.

різні дослідники протягом багатьох років створювали цей факторинг-код SAT (наприклад, для змагань DIMACS / arcihve, який зберігав деякі фактори факторингу в минулому), але, на жаль, не існує загальнодоступної версії. дивіться також перше посилання нижче для запиту, де код був написаний / реалізований, мабуть, для аспірантури.

інший емпіричний / ітеративний підхід, який може бути корисним для деяких, щоб створити більше "неструктуровані" екземпляри: створити випадкові випадки SAT поблизу точки переходу (область, де рівняння має ймовірність 50% між "вирішуваною та нерозв'язною"), і потім розв’яжіть рівняння. якщо вона нерозв’язна, викиньте і перезавантажте. якщо воно вирішимо, додайте пропозиції, які обмежують рішення, яке не є рішенням, отримуючи e n + 1 , і повторно вирішуйте. повторити, якщо потрібно. коли рівняння e n + 1 вже не розв’язується, е n повинно було мати єдине / унікальне рішення.enen+1en+1en


Раніше я згадував про підхід факторингу у своїй відповіді, але я також пояснив, чому це може бути не ідеальною тестовою панеллю: "Однак ці конструкції не здаються корисним способом орієнтування чи оптимізації вашого вирішувача. Усі вони мають особливу структуру, і немає жодних підстав вважати, що ця структура є репрезентативною для реальних проблем. Зокрема, відомі випадки SAT, які витягнуті з криптографічних проблем, надзвичайно важкі, набагато складніші, ніж випадки SAT, отримані з багатьох інших реальних застосунків розв'язувачів SAT, тож вони не дуже хороша основа для порівняльної оцінки вашого вирішувача ".
— DW

тож вище сказане - це інша версія, що якщо потрібно дуже важких випадків, очевидно, природний тест для будь-якого вирішувача, то факторинг - це справді перспективний шлях. серйозно сумніваєтесь, що ви можете знайти будь-які опубліковані думки, які відображають вашу. Повторюся, фактори дослідження були вкладені в архіви викликів DIMACS серйозними дослідниками, починаючи багато років тому. у будь-якому випадку, ваша протилежна думка навіть насправді не висловлюється самопослідовно. криптографія - це справді головне / застосоване проблема реального світу, навіть більше, ніж багато абстрактних / необґрунтованих / академічних проблем, які використовуються для випадків SAT ...
— vzn

2

Ви можете легко генерувати безпосередньо унікальні формули SAT з розумним розміром (|F|<n+2k)

Нехай - унікальна модель - скажімо, що m містить лише "0" s (перейменуйте змінні пізніше, якщо потрібно). Нехай формула F a k -SAT задовольняється лише m - максимальний розмір F - загальна кількість пропозицій, задоволених m, тобто ( 2 k - 1 ) ( nmm
FkmFm .(2k−1)(nk)

Візьміть положенняякі усувають всі моделі призначаючи точно один "1" середх1,х2...хдо:(¬х1,х2...хдо)(х1,¬х2...хдо)...(х1,x2…¬xk)(k1)x1,x2…xk
(¬x1,x2…xk)(x1,¬x2…xk)…(x1,x2…¬xk)

Візьміть (k2)x1,x2…xk
(¬x1,¬x2,x3…xk)(¬x1,x2,¬x3…xk)…(x1,x2…¬xk−1¬xk)

Продовжуйте, поки не приймете єдине (kk)x1,x2…xk

x1,x2…xkmn−kxi(k<i≤n)0k−1 змінним середх1,х2…хк, наприклад:
(¬xk+1,x1…,xk−1)…(¬xn,x1…xk−1).

Then |F|=∑i=1k(ki)+n−k=2k−1+n−k

To get more clauses, add any clause containing at least one negated variable. To get an unsatisfiable formula, just add a clause with k unnegated variables.


There is a problem in your answer : we have n variables and this means that and not k
— Elaqqad
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.