Обсуждение абдуктивного логического программирования и программирования набора ответов

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

Я с некоторыми одноклассниками создаю игру. В этой игре есть "герои" (особые NPC). У героев есть цели и поведение.

(Все это зависит от сюжета) Что бы я хотел, чтобы герои реагировали на действия игрока или другого героя, а затем решали, что делать дальше.

Учитель рассказал нам о статье под названием «Ролевая модель: к формальной модели драматических ролей для создания историй», в которой объясняется программирование абдуктивной логики. Благодаря своим исследованиям я нашел Программирование набора ответов.

Вопрос: Есть ли разница между парадигмой ALP и парадигмой ASP? Один лучше другого для моих целей? Есть ли другой вариант?


person ssmoot    schedule 22.12.2016    source источник


Ответы (3)


Вы действительно задаете три вопроса. Я не имею права отвечать ни на один из них, но я все равно попробую.

  1. Есть ли разница между парадигмой ALP и парадигмой ASP?

Да. ASP — это парадигма, в которой ваша задача поиска превращается в модель, которую можно передать различным решателям. В статье, на которую вы ссылаетесь, в разделе 4.1 говорится, что они следуют парадигме ASP и используют дедуктивные и абдуктивные рассуждения одновременно. Таким образом, вы можете видеть, что абдуктивные и дедуктивные методы действуют как тактические решатели внутри более крупного процесса ASP.

Основываясь на том, что я прочитал в Википедии, это хороший подход, потому что абдуктивное рассуждение заключается в предоставлении объяснений, а не логических следствий. Я мог видеть, как вы хотели бы этого в создании историй; «Мэри ненавидит Сью, поэтому Мэри убила Сью» — это вывод, но «Мэри ненавидит Сью, потому что Сью задавила свою собаку» больше похоже на похищение, судя по моему беглому чтению. Вы бы хотели, чтобы оба конкретизировали историю, иначе она станет довольно скучной.

  1. Один лучше другого для моих целей?

Все, что вы сказали о своих целях, это то, что вы делаете игру. Я не разработчик игр, но я вполне уверен, уверяя вас, что ничего подобного не используется в типичной игре. Игровой ИИ — это целое поле. Я был бы шокирован, если бы что-то из этого было использовано в крупной игре.

Тем не менее, RoleModel показывает, что вы можете это сделать, и использует и то, и другое, при этом ASP контролирует комбинированный процесс ALP/DLP. Мне кажется вероятным, что эти два понятия вполне различимы, и, поскольку одно может использовать другое, я предполагаю, что они не находятся в строгом противоречии друг с другом. Если это сработало для ролевой модели, реальный вопрос не в том, можно ли это сделать, хорошая ли это идея, а в том, подходит ли она для того, чего вы пытаетесь достичь? Если вы пытаетесь создать экшн-шутер, могу поспорить, что другие, более простые подходы сработают лучше; если вы пытаетесь создать богатую RPG, возможно, все будет в порядке.

  1. Есть ли другой вариант?

Наверное. Я бы исследовал ИИ для игр. Приоритеты настолько разные, что я ожидаю, что их литература начинается в совершенно разных местах и ​​идет в совершенно разных направлениях, но я могу ошибаться.

person Daniel Lyons    schedule 23.12.2016

Любое логическое программирование, которое поддерживает гипотетические рассуждения, может поддерживать ALP. Поскольку ASP поддерживает гипотетические рассуждения, он также может поддерживать ALP. Гипотетическое рассуждение — это поиск, при котором временно предполагаются факты.

Со стандартным ядром ISO Prolog мы можем имитировать предположение факта с помощью следующего кода. Код оставляет точку выбора и работает некорректно, если есть разрез, поэтому специализированные системы все же нужны:

assumez(P) :- assertz(P).
assumez(P) :- retract(P), fail.

Теперь мы можем решить следующую абдуктивную задачу:

abducible :- (assumez(amount(glucose,low));assumez(amount(glucose,medium))),
         (assumez(amount(lactose,medium));assumez(amount(lactose,hi))).

feed(lactose) :- amount(glucose,low), amount(lactose,hi).
feed(lactose) :- amount(glucose,medium), amount(lactose,medium).

Возможный запрос выглядит следующим образом:

?- abducible, feed(lactose), listing(amount/2).

amount(glucose, low).
amount(lactose, hi).
Yes;

amount(glucose, medium).
amount(lactose, medium).
Yes ;

No

В приведенном выше решении используется обратная цепочка. Также может быть предоставлено решение для прямой цепочки и что-то, что ближе к операторам выбора ASP. Оператор выбора в ASP будет выполнять гипотетические варианты, мы используем только (;)/2 как оператор выбора:

:- use_module(library(minimal/delta)).

:- multifile abducible/0.
:- dynamic abducible/0, amount/2, feed/1.
:- forward feed/2.

post(amount(glucose,low));post(aamount(glucose,medium)) <= posted(abducible).
post(amount(lactose,medium));post(amount(lactose,hi)) <= posted(abducible).

post(feed(lactose)) <= posted(amount(glucose,low)), posted(amount(lactose,hi)).
post(feed(lactose)) <= posted(amount(glucose,medium)), posted(amount(lactose,medium)).

Возможный запрос выглядит следующим образом:

?- post(abducible), feed(lactose), listing(amount/2).

amount(glucose, low).
amount(lactose, hi).
Yes ;

amount(glucose, medium).
amount(lactose, medium).
Yes ;

No
person Mostowski Collapse    schedule 23.10.2018
comment
Интересный вопрос (на который у меня, к сожалению, нет времени в настоящее время). Я вижу это как: Абдукция = Как маркировать (только факты) абдуктивные предикаты с помощью истинного/ложного так, чтобы при добавлении в логическую программу последствия были правильно помечены как истинные, в то время как определенные инварианты (специальные логические выражения) сохранялись. Я полагаю, что на них можно было бы выпускать различные алгоритмы, от генетических до SAT-решателей. Но решатели ASP также делают это с меньшими ограничениями! У них есть логическая программа, включающая инварианты, и они пытаются найти любой набор фактов, выполняющих программу. Более общее, я думаю. - person David Tonhofer; 26.07.2020
comment
Похоже, я написал ответ до того, как у Jekejeke Minlog была библиотека модулей (minimal/asp). Это было бы более эффективно, чем использование только библиотеки модулей (минимальной/гипо). См. также: jekejeke .ch/idatab/doclet/prod/en/docs/15_min/10_docu/ - person Mostowski Collapse; 27.07.2020

К вашему сведению: как уже упоминалось, некоторые системы для выполнения индуктивного и абдуктивного логического программирования используют системы ASP. Бесплатным примером с открытым исходным кодом является XHAIL https://github.com/stefano-bragaglia/XHAIL.

Существует также документ, описывающий эту версию:

Брагалья С., Рэй О. (2015) Немонотонное обучение в больших биологических сетях. В: Дэвис Дж., Рамон Дж. (ред.) Индуктивное логическое программирование. Конспект лекций по информатике, том 9046. Спрингер, Чам

Можно утверждать, что Шерлок Холмс на самом деле известен своими абдуктивными, а не дедуктивными рассуждениями... так что я думаю, что есть интересные возможности для детективной игры с использованием ALP. :).

person user27815    schedule 23.10.2018