- •Введение в Разработку
- •Многоагентных систем
- •В среде Jason
- •Основы программирования на языке
- •© Мирэа, 2009 Введение
- •1. Основные понятия теории агентов
- •1.1. Понятие агента
- •1.2. Программные агенты и программные объекты
- •1.3. Агенты и экспертные системы
- •2. Методика анализа концептуальных структур действий в применении к описанию поведения агентов
- •3.Представление о языках коммуникации агентов
- •3.1. Язык kif
- •3.2. Язык kqml
- •4. Знакомство со средой jason
- •4.1. Что такое Jason?
- •4.2. Установка и настройка Jason
- •4.3 Запуск демонстрационных примеров
- •4.4 Основы программирования на языке AgentSpeak
- •4.4.1 Убеждения
- •4.4.2 Типы данных
- •4.4.3 Сильное и слабое отрицание
- •4.4.4 Цели
- •4.4.5 Планы
- •Имя события : Контекстные ограничения
- •Пример №1
- •Пример №2
- •Пример №3
- •Пример №4(a)
- •Пример №4(b)
- •Пример №4(с)
- •Пример №4(d)
- •Пример №4(e)
- •4.4.6 Операторы
- •4.4.7 Аннотации
- •Аннотации для убеждений
- •Аннотации для планов
- •4.4.8 Работа со списками
- •4.4.9 Общие рекомендации по составлению и расположению планов
- •4.5 Работа агента в среде Jason
- •4.6 Инструменты отладки мас в Jason
- •5. Выполнение лабораторных работ
- •5.1 Описание процесса
- •5.2 Пример выполнения лабораторных работ
- •5.2.1 Постановка задачи
- •5.2.2 Концептуальный анализ поведения агентов
- •5.2.3 Концептуальная модель задачи «Фастфуд»
- •5.2.4 Описание вспомогательных алгоритмов
- •5.2.5 Программная реализация
- •5.2.5.1 Программа агента «Генератор клиентов»
- •1. База убеждений
- •2. Планы по достижению целей (табл. 5)
- •5.2.5.2. Программа агента «Клиент»
- •1. База начальных убеждений
- •2. Планы по достижению целей (табл. 6)
- •5.2.5.3 Программа агента «Продавец»
- •1. База начальных убеждений
- •2. Планы по достижению целей (табл. 7)
- •5.2.5.4 Программа агента «Хранилище»
- •1. База начальных убеждений
- •2. Планы по достижению целей (табл. 8)
- •5.2.5.5 Программа агента «Повар»
- •1. База начальных убеждений
- •2. Планы по достижению целей (табл. 9)
- •5.2.5.6 Файл проекта мас «fastfood.Mas2j»
- •5.2.6 Исследование работоспособности мас
- •Эксперимент №1
- •Эксперимент №2
- •Эксперимент №3
- •5.2.7 Дополнительные задания
- •Заключение
- •Справочник по функциям среды jason Внутренние функции
- •2) Функция «.Send»
- •3) Функция «.My_name»
- •2) Функция «.Length»
- •3) Функция «.Min»
- •4) Функция «.Max»
- •5) Функция «.Member»
- •6) Функция «.Nth»
- •7) Функция «.Sort»
- •8) Функция «.Substring»
- •1) Функция «.Add_plan»
- •2) Функция «.Plan_label»
- •3) Функция «.Relevant_plans»
- •4) Функция «.Remove_plan»
- •1) Функция «.Current_intention»
- •2) Функция «.Desire»
- •2) Функция «.Ground»
- •3) Функция «.Literal»
- •4) Функция «.List»
- •5) Функция «.Number»
- •6) Функция «.String»
- •7) Функция «.Structure»
- •2) Функция «.Add_annot»
- •3) Функция «.At»
- •4) Функция «.Count»
- •5) Функция «.Create_agent»
- •6) Функция «.Kill_agent»
- •11) Функция «.Perceive»
- •12) Функция «.Random»
- •13) Функция «.StopMas»
- •14) Функция «.Wait»
- •15) Функция «.All_names»
- •Содержание
- •Введение в Разработку
2) Функция «.Plan_label»
Получает код плана данного агента по его метке. Имеет 2 параметра. Первый – переменная, в которую будет считан код плана, второй – метка плана в виде атома.
Примеры использования
a) .plan_label(P,p1): в переменную P будет считан план с меткой «p1», включая саму метку.
3) Функция «.Relevant_plans»
Получает список планов, относящихся к обработке заданного события. Используется, например, для обработки запроса «askHow». Имеет 2 параметра. Первый – имя отслеживаемого события, второй – имя переменной, в которую будет помещен список с кодами подходящих планов.
Примеры использования
а).relevant_plans("+!go(X,Y)",L): в переменную L будет помещен список с кодами планов для обработки события «+!go(X,Y)».
4) Функция «.Remove_plan»
Удаляет план или несколько планов из библиотеки планов агента. Обладает 2мя параметрами. Первый – метка или список меток планов, которые необходимо удалить. Второй – источник планов. Если второй параметр опущен, то предполагается, что источник удаляемых планов сам агент. Команда полезна для удаления планов, полученных в результате запроса «tellHow».
Примеры использования
a) .remove_plan(l1): удаляет план, обладающий меткой «l1» с аннотацией «[source(self)]».
b) .remove_plan(l1,bob): удаляет план, обладающий меткой «l1» с аннотацией «[source(bob)]».
c) .remove_plan([l1,l2,l3]): удаляет 3 плана «l1[source(self)]», «l2[source(self)]», и «l3[source(self)]».
d) .remove_plan([l1,l2,l3],bob): удаляет 3 плана, полученных от агента bob
«l1[source(bob)]», «l2[source(bob)]», и «l3[source(bob)]».
BDI-Функции
1) Функция «.Current_intention»
Возвращает описание текущих намерений агента. Полезно для случаев, когда агент должен проконтролировать собственные намерения.
Описание намерений имеет следующую форму.
intention(<id>,<стек намерений>), а каждое из намерений описывается так:
im(<метка плана>,<список операций плана>).
Например:
intention(1,
[
im("l__6",[".current_intention(I)"]),
im("l__5",[".fail"]),
im("l__4",["!g5(X)",".print(endg4)"]),
...
]).
Пример использования
a) .current_intention(X): в переменную Х будет помещено описание текущих намерений в соответствии в указанной выше структурой.
2) Функция «.Desire»
Проверяет, является ли аргумент желанием агента. Аргумент является желанием, если он отслеживается как событие по достижению цели «+!<desire >».
Пример использования
a) .desire(go(1,3)): возвращает true, если отслеживается событие «+!go(1,3)».
3) Функция «.drop_all_desires»
Сбрасывает все желание агента, включая те, которые перешли в стадию намерений (т.е. приняты на реализацию). Иначе говоря, очищается список зарегистрированных, но еще не обработанных событий, а также очищаются все стеки намерений.
Пример использования
a) .drop_all_desires.
4) Функция «.drop_all_events»
Обнуляет только все желания агента, не затрагивая намерения, т.е. необработанные события сбрасываются, а операции, принятые на выполнение, продолжают реализовываться.
Пример использования
а) .drop_all_events
5) Функция «.drop_all_intentions»
Обнуляет намерения агента, включая отложенные по причине ожидания, а также внутренние события, т.к. они были порождены обрабатываемыми намерениями.
Пример использования
a) .drop_all_intentions.
6) Функция «.drop_desire»
Сбрасывает желание агента, заданное аргументом, даже если оно уже перешло в стадию намерений. Аргумент представляет собой имя события.
Пример использования
a) .drop_desire(go(X,3)): удаляет все желания, подходящие под шаблон, например, «+!go(1,3)» вне зависимости от их источника, а также удаляет соответствующие стеки намерений.
7) Функция «.drop_event»
Удаляет заданное желание агента только из базы событий.
Пример использования
a) .drop_event(go(X,Y)): удаляет все желания, подходящие под шаблон, например, «+!go(1,3)» вне зависимости от их источника, не затрагивая тех, что перешли в стадию намерений.
8) Функция «.drop_intention»
Удаляет заданное намерение из базы намерений (включая отложенные намерения).
Пример использования
a) .drop_intention(go(1,3)).
9) Функция «.fail_goal»
Прерывает достижение цели, заданной цели аргументом, как если бы соответствующий план был прерван по причине ошибки. В результате генерируется событие отказа от цели.
Пример использования
a) .fail_goal(go(X,3)): прерывает достижение всех целей, подходящих под шаблон, например, «!go(1,3)». Генерируется событие отказа от цели, например, «-!get_gold(1,3)», которое в дальнейшем может быть обработано специальным планом.
10) Функция «.intend»
Проверяет, является ли аргумент намерением. Аргумент является намерением, если план с меткой, определяемой этим аргументом, находится на исполнении во множестве намерений.
Пример использования
a) .intend(go(1,3)): возвращает true, если план с отслеживаемым событием «+!go(1,3)» находится в множестве намерений агента.
11) Функция «.succeed_goal»
Функция обратная функции «.fail_goal». Прекращает намерения по достижению цели, заданной аргументом, как если бы эта цель была уже достигнута.
Пример использования
a) .succeed_goal(go(X,3)): прерывает достижение целей «!go(Х,3)», которые начинают считаться достигнутыми.
Функции определение типа термов
1) Функция «.atom»– проверяет, является ли аргумент атомом (высказыванием без отрицания), например «c». Числа, строки и свободные переменные не являются атомами.
Примеры использования
a) .atom(b(10)): возвращает false.
b) .atom(b): возвращает true.
c) .atom(~b): возвращает false.
d) .atom(10): возвращает false.
e) .atom("home page"): возвращает false.
f) .atom(X): возвращает true только если X конкретизировано атомом.
g) .atom(a(X)): возвращает false.
h) .atom(a[X]): возвращает false.
i) .atom([a,b,c]): возвращает false.
j) .atom([a,b,c(X)]): возвращает false.