Введение

Парадигма программирования, ориентированная на сложные задачи поиска. Программирование на основе множеств ответов (ASP) — это форма декларативного программирования, ориентированная на сложные (преимущественно NP-трудные) задачи поиска. Она основана на семантике стабильных моделей (множеств ответов) логического программирования. В ASP задачи поиска сводятся к вычислению стабильных моделей, а для их решения используются решатели множеств ответов — программы для генерации стабильных моделей. Вычислительный процесс, применяемый при разработке многих решателей множеств ответов, является развитием алгоритма DPLL и, как правило, всегда завершается (в отличие от вычисления запросов в Prolog, которое может привести к бесконечному циклу). В более широком смысле, ASP охватывает все применения множеств ответов для представления знаний и логического вывода, а также использование оценки запросов в стиле Prolog для решения задач, возникающих в этих областях.

Большая группа

Клика в графе — это набор попарно смежных вершин. Следующая программа Lparse находит клику заданного размера в заданном ориентированном графе или определяет, что такая клика не существует: n {in(X) : v(X)}. : in(X), in(Y), X!=Y, not e(X,Y). Это ещё один пример организации типа "сгенерировать и проверить". Правило выбора в первой строке "генерирует" все множества, состоящие из вершин. Ограничение во второй строке "отсеивает" множества, которые не являются кликами.

Гамильтоновский цикл

Гамильтонов цикл в ориентированном графе — это цикл, проходящий через каждую вершину графа ровно один раз. Следующая программа Lparse может быть использована для поиска гамильтонова цикла в заданном ориентированном графе, если он существует; мы предполагаем, что 0 является одной из вершин. {в(X,Y)} : e(X,Y). : 2 {в(X,Y) : e(X,Y)}, v(X). : 2 {в(X,Y) : e(X,Y)}, v(Y). r(X) : в(0,X), v(X). r(Y) : r(X), в(X,Y), e(X,Y). : не r(X), v(X). Правило выбора в строке 1 "генерирует" все подмножества множества ребер. Три ограничения "отсеивают" подмножества, которые не являются гамильтоновыми циклами. Последнее из них использует вспомогательный предикат ("достижим из 0") для исключения вершин, не удовлетворяющих этому условию. Этот предикат определяется рекурсивно в строках 6 и 7. Эта программа является примером более общей организации "сгенерировать, определить и проверить": она включает определение вспомогательного предиката, который помогает нам отбросить все "неподходящие" потенциальные решения.

Языковая стандартизация и конкурс ASP

Рабочая группа по стандартизации ASP разработала стандартную спецификацию языка под названием ASP Core 2, к которой стремятся современные системы ASP. ASP Core 2 является референсным языком для соревнований по программированию ответами (Answer Set Programming Competition), на которых решатели ASP периодически тестируются на наборе эталонных задач.

Сравнение реализации

Ранние системы, такие как smodels, использовали метод перебора с возвратом для поиска решений. По мере развития теории и практики решателей булевой выполнимости (SAT), ряд решателей ASP были построены на основе решателей SAT, включая ASSAT и Cmodels. Они преобразовывали формулу ASP в пропозиции SAT, применяли решатель SAT, а затем преобразовывали решения обратно в форму ASP. Более современные системы, такие как Clasp, используют гибридный подход, применяя алгоритмы, управляемые конфликтами и вдохновленные SAT, без полного преобразования в булеву логическую форму. Эти подходы позволяют значительно повысить производительность, часто на порядок, по сравнению с более ранними алгоритмами перебора с возвратом. Проект Potassco выступает в качестве зонтичной организации для многих систем, включая clasp, системы заземления (gringo), инкрементальные системы (iclingo), решатели ограничений (clingcon), компиляторы языка действий в ASP (coala), распределенные реализации с использованием интерфейса передачи сообщений (claspar) и многие другие. Большинство систем поддерживают переменные, но только косвенно, посредством принудительного заземления, используя систему заземления, такую как Lparse или gringo, в качестве фронтенда. Необходимость заземления может привести к комбинаторному взрыву дизъюнктов; следовательно, системы, выполняющие заземление "на лету", могут иметь преимущество. Реализации программирования на основе множеств ответов, управляемые запросами, такие как система Galliwasp и s(CASP), полностью избегают заземления, используя комбинацию резолюции и коиндукции.

Механические особенности платформы

Имя ОС Лицензия Переменные Функциональные символы Явные множества Явные списки Поддержка дизъюнктивных (выборочных) правил
ASPeRiX Linux GPL Заземление "на лету"
ASSAT Solaris Freeware На основе решателя SAT
Clasp Answer Set Solver Linux, macOS, Windows MIT License Инкрементальный, вдохновленный решателем SAT (nogood, управляемый конфликтами)
Cmodels Linux, Solaris GPL Инкрементальный, вдохновленный решателем SAT (nogood, управляемый конфликтами)
diff Linux, macOS, Windows (виртуальная машина Java) MIT License Вдохновленный решателем SAT (nogood, управляемый конфликтами). Поддерживает решение вероятностных задач и выборку множеств ответов
DLV Linux, macOS, Windows Бесплатный для академического и некоммерческого образовательного использования, а также для некоммерческих организаций Не совместим с Lparse
DLV Complex Linux, macOS, Windows GPL Построен на основе DLV — не совместим с Lparse
GnT Linux GPL Построен на основе smodels
nomore++ Linux GPL Основан на комбинации литералов и правил
Platypus Linux, Solaris, Windows GPL Распределенный, многопоточный, основан на nomore++ и smodels
Pbmodels Linux? Псевдо-булев решатель
Smodels Linux, macOS, Windows GPL
Smodels cc Linux? На основе решателя SAT; smodels с дизъюнктами конфликтов
Sup Linux? На основе решателя SAT