Multicore SAT Solver

12

Я пытаюсь решить проблему SAT переменных 25k пунктов 5k переменных. Так как он работал в течение часа (precosat), и я хотел бы потом решить более крупные, я ищу многоядерный SAT-Solver.

Кажется, что есть много SAT-Solvers, я совершенно потерян.

Кто-нибудь может указать мне лучший вариант для моего случая?

Я также был бы счастлив, если бы кто-то мог дать мне приблизительное время (если возможно).

multsatsolv
источник
1
Вы ищете готовые программы? Тогда это не лучший сайт, чтобы спросить. Вы хотите узнать о SAT-решении? Добро пожаловать! Вы говорите, что искали; что ты нашел? Что тебя смущает?
Рафаэль
Ну, я посмотрел количество тем, связанных с SAT, на нескольких форумах StackExchange. В итоге я тоже выбрал теоретический CS и CS (и выбрал позже). Где я должен был попросить готовую программу? Благодарю.
Multsatsolv

Ответы:

8

Посмотрите результаты конкурса SAT 2013 года . Основываясь на этих результатах, обязательно попробуйте Lingeling . Плинкинг - это параллельный вариант.

Если вам не нужно доказывать неудовлетворенность (возможно, вы знаете, что экземпляр является удовлетворительным, и вам просто нужно знать назначение, делающее его SAT), вы также можете попробовать методы локального поиска.

Юхо
источник
Благодарю. Я посмотрю на (P) Лингелинг. Кроме того, я понятия не имею, выполнимо ли это (хотя лучше, иначе я застряну).
multsatsolv
+1. Исходя из нашего опыта, определенно стоит попробовать pingeling (по крайней мере, если у вас один компьютер с несколькими ядрами и большим объемом памяти). Для еще большей производительности попробуйте найти вычислительный кластер с как можно большим количеством узлов и запустить несколько экземпляров слияния (или слияния) с разными случайными начальными числами.
Юкка Суомела
4

Я не уверен в существовании практических многоядерных спутниковых решателей, но есть несколько проектов и статей:

Я также обнаружил этот интересный момент: вы можете запустить обычный sat-solver несколько раз с разными начальными данными для одной и той же задачи параллельно, чтобы получить многоядерный эффект.

Редактировать: Включая мои комментарии к идее VZN здесь:

k2k


(Я также был бы счастлив, если бы кто-то мог дать мне приблизительное время (если возможно), чтобы решить проблему SAT для Y-переменных.

mnm,n

Реал Слав
источник
Спасибо за ссылки. Я прочитаю некоторые из них. Я надеюсь, что мою проблему не слишком сложно решить, хотя.
multsatsolv
@multsatsolv это зависит от проблемы. Это также зависит от кодировки. Решатели SAT могут по-разному обрабатывать разные кодировки одной и той же проблемы. И разные решатели SAT могут быть лучше в одной кодировке, чем в другой; в этом нет никакой науки (ну, есть, но это не стоит пытаться понять в быстро меняющейся эволюции решателей SAT): единственное, что нужно сделать, - это попробовать разные комбинации кодировок и решателей.
Realz Slaw
3

На самом деле существует очень простой способ превратить любой SAT-решатель в параллельную версию, потому что SAT смущающе параллелен в следующем смысле.

2nn2n

ВЗН
источник
nk
3
Этот подход, кажется, не работает слишком хорошо на практике. Для положительных случаев следующий подход обычно намного лучше, если у вас много компьютеров: просто запустите, например, lingeling с одним и тем же экземпляром, но с разными случайными начальными числами, и подождите, пока один из решателей не найдет решение.
Юкка Суомела
n
1
@vzn: Подход, который вы предложили. Чтобы понять, почему это работает не так хорошо, попробуйте на реальных примерах и сравните с тем, что я предложил. :) Ваш подход имел бы большой смысл, если бы вы имели дело с наивным алгоритмом поиска с возвратом, но современные SAT-решатели - это гораздо больше, чем наивный поиск с возвратом.
Юкка Суомела
хорошо, но вы можете объяснить словами, в чем проблема ? Ваш подход может работать для удовлетворительных экземпляров, хорошо, но разве это не займет точно то же самое время параллельно, чтобы обнаружить неудовлетворительный экземпляр независимо от того, сколько отдельных экземпляров запущено? если нет, может быть есть ссылка, чтобы процитировать на subj ...
vzn