GOAL - это агент язык программирования для программирования когнитивные агенты. ЦЕЛЕВЫЕ агенты делают выбор действий исходя из своих убеждений и целей. Язык предоставляет основные строительные блоки для разработки и реализации когнитивных агентов с помощью программных конструкций, которые позволяют и облегчают манипулирование убеждениями и целями агента и структурируют его принятие решений. Язык предоставляет интуитивно понятную структуру программирования, основанную на здравом смысле или практическом мышлении.
Основные особенности GOAL включают:
Программа агента GOAL состоит из шести различных разделов, включая знания, убеждения, цели, правила действий, спецификации действий и правила восприятия, соответственно. Знания, убеждения и цели представлены на языке представления знаний, таком как Prolog, Программирование набора ответов, SQL (или Datalog ) или, например, язык определения домена планирования. Ниже мы проиллюстрируем компоненты программы агента GOAL с использованием Prolog.
Общая структура программы агента ЦЕЛИ выглядит следующим образом:
main:{ }
Код агента ЦЕЛИ, используемый для иллюстрации структуры агента ЦЕЛИ, - это агент, который может решать Блокирует мир проблем. Убеждения агента представляют текущее состояние мира блоков, тогда как цели агента представляют состояние цели. Раздел знаний, указанный ниже, содержит дополнительные концептуальные или предметные знания, связанные с мировым доменом блоков.
знание {блок (a), блок (b), блок (c), блок (d), блок (e), блок (f), блок (g). ясно (таблица). clear (X): - блок (X), а не (на (Y, X)). башня ([X]): - на (X, таблица). башня ([X, Y | T]): - на (X, Y), башня ([Y | T]). }
Обратите внимание, что все блоки, перечисленные в разделе знаний, снова появляются в разделе убеждений, поскольку положение каждого блока необходимо указать для характеристики полной конфигурации блоков.
верования {на (a, b), на (b, c), на (c, таблица), на (d, e), на (e, таблица), на (f, g), на (г, таблица). }
Все известные блоки также присутствуют в разделе целей, который определяет конфигурацию цели, которая повторно использует все блоки.
голы {на (a, e), на (b, таблица), на (c, таблица), на (d, c), на (e, b), на (f, d), на (г, таблица). }
Агент GOAL может иметь несколько целей одновременно. Эти цели могут даже противоречить друг другу, поскольку каждая из целей может быть реализована в разное время. Например, у агента может быть цель посмотреть фильм в кинотеатре, а потом побыть дома.
В ЦЕЛИ различаются разные понятия цели. примитивная цель - это утверждение, которое следует из целевой базы в сочетании с концепциями, определенными в базе знаний. Например, башня ([a, e, b])- это примитивная цель, и мы пишем goal (tower ([a, e, b])для обозначения этого. Изначально, tower ([a, e, b])также является целью достижения, поскольку агент не верит, что a находится на вершине e, e находится на вершине b и b находится на столе. Цели достижения - это примитивные цели, которые агент не считает имеющими место и обозначаются a-goal (tower ([a, e, b]). Это также полезно для быть в состоянии выразить, что цель была достигнута . goal-a (tower ([e, b])используется для выражения, например, что башня [ e, b]было достигнуто с блоком e поверх блока b. Можно определить как цели достижения, так и понятие достигнутой цели:
a-goal (formula) :: = цель (формула), не (бел (формула)) цель-а (формула) :: = цель (формула), бел (формула)
Существует значительная литература по определению концепции цели достижения в литературу по агентам (см. ссылки).
GOAL - язык программирования на основе правил е. Правила разбиты на модули. Главный модуль агента GOAL определяет стратегию выбора действий с помощью правил действий. Первое правило ниже гласит, что перемещение блока X поверх блока Y (или, возможно, стола) является вариантом, если такое перемещение является конструктивным, т.е. перемещает блок на место. Второе правило гласит, что перемещение блока X в таблицу является вариантом, если блок X неуместен.
основной модуль {программа {если цель (башня ([X, Y | T])), бел (башня ([Y | T])), то переместите (X, Y). если а-цель (башня ([X | T])), то переместите (X, стол). }}
Действия, такие как действие перемещения, использованное выше, задаются с использованием предварительных и постусловий в стиле STRIPS. Предварительное условие указывает, когда действие может быть выполнено (включено). Постусловие определяет последствия выполнения действия.
actionspec {move (X, Y) {pre {clear (X), clear (Y), on (X, Z), not (X = Y)} post {not (on (X, Z))), on (X, Y)}}
Наконец, модуль событий состоит из правил для обработки событий, таких как восприятия, полученные из среды. В приведенном ниже правиле указано, что для всех полученных восприятий, которые указывают, что блок X находится в блоке Y, а X, как полагают, находится на вершине Z, неравном Y, новый факт на (X, Y) должен быть добавлен к базе убеждений. и атом на (X, Z) должен быть удален.
модуль событий {программа {forall bel (восприятие (на (X, Y)), на (X, Z), а не (Y = Z)) вставляет (на (X, Y), а не ( на (X, Z))). }}
Язык программирования агентов GOAL связан, но отличается от других языков программирования агентов, таких как AGENT0, AgentSpeak, 2APL, Golog, JACK Intelligent Agents, Jadex и, например, Jason. Отличительной чертой GOAL является концепция декларативной цели. Цели ЦЕЛЕВОГО агента описывают то, чего агент хочет достичь, а не то, как этого достичь. В отличие от других языков, агенты GOAL привержены своим целям и удаляют цель только тогда, когда она полностью достигнута. GOAL предоставляет структуру программирования с упором на декларативное программирование и возможности рассуждения, необходимые когнитивным агентам.
Литература по понятию цели: