Багатоядерний SAT Solver


12

Я намагаюся вирішити проблему SAT із змінами 25k пунктів 5k. Оскільки вона працює протягом години (попередня пластика), і я хотів би вирішити більш великі після цього, я шукаю багатоядерний SAT-Solver.

Оскільки, здається, є багато рішучих SAT, я досить розгублений.

Чи міг би хтось вказати на мене найкращим для моєї справи?

Я також був би радий, якби хтось міг дати мені приблизний час (якщо це можливо).


1
Шукаєте готові програми? Тоді це не найкращий сайт для запитання. Ви хочете дізнатися про рішення SAT? Ласкаво просимо! Ви кажете, що шукали; що ти знайшов? Що вас бентежить?
Рафаель

Ну, я переглянув кількість потоків, пов’язаних із SAT, на кількох форумах StackExchange. Зрештою, я занадто обираю теоретичні CS та CS (і вибираю пізніші). Де я мав запитати про готову програму? Дякую.
multsatsolv

Відповіді:


8

Погляньте на результати цьогорічного конкурсу SAT 2013 . На підставі цих результатів, безумовно , дають Lingeling спробувати. Плінглінг - паралельний його варіант.

Якщо вам не потрібно доводити незадоволеність (можливо, ви знаєте, що примірник підходить, і вам просто потрібно знати завдання, яке робить його SAT), ви можете також спробувати місцеві методи пошуку.


Дякую. Я перегляну (P) Лінґелінг. Крім того, я не маю уявлення, чи це задовільно (хоча краще, інакше я застряг).
multsatsolv

+1. Виходячи з нашого досвіду, plingeling, безумовно, ви повинні спробувати спочатку (принаймні, якщо у вас є один комп'ютер з декількома ядрами і достатньою кількістю пам'яті). Для отримання більшої продуктивності спробуйте знайти обчислювальний кластер із якомога більшою кількістю вузлів і запустіть кілька примірників тривалості (або plingeling) з різними випадковими насінням.
Jukka Suomela

4

Я не впевнений у існуванні практичних багатоядерних розвідників, але є кілька проектів і робіт:

Я також виявив цей цікавий момент: ви можете паралельно запускати звичайний сит-розв'язувач кілька разів з різними насінням на одній проблемі, щоб отримати багатоядерний ефект.

Редагувати: включення моїх коментарів до ідеї vzn тут:

Аналогічний альтернативний метод - просто вибрати одну змінну, встановити її значення true, надіслати її одному екземпляру solver. Встановіть його значення на значення false та надішліть його іншому екземпляру вирішувача. Ви можете зробити це для змінних і одночасно запустити процеси. Вибір змінних для встановлення може бути трохи складним, тобто. якщо вони безпосередньо залежать один від одного, то вибирати одне, а потім інше безглуздо. Для послідовного / рекурсивного вибору може бути необхідний крок спрощення.2 kk2k


(Я також буду радий, якщо хтось міг би дати мені приблизний час (якщо це можливо) для вирішення задачі X змінні Y змінної SAT.)

Ніхто не може дати тобі приблизний час на основі змінних, застережень, оскільки деякі проблеми SAT вирішити вкрай важко (читати: не відбудеться), навіть із відносно невеликим ; в той час як інші величезні екземпляри можна вирішити відносно швидко (і саме для цих випадків корисні розв'язувачі Sat).н м , нmnm,n


Дякуємо за посилання. Я прочитаю деякі з них. Я сподіваюся, що мою проблему не надто важко вирішити.
multsatsolv

@multsatsolv це залежить від проблеми. Це також залежить від кодування. SAT вирішувачі можуть по-різному обробляти різні кодування однієї проблеми. І різні розв'язувачі SAT можуть бути кращими при одному кодуванні, ніж іншому; для цього немає ніякої науки (ну є, але це не можна намагатись зрозуміти, у швидкій еволюції вирішувачів SAT): єдине, що потрібно зробити, - спробувати різні комбінації кодувань та розв'язувачів.
Realz Slaw

3

Насправді існує дуже простий спосіб перетворити будь-який вирішувач SAT у паралельну версію, оскільки SAT бентежно паралельний у наступному сенсі.

Виберіть деяку потужність двох, щоб розділити її на, . Потім виберіть змінних і призначте всі можливі булеві значення. Після виконання завдань буде формул SAT. Розв’яжіть кожен окремо (паралельно). Існує загальне рішення, якщо існує одне з окремих рішень, а повне рішення - це саме об'єднання всіх окремих рішень. n 2 n2nn2n


kn як правило, досить великий (це мінімальний розріз на графіку змінної клаузули, і він, ймовірно, завжди більший, ніж зворотний). Аналогічний альтернативний метод - просто вибрати одну змінну, встановити її значення true, надіслати її одному екземпляру solver. Встановіть його значення на значення false та надішліть його іншому екземпляру вирішувача. Це можна зробити для змінних. Вибір змінних для встановлення може бути трохи складним, тобто. якщо вони безпосередньо залежать один від одного, то вибирати одне, а потім інше безглуздо. Для послідовного / рекурсивного вибору може бути необхідний крок спрощення. k
Realz Slaw

3
Схоже, такий підхід на практиці не працює надто добре. Для позитивних випадків наступний підхід, як правило, набагато кращий, якщо у вас багато комп'ютерів: просто запустіть, наприклад, затягування з тим самим екземпляром, але з різними випадковими насінням, і зачекайте, поки хтось із вирішувачів не знайде рішення.
Юкка Суомела

@jukka, який підхід & чому він не працює занадто добре? це пов’язано з дисбалансом навантаження? rs має гарну думку про розділ, який не розбиває навантаження дуже рівномірно, але це буде залежати від (симетрії) структури екземпляра, і він вказує на його легко спочатку вибрати змінні, які, здається, розділяють його більш рівномірно, наскільки як вечір, виходить результат # пунктів. realz, хіба не зрозумів суть про vs backdoor ... думай, backdoors є рідкісним випадком у справді важких випадках ...n
vzn

1
@vzn: Підхід, який ви запропонували. Щоб зрозуміти, чому це не дуже добре, спробуйте це з реальними екземплярами та порівняйте його з тим, що я запропонував. :) Ваш підхід мав би багато сенсу, якби ви мали справу з алгоритмом пошуку наївних зворотних треків, але сучасні рішення SAT - це набагато більше, ніж наївний зворотний пошук.
Jukka Suomela

добре, але чи можете ви пояснити словами, що це за проблема ? ваш підхід може працювати для задоволених випадків. Добре, але хіба паралельно буде проходити рівно той же час, щоб виявити незадовільний екземпляр незалежно від того, скільки запущених окремих примірників? якщо ні, то, можливо, є відповідь, щоб цитувати на subj ...
vzn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.