Унікальні


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 FFnm3n2n3n2n2n1F
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)xx0kkk=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)xy=nx>1y>1xyk-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<ba1 .bp

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

різні дослідники протягом багатьох років створювали цей факторинг-код 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 .(2k1)(nk)

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

Візьміть (k2)x1,x2xk
(¬x1,¬x2,x3xk)(¬x1,x2,¬x3xk)(x1,x2¬xk1¬xk)

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

x1,x2xkmnkxi(k<in)0k1 змінним середх1,х2хк, наприклад:
(¬xk+1,x1,xk1)(¬xn,x1xk1).

Then |F|=i=1k(ki)+nk=2k1+nk

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.