Введение

В информатике GSAT и WalkSAT — это локальные алгоритмы поиска для решения задач булевой выполнимости. Оба алгоритма работают с формулами булевой логики, представленными в конъюнктивной нормальной форме или преобразованными в неё. Они начинают с присвоения каждой переменной в формуле случайного значения. Если присвоение удовлетворяет всем дизъюнктам, алгоритм завершается, возвращая это присвоение. В противном случае, выбирается переменная и её значение меняется на противоположное, после чего процесс повторяется до тех пор, пока все дизъюнкты не будут удовлетворены. WalkSAT и GSAT различаются методами выбора переменной для изменения. GSAT вносит изменение, которое минимизирует количество неудовлетворенных дизъюнктов в новом присвоении, либо с некоторой вероятностью выбирает переменную случайным образом. WalkSAT сначала выбирает неудовлетворенный дизъюнкт текущим присвоением, а затем меняет значение переменной внутри этого дизъюнкта. Выбор дизъюнкта осуществляется случайным образом среди неудовлетворенных. Переменная выбирается так, чтобы изменение её значения привело к наименьшему числу ранее удовлетворенных дизъюнктов, ставших неудовлетворенными, с некоторой вероятностью случайного выбора одной из переменных. При случайном выборе WalkSAT гарантированно имеет хотя бы один шанс из числа переменных в дизъюнкте исправить текущее некорректное присвоение. При выборе переменной, предположительно оптимальной, WalkSAT требует меньше вычислений, чем GSAT, поскольку рассматривает меньше вариантов. Оба алгоритма могут перезапускаться с новым случайным присвоением, если решение не найдено за слишком долгое время, чтобы выйти из локальных минимумов числа неудовлетворенных дизъюнктов. Существует множество версий GSAT и WalkSAT. WalkSAT оказался особенно полезным при решении задач выполнимости, полученных в результате преобразования из задач автоматизированного планирования. Подход к планированию, преобразующий задачи планирования в задачи булевой выполнимости, называется satplan. MaxWalkSAT — это вариант WalkSAT, предназначенный для решения задачи взвешенной выполнимости, в которой каждому дизъюнкту соответствует вес, и цель состоит в том, чтобы найти такое присвоение (которое может удовлетворять или не удовлетворять всю формулу), которое максимизирует общий вес удовлетворенных дизъюнктов.