Обсуждение программирования на основе абдуктивной логики и программирования набора ответов
Я хочу уточнить некоторые моменты, касающиеся программирования с использованием абдуктивной логики и программирования набора ответов.
Я с одноклассниками создаю игру. В этой игре есть "герои" (особые нпс). У героев есть цели и поведение.
(Все это основано на истории) Что бы я хотел, чтобы герои реагировали на действия игрока или другого героя, а затем решали, что делать дальше.
Преподаватель рассказал нам о работе под названием "RoleModel: на пути к формальной модели драматических ролей для генерации истории", в которой объясняется программирование абдуктивной логики. Благодаря моему исследованию я нашел программирование набора ответов.
Вопрос: Есть ли разница между парадигмой ALP и парадигмой ASP? Один лучше других для моих целей? Есть ли другой вариант?
3 ответа
Вы действительно задаете три вопроса. Я не компетентен, чтобы ответить на любой из них, но я все равно собираюсь разобраться с этим.
- Есть ли разница между парадигмой ALP и парадигмой ASP?
Да. ASP - это парадигма, в которой ваша поисковая задача превращается в модель, которую можно передать различным решателям. В статье, на которую вы ссылаетесь, в разделе 4.1 говорится, что они следуют парадигме ASP и одновременно используют дедуктивные и абдуктивные рассуждения. Таким образом, вы можете видеть, что дедуктивный и дедуктивный действуют как тактические решатели внутри более крупного процесса ASP.
Исходя из того, что я читал в Википедии, это хороший подход, потому что умозаключение заключается в предоставлении объяснений, а не логических последствий. Я мог видеть, как вы хотели бы этого в создании истории; "Мэри ненавидит Сью, поэтому Мэри убила Сью" - это дедукция, но "Мэри ненавидит Сью, потому что Сью наехала на собаку", больше похоже на похищение, основываясь на моем беглом чтении. Вы хотели бы, чтобы оба излагали историю, или она станет довольно скучной.
- Один лучше других для моих целей?
Все, что вы сказали о своих целях, это то, что вы делаете игру. Я не разработчик игр, но я уверен, уверяю вас, что ничего подобного не используется в типичной игре. Игровой ИИ - это целое поле. Я был бы шокирован, если бы какой-то из этих материалов использовался в основной игре.
Тем не менее, RoleModel показывает, что вы можете сделать это, и он использует оба, с ASP, контролирующим комбинированный процесс ALP/DLP. Мне кажется вероятным, что эти два понятия довольно разделимы, и, поскольку один может использовать другой, я думаю, они не находятся в строгой оппозиции друг другу. Если это сработало для игры RoleModel, то реальный вопрос не в том, можно ли это сделать, хорошая ли это идея, но подходит ли она для того, чего вы пытаетесь достичь? Если вы пытаетесь создать экшен-шутер, держу пари, что другие, более простые подходы сработают лучше; если вы пытаетесь создать богатую RPG, возможно, все будет хорошо.
- Есть ли другой вариант?
Наверное. Я бы исследовал ИИ для игр. Приоритеты достаточно разные, и я ожидаю, что их литература начинается в совершенно разных местах и идет в совершенно разных направлениях, но я могу ошибаться.
Любое логическое программирование, поддерживающее гипотетические рассуждения, может поддерживать 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
К вашему сведению: как уже упоминалось, некоторые системы для выполнения индуктивного и абдуктивного логического программирования используют системы ASP. Бесплатный пример с открытым исходным кодом - XHAIL https://github.com/stefano-bragaglia/XHAIL
Есть также статья, описывающая эту версию:
Брагалья С., Рэй О. (2015). Немонотонное обучение в больших биологических сетях. В: Дэвис Дж., Рамон Дж. (Ред.) Индуктивное логическое программирование. Конспект лекций в области компьютерных наук, том 9046. Springer, Cham
Можно утверждать, что Шерлок Холмс, на самом деле, известен своими умозаключениями, а не дедуктивностью... так что я думаю, что есть некоторая интересная область для детективной игры, использующей ALP.:).