В информатике и формальных методах решатель SAT — это компьютерная программа , которая направлена на решение проблемы выполнимости булевых уравнений . При вводе формулы над булевыми переменными, такими как «( x или y ) и ( x или не y )», решатель SAT выводит, является ли формула выполнимой , то есть существуют возможные значения x и y , которые делают формулу истинной, или невыполнимой, то есть таких значений x и y нет . В этом случае формула выполнима, когда x является истинным, поэтому решатель должен вернуть «выполнимо». С момента появления алгоритмов для SAT в 1960-х годах современные решатели SAT превратились в сложные программные артефакты, включающие большое количество эвристик и оптимизаций программы для эффективной работы.
Согласно результату, известному как теорема Кука–Левина , булева выполнимость является NP-полной проблемой в целом. В результате известны только алгоритмы с экспоненциальной сложностью в худшем случае. Несмотря на это, в 2000-х годах были разработаны эффективные и масштабируемые алгоритмы для SAT, которые способствовали резкому прогрессу в способности автоматически решать примеры задач, включающие десятки тысяч переменных и миллионы ограничений. [1]
Решатели SAT часто начинают с преобразования формулы в конъюнктивную нормальную форму . Они часто основаны на основных алгоритмах, таких как алгоритм DPLL , но включают ряд расширений и функций. Большинство решателей SAT включают тайм-ауты, поэтому они завершат работу в разумные сроки, даже если не смогут найти решение, с выводом типа «неизвестно» в последнем случае. Часто решатели SAT не просто предоставляют ответ, но могут предоставить дополнительную информацию, включая пример назначения (значения для x , y и т. д.) в случае, если формула выполнима или минимальный набор невыполнимых предложений, если формула невыполнима.
Современные решатели SAT оказали значительное влияние на такие области, как проверка программного обеспечения , анализ программ , решение ограничений , искусственный интеллект , автоматизация электронного проектирования и исследование операций . Мощные решатели легко доступны в виде бесплатного и открытого программного обеспечения и встроены в некоторые языки программирования, например, выставляя решатели SAT как ограничения в программировании логики ограничений .
Булева формула — это любое выражение, которое можно записать с использованием булевых (пропозициональных) переменных x, y, z, ... и булевых операций AND, OR и NOT. Например,
Назначение состоит из выбора для каждой переменной назначения ИСТИНА или ЛОЖЬ. Для любого назначения v булева формула может быть оценена и принимает значение истина или ложь. Формула выполнима, если существует назначение (называемое удовлетворяющим назначением ), для которого формула принимает значение истина.
Проблема выполнимости булевой формулы — это задача принятия решения , которая требует на входе булевой формулы определить, выполнима ли эта формула или нет. Эта задача является NP-полной .
Решатели SAT обычно разрабатываются с использованием одного из двух основных подходов: алгоритма Дэвиса–Патнэма–Логеманна–Лавленда (DPLL) и обучения на основе конфликтных положений (CDCL).
Решатель DPLL SAT использует систематическую процедуру поиска с возвратом для исследования (экспоненциального размера) пространства переменных назначений в поисках удовлетворяющих назначений. Основная процедура поиска была предложена в двух основополагающих работах в начале 1960-х годов (см. ссылки ниже) и теперь обычно называется алгоритмом DPLL . [2] [3] Многие современные подходы к практическому решению SAT выводятся из алгоритма DPLL и имеют ту же структуру. Часто они повышают эффективность только определенных классов задач SAT, таких как примеры, которые появляются в промышленных приложениях или случайно сгенерированные примеры. [4] Теоретически, экспоненциальные нижние границы были доказаны для семейства алгоритмов DPLL. [ необходима ссылка ]
Современные решатели SAT (разработанные в 2000-х годах) бывают двух видов: «управляемые конфликтами» и «упреждающие». Оба подхода происходят от DPLL. [4] Решатели, управляемые конфликтами, такие как обучение на основе положений конфликта (CDCL), дополняют базовый алгоритм поиска DPLL эффективным анализом конфликтов, обучением на основе положений, обратным переходом , формой распространения единиц «два наблюдаемых литерала» , адаптивным ветвлением и случайными перезапусками. Было эмпирически показано, что эти «дополнения» к базовому систематическому поиску необходимы для обработки больших экземпляров SAT, которые возникают в автоматизации электронного проектирования (EDA). [5] Большинство современных решателей SAT основаны на фреймворке CDCL по состоянию на 2019 год. [6] Известные реализации включают Chaff [7] и GRASP . [8]
Решатели с опережающим просмотром особенно усилили сокращения (выходящие за рамки распространения единичного предложения) и эвристики, и они, как правило, сильнее решателей, управляемых конфликтами, на сложных экземплярах (в то время как решатели, управляемые конфликтами, могут быть намного лучше на больших экземплярах, которые на самом деле имеют внутри простой экземпляр). [ необходима цитата ]
MiniSAT, основанный на конфликтах и относительно успешно работавший на конкурсе SAT 2005 года, содержит всего около 600 строк кода. Современный решатель Parallel SAT — ManySAT. [9] Он может достигать сверхлинейных ускорений для важных классов задач. Примером решателей с опережающим просмотром является march_dl, завоевавший приз на конкурсе SAT 2007 года. Решатель CP-SAT от Google, входящий в состав OR-Tools , завоевал золотые медали на конкурсах Minizinc по программированию ограничений в 2018, 2019, 2020 и 2021 годах.
Определенные типы больших случайных выполнимых примеров SAT могут быть решены методом распространения опроса (SP). [ необходима ссылка ] В частности, в приложениях проектирования и верификации оборудования выполнимость и другие логические свойства заданной пропозициональной формулы иногда определяются на основе представления формулы в виде двоичной диаграммы решений (BDD).
Разные решатели SAT найдут разные примеры легкими или сложными, и некоторые преуспеют в доказательстве невыполнимости, а другие в поиске решений. Все эти модели поведения можно увидеть в соревнованиях по решению SAT. [10]
Параллельные решатели SAT делятся на три категории: алгоритмы портфолио, «разделяй и властвуй» и параллельные алгоритмы локального поиска . При параллельных портфолио несколько различных решателей SAT работают одновременно. Каждый из них решает копию экземпляра SAT, тогда как алгоритмы «разделяй и властвуй» делят задачу между процессорами. Существуют различные подходы к распараллеливанию алгоритмов локального поиска.
Международный конкурс SAT Solver Competition имеет параллельный трек, отражающий последние достижения в параллельном решении SAT. В 2016, [11] 2017 [12] и 2018, [13] тесты проводились на системе с общей памятью с 24 процессорными ядрами , поэтому решатели, предназначенные для распределенной памяти или многоядерных процессоров, могли не соответствовать требованиям.
В общем, не существует решателя SAT, который бы работал лучше всех других решателей для всех задач SAT. Алгоритм может хорошо работать для экземпляров задач, с которыми другие борются, но будет работать хуже с другими экземплярами. Кроме того, при наличии экземпляра SAT нет надежного способа предсказать, какой алгоритм решит этот экземпляр особенно быстро. Эти ограничения мотивируют подход параллельного портфеля. Портфель — это набор различных алгоритмов или различных конфигураций одного и того же алгоритма. Все решатели в параллельном портфеле работают на разных процессорах для решения одной и той же задачи. Если один решатель завершает работу, решатель портфеля сообщает, что задача выполнима или невыполнима в соответствии с этим решателем. Все остальные решатели завершаются. Диверсификация портфелей путем включения различных решателей, каждый из которых хорошо работает на разных наборах задач, повышает надежность решателя. [14]
Многие решатели используют генератор случайных чисел внутри себя . Диверсификация их семян — простой способ диверсификации портфеля. Другие стратегии диверсификации включают включение, отключение или диверсификацию определенных эвристик в последовательном решателе. [15]
Одним из недостатков параллельных портфелей является объем дублирующей работы. Если обучение предложениям используется в последовательных решателях, совместное использование изученных предложений между параллельно работающими решателями может сократить дублирующую работу и повысить производительность. Тем не менее, даже простое параллельное выполнение портфеля лучших решателей делает параллельный решатель конкурентоспособным. Примером такого решателя является PPfolio. [16] [17] Он был разработан для поиска нижней границы производительности, которую параллельный решатель SAT должен быть в состоянии обеспечить. Несмотря на большой объем дублирующей работы из-за отсутствия оптимизаций, он хорошо показал себя на машине с общей памятью. HordeSat [18] — это параллельный решатель портфеля для больших кластеров вычислительных узлов. Он использует по-разному настроенные экземпляры одного и того же последовательного решателя в своей основе. В частности, для жестких экземпляров SAT HordeSat может обеспечить линейное ускорение и, следовательно, значительно сократить время выполнения.
В последние годы решатели SAT с параллельным портфелем доминировали на параллельном треке Международных конкурсов решателей SAT. Известными примерами таких решателей являются Plingeling и painless-mcomsps. [19]
В отличие от параллельных портфелей, параллельный «разделяй и властвуй» пытается разделить пространство поиска между элементами обработки. Алгоритмы «разделяй и властвуй», такие как последовательный DPLL, уже применяют технику разделения пространства поиска, поэтому их расширение в сторону параллельного алгоритма является прямым. Однако из-за таких техник, как распространение единиц, после деления частичные проблемы могут значительно отличаться по сложности. Таким образом, алгоритм DPLL обычно не обрабатывает каждую часть пространства поиска за одинаковое время, что приводит к сложной проблеме балансировки нагрузки . [14]
Из-за нехронологического возврата параллелизация обучения на основе конфликта затруднена. Одним из способов преодоления этого является парадигма «Cube-and-Conquer». [20] Она предполагает решение в два этапа. На этапе «куба» задача делится на многие тысячи, вплоть до миллионов, разделов. Это делается решателем с предварительным просмотром, который находит набор частичных конфигураций, называемых «кубами». Куб также можно рассматривать как конъюнкцию подмножества переменных исходной формулы. В сочетании с формулой каждый из кубов образует новую формулу. Эти формулы могут быть решены независимо и одновременно решателями, управляемыми конфликтом. Поскольку дизъюнкция этих формул эквивалентна исходной формуле, задача считается выполнимой, если одна из формул выполнима. Решатель с предварительным просмотром подходит для небольших, но сложных задач, [21] поэтому он используется для постепенного разделения задачи на несколько подзадач. Эти подзадачи проще, но все еще велики, что является идеальной формой для решателя, управляемого конфликтом. Кроме того, решатели с опережением рассматривают всю проблему, тогда как решатели, управляемые конфликтом, принимают решения на основе информации, которая является гораздо более локальной. В фазе куба задействованы три эвристики. Переменные в кубах выбираются эвристикой принятия решения. Эвристика направления решает, какое назначение переменных (истина или ложь) исследовать в первую очередь. В удовлетворяемых случаях проблемы выбор удовлетворяемой ветви первым является полезным. Эвристика отсечения решает, когда следует прекратить расширение куба и вместо этого направить его в последовательный решатель, управляемый конфликтом. Предпочтительно, чтобы кубы были одинаково сложными для решения. [20]
Treengeling — пример параллельного решателя, который применяет парадигму Cube-and-Conquer. С момента своего появления в 2012 году он имел множество успехов на Международном конкурсе решателей SAT. Cube-and-Conquer использовался для решения задачи булевых пифагорейских троек . [22]
Cube-and-Conquer — это модификация или обобщение подхода «разделяй и властвуй» на основе DPLL, который использовался для вычисления чисел Ван дер Вардена w(2;3,17) и w(2;3,18) в 2010 году [23] , где обе фазы (разделение и решение частичных задач) выполнялись с использованием DPLL.
Одна из стратегий в направлении параллельного локального алгоритма поиска для решения SAT заключается в попытке одновременного переключения нескольких переменных на разных процессорах. [24] Другая стратегия заключается в применении вышеупомянутого подхода портфеля, однако совместное использование положений невозможно, поскольку решатели локального поиска не создают положений. В качестве альтернативы можно совместно использовать конфигурации, которые создаются локально. Эти конфигурации могут использоваться для руководства созданием новой начальной конфигурации, когда локальный решатель решает перезапустить свой поиск. [25]
Алгоритмы, не входящие в семейство DPLL, включают стохастические алгоритмы локального поиска . Одним из примеров является WalkSAT . Стохастические методы пытаются найти удовлетворяющую интерпретацию, но не могут сделать вывод о том, что экземпляр SAT невыполним, в отличие от полных алгоритмов, таких как DPLL. [4]
Напротив, рандомизированные алгоритмы, такие как алгоритм PPSZ Патури, Пудлака, Сакса и Зане, устанавливают переменные в случайном порядке в соответствии с некоторыми эвристиками, например, разрешением ограниченной ширины . Если эвристика не может найти правильную настройку, переменная назначается случайным образом. Алгоритм PPSZ имеет время выполнения [ уточнить ] для 3-SAT. Это было самое известное время выполнения для этой задачи до 2019 года, когда Хансен, Каплан, Замир и Цвик опубликовали модификацию этого алгоритма со временем выполнения для 3-SAT. Последний в настоящее время является самым быстрым известным алгоритмом для k-SAT при всех значениях k. В условиях со многими удовлетворяющими назначениями рандомизированный алгоритм Шенинга имеет лучшую границу. [26] [27] [28]
Решатели SAT использовались для помощи в доказательстве математических теорем с помощью компьютерного доказательства . В теории Рамсея несколько ранее неизвестных чисел Ван дер Вардена были вычислены с помощью специализированных решателей SAT, работающих на ПЛИС . [29] [30] В 2016 году Марийн Хойл , Оливер Куллманн и Виктор Марек решили задачу о булевых пифагорейских тройках, используя решатель SAT, чтобы показать, что нет способа раскрасить целые числа до 7825 требуемым образом. [31] [32] Малые значения чисел Шура также были вычислены Хойлом с помощью решателей SAT. [33]
Решатели SAT используются для формальной проверки оборудования и программного обеспечения . При проверке моделей (в частности, при проверке ограниченной модели) решатели SAT используются для проверки того, удовлетворяет ли конечная система спецификации ее предполагаемого поведения. [34] [ 35]
Решатели SAT являются основным компонентом, на котором строятся решатели теорий выполнимости по модулю (SMT), которые используются для таких задач, как планирование заданий , символьное выполнение , проверка моделей программ , верификация программ на основе логики Хоара и других приложений. [36] Эти методы также тесно связаны с программированием в ограничениях и логическим программированием .
В исследовании операций решатели SAT применялись для решения задач оптимизации и планирования. [37]
В теории общественного выбора решатели SAT использовались для доказательства теорем о невозможности. [38] Тан и Линь использовали решатели SAT для доказательства теоремы Эрроу и других классических теорем о невозможности. Гейст и Эндрисс использовали его для поиска новых невозможностей, связанных с расширениями множеств. Брандт и Гейст использовали этот подход для доказательства невозможности относительно стратегически защищенных турнирных решений . Другие авторы использовали эту технологию для доказательства новых невозможностей относительно парадокса неявки , половинчатой монотонности и вероятностных правил голосования . Брандл, Брандт, Питерс и Стрикер использовали его для доказательства невозможности стратегически защищенного, эффективного и справедливого правила для дробного общественного выбора . [39]
решатели SAT часто могут решать задачи с миллионами ограничений и сотнями тысяч переменных.