Программирование набора ответов
Программирование множества ответов ( ASP ) — это форма декларативного программирования, ориентированная на решение сложных (в первую очередь NP-трудных ) задач поиска . Он основан на семантике устойчивой модели (множества ответов) логического программирования . В ASP задачи поиска сводятся к вычислению устойчивых моделей, а решатели множества ответов для выполнения поиска используются — программы для генерации устойчивых моделей. Вычислительный процесс, используемый при разработке многих решателей множества ответов, является усовершенствованием алгоритма DPLL и, в принципе, всегда завершается (в отличие от оценки запроса Пролога , которая может привести к бесконечному циклу ).
В более общем смысле ASP включает в себя все приложения наборов ответов для представления знаний и рассуждений. [1] [2] и использование оценки запросов в стиле Пролога для решения проблем, возникающих в этих приложениях.
История
[ редактировать ]Ранним примером программирования набора ответов был метод планирования , предложенный в 1997 году Димопулосом, Небелем и Кёлером. [3] [4] Их подход основан на взаимосвязи между планами и стабильными моделями. [5] В 1998 году Сойнинен и Ниемеля [6] применил то, что теперь известно как программирование набора ответов, к проблеме конфигурации продукта . [4] В 1999 году термин «программирование множества ответов» впервые появился в книге «Парадигма логического программирования» как название сборника из двух статей. [4] Первая из этих статей определила использование решателей множества ответов для поиска как новую парадигму программирования . [7] В том же году Ниемеля также предложила «логические программы со стабильной семантикой модели» в качестве новой парадигмы. [8]
Язык программирования набора ответов AnsProlog
[ редактировать ]Lparse — это название программы, которая изначально была создана как базовый инструмент (интерфейс) для smodels решателя набора ответов . Язык, который принимает Lparse, теперь обычно называют AnsProlog. [9] сокращение от «Программирование набора ответов в логике» . [10] Теперь он используется таким же образом во многих других решателях наборов ответов, включая assat , clasp , cmodels , gNt , nomore++ и pbmodels . ( dlv является исключением; синтаксис программ ASP, написанных для dlv, несколько иной.)
Программа AnsProlog состоит из правил вида
<head> :- <body> .
Символ :-
("if") отбрасывается, если <body>
пусто; такие правила называются фактами . Самый простой вид правил Lparse — это правила с ограничениями .
Еще одна полезная конструкция, включенная в этот язык, — это выбор . Например, правило выбора
{p,q,r}.
говорит: выберите произвольно, какой из атомов включить в стабильную модель. Программа Lparse, содержащая это правило выбора и не содержащая других правил, имеет 8 стабильных моделей — произвольных подмножеств . Определение устойчивой модели было обобщено на программы с правилами выбора. [11] Правила выбора можно рассматривать также как сокращения пропозициональных формул в рамках семантики устойчивой модели . [12] Например, приведенное выше правило выбора можно рассматривать как сокращение для соединения трех формул « исключенного среднего »:
Язык Lparse позволяет нам также писать «ограниченные» правила выбора, такие как
1{p,q,r}2.
Это правило гласит: выберите хотя бы 1 из атомов , но не более 2. Смысл этого правила в семантике устойчивой модели представлен пропозициональной формулой
Границы мощности также можно использовать в тексте правила, например:
:- 2{p,q,r}.
Добавление этого ограничения в программу Lparse исключает стабильные модели, содержащие как минимум два атома. . Смысл этого правила можно представить пропозициональной формулой
Переменные (написанные с заглавной буквы, как в Прологе ) используются в Lparse для сокращения наборов правил, следующих одному и тому же шаблону, а также для сокращения наборов атомов в рамках одного и того же правила. Например, программа Lparse
p(a). p(b). p(c).
q(X) :- p(X), X!=a.
имеет то же значение, что и
p(a). p(b). p(c).
q(b). q(c).
Программа
p(a). p(b). p(c).
{q(X):-p(X)}2.
это сокращение от
p(a). p(b). p(c).
{q(a), q(b), q(c)}2.
Диапазон : имеет вид
(start..end)
где начало и конец — арифметические выражения с постоянным знаком. Диапазон — это сокращенное обозначение, которое в основном используется для совместимого определения числовых доменов. Например, факт
a(1..3).
это ярлык для
a(1). a(2). a(3).
Диапазоны также можно использовать в телах правил с той же семантикой.
Условный литерал имеет форму:
p(X):q(X)
Если расширение q
является {q(a1), q(a2), ..., q(aN)}
, приведенное выше условие семантически эквивалентно записи {p(a1), p(a2), ..., p(aN)}
на месте условия. Например,
q(1..2).
a :- 1 {p(X):q(X)}.
это сокращение от
q(1). q(2).
a :- 1 {p(1), p(2)}.
Создание стабильных моделей
[ редактировать ]Чтобы найти стабильную модель программы Lparse, хранящуюся в файле ${filename}
мы используем команду
% lparse ${filename} | smodels
Вариант 0 предписывает smodels найти все стабильные модели программы. Например, если файл test
содержит правила
1{p,q,r}2.
s :- not p.
затем команда выдает результат
% lparse test | smodels 0
Answer: 1
Stable Model: q p
Answer: 2
Stable Model: p
Answer: 3
Stable Model: r p
Answer: 4
Stable Model: q s
Answer: 5
Stable Model: r s
Answer: 6
Stable Model: r q s
Примеры программ ASP
[ редактировать ]Раскраска графа
[ редактировать ]Ан - раскраска графика это функция такой, что для каждой пары смежных вершин . Мы хотели бы использовать ASP для поиска -раскраска заданного графа (или определение того, что его не существует).
Это можно сделать с помощью следующей программы Lparse:
c(1..n).
1 {color(X,I) : c(I)} 1 :- v(X).
:- color(X,I), color(Y,I), e(X,Y), c(I).
Строка 1 определяет числа быть цветами. Согласно правилу выбора в строке 2, уникальный цвет должно быть присвоено каждой вершине . Ограничение в строке 3 запрещает присваивать вершинам один и тот же цвет. и если есть ребро, соединяющее их.
Если мы объединим этот файл с определением , такой как
v(1..100). % 1,...,100 are vertices
e(1,55). % there is an edge from 1 to 55
. . .
и запустите на нем smodels с числовым значением указанный в командной строке, то атомы вида в выводе smodels будет представлять собой -раскраска .
Программа в этом примере иллюстрирует организацию «генерация и тестирование», которая часто встречается в простых программах ASP. Правило выбора описывает набор «потенциальных решений» — простое расширенное множество решений данной задачи поиска. За ним следует ограничение, которое исключает все возможные неприемлемые решения. Однако процесс поиска, используемый smodels и другими решателями наборов ответов, не основан на методе проб и ошибок .
Большой щелчок
[ редактировать ]Кликой в графе называется множество попарно смежных вершин. Следующая программа Lparse находит клику размером в заданном ориентированном графе или определяет, что его не существует:
n {in(X) : v(X)}.
:- in(X), in(Y), X!=Y, not e(X,Y).
Это еще один пример организации «генерация и тестирование». Правило выбора в строке 1 «генерирует» все множества, состоящие из вершины. Ограничение в строке 2 «отсеивает» множества, не являющиеся кликами.
гамильтонов цикл
[ редактировать ]в Гамильтонов цикл ориентированном графе — это цикл , проходящий через каждую вершину графа ровно один раз. Следующая программа Lparse может использоваться для поиска гамильтонова цикла в заданном ориентированном графе, если он существует; мы предполагаем, что 0 — одна из вершин.
{in(X,Y)} :- e(X,Y).
:- 2 {in(X,Y) : e(X,Y)}, v(X).
:- 2 {in(X,Y) : e(X,Y)}, v(Y).
r(X) :- in(0,X), v(X).
r(Y) :- r(X), in(X,Y), e(X,Y).
:- not r(X), v(X).
Правило выбора в строке 1 «генерирует» все подмножества множества ребер. Три ограничения «отсеивают» подмножества, которые не являются гамильтоновыми циклами. Последний из них использует вспомогательный предикат (« достижим из 0"), чтобы запретить вершины, которые не удовлетворяют этому условию. Этот предикат определяется рекурсивно в строках 6 и 7.
Эта программа является примером более общей организации «генерировать, определять и тестировать»: она включает определение вспомогательного предиката, который помогает нам исключить все «плохие» потенциальные решения.
Анализ зависимостей
[ редактировать ]При обработке естественного языка анализ на основе зависимостей можно сформулировать как задачу ASP. [13] Следующий код анализирует латинское предложение «Puella pulchra in Villa linguam latinam Discit», «красивая девушка изучает латынь на вилле». Синтаксическое дерево выражается предикатами дуг , которые представляют зависимости между словами предложения. Вычисленная структура представляет собой линейно упорядоченное корневое дерево.
% ********** input sentence **********
word(1, puella). word(2, pulchra). word(3, in). word(4, villa). word(5, linguam). word(6, latinam). word(7, discit).
% ********** lexicon **********
1{ node(X, attr(pulcher, a, fem, nom, sg));
node(X, attr(pulcher, a, fem, abl, sg)) }1 :- word(X, pulchra).
node(X, attr(latinus, a, fem, acc, sg)) :- word(X, latinam).
1{ node(X, attr(puella, n, fem, nom, sg));
node(X, attr(puella, n, fem, abl, sg)) }1 :- word(X, puella).
1{ node(X, attr(villa, n, fem, nom, sg));
node(X, attr(villa, n, fem, abl, sg)) }1 :- word(X, villa).
node(X, attr(linguam, n, fem, acc, sg)) :- word(X, linguam).
node(X, attr(discere, v, pres, 3, sg)) :- word(X, discit).
node(X, attr(in, p)) :- word(X, in).
% ********** syntactic rules **********
0{ arc(X, Y, subj) }1 :- node(X, attr(_, v, _, 3, sg)), node(Y, attr(_, n, _, nom, sg)).
0{ arc(X, Y, dobj) }1 :- node(X, attr(_, v, _, 3, sg)), node(Y, attr(_, n, _, acc, sg)).
0{ arc(X, Y, attr) }1 :- node(X, attr(_, n, Gender, Case, Number)), node(Y, attr(_, a, Gender, Case, Number)).
0{ arc(X, Y, prep) }1 :- node(X, attr(_, p)), node(Y, attr(_, n, _, abl, _)), X < Y.
0{ arc(X, Y, adv) }1 :- node(X, attr(_, v, _, _, _)), node(Y, attr(_, p)), not leaf(Y).
% ********** guaranteeing the treeness of the graph **********
1{ root(X):node(X, _) }1.
:- arc(X, Z, _), arc(Y, Z, _), X != Y.
:- arc(X, Y, L1), arc(X, Y, L2), L1 != L2.
path(X, Y) :- arc(X, Y, _).
path(X, Z) :- arc(X, Y, _), path(Y, Z).
:- path(X, X).
:- root(X), node(Y, _), X != Y, not path(X, Y).
leaf(X) :- node(X, _), not arc(X, _, _).
Стандартизация языка и конкурс ASP
[ редактировать ]Рабочая группа по стандартизации ASP разработала стандартную спецификацию языка, названную ASP-Core-2. [14] к чему приближаются последние системы ASP. ASP-Core-2 — это эталонный язык для соревнований по программированию наборов ответов, в ходе которых решатели ASP периодически тестируются по ряду эталонных задач.
Сравнение реализаций
[ редактировать ]Ранние системы, такие как smodels, использовали обратный поиск для поиска решений. По мере развития теории и практики использования логических решателей SAT на базе решателей SAT был построен ряд решателей ASP, включая ASSAT и Cmodels. Они преобразовали формулу ASP в предложения SAT, применили решатель SAT, а затем преобразовали решения обратно в форму ASP. Более поздние системы, такие как Clasp, используют гибридный подход, используя алгоритмы, управляемые конфликтами, вдохновленные SAT, без полного преобразования в форму булевой логики. Эти подходы позволяют значительно повысить производительность, часто на порядок, по сравнению с более ранними алгоритмами поиска с возвратом.
Проект Potassco выступает в качестве зонтика для многих из представленных ниже систем, включая clasp , системы заземления ( gringo ), инкрементальные системы ( iclingo ), средства решения ограничений ( clingcon ), язык действий для компиляторов ASP ( coala ), реализации распределенного интерфейса передачи сообщений ( класпар ) и многие другие.
Большинство систем поддерживают переменные, но только косвенно, путем принудительного заземления, используя систему заземления, такую как Lparse или гринго в качестве внешнего интерфейса . Необходимость в обосновании может вызвать комбинаторный взрыв предложений; таким образом, системы, выполняющие заземление «на лету», могут иметь преимущество. [15]
Реализации программирования набора ответов, управляемые запросами, такие как система Galliwasp. [16] и с(КАСП) [17] вообще избегайте заземления, используя комбинацию разрешения и коиндукции .
Платформа | Функции | Механика | ||||||
---|---|---|---|---|---|---|---|---|
Имя | ТЫ | Лицензия | Переменные | Функциональные символы | Явные множества | Явные списки | Дизъюнктивная (правила выбора) поддержка | |
ASPeRiX. Архивировано 8 ноября 2016 г. в Wayback Machine. | Линукс | лицензия GPL | Да | Нет | оперативное заземление | |||
ОЧЕНЬ | Солярис | Бесплатное ПО | на базе SAT-солвера | |||||
Решатель набора ответов на застежку | Linux , MacOS , Windows | МОЯ лицензия | Да, в Клинго | Да | Нет | Нет | Да | инкрементный, основанный на SAT-решателе (нехороший, управляемый конфликтами) |
Cмодели | Линукс , Солярис | лицензия GPL | Требуется заземление | Да | инкрементный, основанный на SAT-решателе (нехороший, управляемый конфликтами) | |||
дифф-SAT | Linux , macOS , Windows ( виртуальная машина Java ) | МОЯ лицензия | Требуется заземление | Да | Вдохновлен SAT-решателем (бесполезно, вызвано конфликтом). Поддерживает решение вероятностных задач и выборку набора ответов. | |||
ДЛВ | Linux , MacOS , Windows [18] | бесплатно для академического и некоммерческого образовательного использования, а также для некоммерческих организаций [18] | Да | Да | Нет | Нет | Да | несовместим с Lparse |
ДЛВ-Комплекс | Linux , MacOS , Windows | лицензия GPL | Да | Да | Да | Да | построен на основе DLV и не совместим с Lparse | |
ГнТ | Линукс | лицензия GPL | Требуется заземление | Да | построен на основе моделей | |||
нет больше++ | Линукс | лицензия GPL | комбинированный литерал+основанный на правилах | |||||
Утконос | Линукс , Солярис , Винда | лицензия GPL | распределенный, многопоточный nomore++, smodels | |||||
Pbмодель | Линукс | ? | основанный на псевдобулевом решателе | |||||
Smodels | Linux , MacOS , Windows | лицензия GPL | Требуется заземление | Нет | Нет | Нет | Нет | |
Smodels-cc. Архивировано 15 ноября 2015 г. в Wayback Machine. | Линукс | ? | Требуется заземление | на базе SAT-солвера; Смодели с оговорками о конфликте | ||||
Как дела | Линукс | ? | на базе SAT-солвера |
См. также
[ редактировать ]- Логика по умолчанию
- Логическое программирование
- Немонотонная логика
- Пролог
- Стабильная семантика модели
Ссылки
[ редактировать ]- ^ Барал, Читта (2003). Представление знаний, рассуждения и декларативное решение проблем . Издательство Кембриджского университета. ISBN 978-0-521-81802-5 .
- ^ Гельфонд, Майкл (2008). «Наборы ответов» . Ин ван Хармелен, Франк; Лифшиц, Владимир; Портер, Брюс (ред.). Справочник по представлению знаний . Эльзевир. стр. 285–316. ISBN 978-0-08-055702-1 . в формате PDF. Архивировано 3 марта 2016 г. на Wayback Machine.
- ^ Димопулос, Ю.; Небель, Б. ; Кёлер, Дж. (1997). «Задачи планирования кодирования в немонотонных логических программах». В стали, Сэм; Алами, Рашид (ред.). Последние достижения в планировании ИИ: 4-я Европейская конференция по планированию, ECP'97, Тулуза, Франция, 24–26 сентября 1997 г., Материалы . Конспекты лекций по информатике: Конспекты лекций по искусственному интеллекту. Том. 1348. Спрингер. стр. 273–285. ISBN 978-3-540-63912-1 . как постскриптум
- ^ Jump up to: а б с Лифшиц, Владимир (13 июля 2008 г.). «Что такое программирование набора ответов?» (PDF) . Материалы 23-й Национальной конференции по искусственному интеллекту . 3 . АААИ Пресс: 1594–1597.
- ^ Субрахманиан, В.С.; Заниоло, К. (1995). «Связь стабильных моделей и областей планирования ИИ» . В Стерлинге, Леон (ред.). Логическое программирование: материалы двенадцатой международной конференции по логическому программированию . МТИ Пресс. стр. 233–247. ISBN 978-0-262-69177-2 . как постскриптум
- ^ Сойнинен, Т.; Ниемеля, И. (1998), Формализация знаний о конфигурации с использованием правил с выбором (Постскриптум) , Лаборатория обработки информации, Хельсинкский технологический университет
- ^ Марек, В.; Трушинский, М. (20 мая 1999 г.). «Стабильные модели и альтернативная парадигма логического программирования». В Апте, Кшиштоф Р. (ред.). Парадигма логического программирования: перспектива на 25 лет (PDF) . Спрингер. стр. 169–181. arXiv : cs/9809032 . ISBN 978-3-540-65463-6 .
- ^ Ниемеля, И. (ноябрь 1999 г.). «Логические программы со стабильной семантикой модели как парадигма программирования в ограничениях» (Postscript, gzipped) . Анналы математики и искусственного интеллекта . 25 (3/4): 241–273. дои : 10.1023/А:1018930122475 . S2CID 14465318 .
- ^ Крик, Том (2009). Супероптимизация: доказуемо оптимальная генерация кода с использованием программирования набора ответов (PDF) (доктор философии). Университет Бата. Досье 20352. Архивировано из оригинала (PDF) 4 марта 2016 г. Проверено 27 мая 2011 г.
- ^ Рохелио Давила. «АнсПролог, обзор» (PowerPoint) .
- ^ Ниемеля, И.; Саймонс, П.; Сойненен, Т. (2000). «Семантика стабильной модели правил ограничения веса» . В Гельфонде, Майкл; Леоне, Николь; Пфайфер, Джеральд (ред.). Логическое программирование и немонотонное рассуждение: 5-я Международная конференция, LPNMR '99, Эль-Пасо, Техас, США, 2–4 декабря 1999 г., материалы . Конспекты лекций по информатике: Конспекты лекций по искусственному интеллекту. Том. 1730. Спрингер. стр. 317–331. ISBN 978-3-540-66749-0 . как постскриптум
- ^ Феррарис, П.; Лифшиц, В. (январь 2005 г.). «Весовые ограничения как вложенные выражения». Теория и практика логического программирования . 5 (1–2): 45–74. arXiv : cs/0312045 . дои : 10.1017/S1471068403001923 . S2CID 5051610 . как постскриптум
- ^ «Разбор зависимостей» . Архивировано из оригинала 15 апреля 2015 г. Проверено 15 апреля 2015 г.
- ^ «Спецификация языка ввода ASP-Core-2» (PDF) . Проверено 14 мая 2018 г.
- ^ Лефевр, Клэр; Беатрикс, Кристофер; Стефан, Игорь; Гарсия, Лоран (май 2017 г.). «ASPeRiX, подход прямого связывания первого порядка для вычисления набора ответов *» . Теория и практика логического программирования . 17 (3): 266–310. arXiv : 1503.07717 . дои : 10.1017/S1471068416000569 . ISSN 1471-0684 . S2CID 2371655 .
- ^ Марпл, Кайл; Гупта, Гопал. (2012). «Galliwasp: целенаправленный решатель набора ответов». В Альберте, Эльвира (ред.). Синтез и преобразование логических программ, 22-й международный симпозиум, LOPSTR 2012, Левен, Бельгия, 18-20 сентября 2012 г., Пересмотренные избранные статьи . Спрингер. стр. 122–136.
- ^ Ариас, Дж.; Карро, М.; Салазар, Э.; Марпл, К.; Гупта, Г. (2018). «Программирование набора ответов с ограничениями без заземления» . Теория и практика логического программирования . 18 (3–4): 337–354. arXiv : 1804.11162 . дои : 10.1017/S1471068418000285 . S2CID 13754645 .
- ^ Jump up to: а б «Страница компании DLV System» . Компания DLVSYSTEM srl . Проверено 16 ноября 2011 г.