- •Введение в Разработку
 - •Многоагентных систем
 - •В среде 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»
 - •Содержание
 - •Введение в Разработку
 
Справочник по функциям среды jason Внутренние функции
Напоминаем, что вызов любой внутренней функции начинается с точки.
Функции коммуникации
Функция «.broadcast»
Посылает сообщение всем агентам. Первый аргумент – императив, второй – посылаемый литерал.
По-умолчанию команда использует сокращенную версию KQML, что, тем не менее, не исключает подключение новых императивов. Используются следующие императивы:
tell – сообщить получателю литерал;
untell – сообщить получателю, что передаваемый литерал уже не истинен;
achieve – просьба к получателю достичь указанной цели;
unachieved – просьба прекратить достижение цели;
askOne – реализует запрос информации одним агентом из базы убеждений другого. Запрашиваемое убеждение передается в виде предиката-шаблона, в котором требуется конкретизировать заданные переменные. При этом в качестве ответа ожидается только один вариант конкретизации. Запросивший агент ожидает ответа, приостанавливая свою работу, но время ожидания может быть и ограниченно.
askAll – запрос у получателя информации по заданному предикату-шаблону (ожидаются все возможные ответы);
tellHow – сообщить получателю план;
untellHow – сообщить получателю, что план не верен (обычно ожидается удаление плана из базы знаний получателя);
askHow – запрос всех планов для обработки события.
Следует помнить, что вся передаваемая между агентами информация автоматически всегда сопровождается аннотацией [source(A)], где A – имя агента отправителя, что позволяет получателю проверить источник сообщения.
Примеры использования
a) .broadcast(tell,value(10)). – Всем агентам сообщается предикат value(10).
b) .broadcast(achieve, who_is_last). – Всех агентов просят достичь цели «who_is_last».
2) Функция «.Send»
Посылает сообщение заданному агенту. Может иметь переменное число параметров в зависимости от используемого императива.
Первый параметр – имя агента-адресата сообщения, – может быть представлен индивидной константой, параметрическим предикатом, строкой или списком, в котором перечислены имена адресатов в одной из упомянутых форм.
Второй параметр – используемый императив (см. операцию «.broadcast»).
Третий – обычно содержание сообщения.
Примеры использования
a) .send(store, askOne, mealsInStore(Rest), mealsInStore(Rest)).
Здесь третий параметр это шаблон запрашиваемого убеждения, в котором необходимо конкретизировать переменную «Rest»; четвертый параметр – это место для записи полученного ответа – в данном случае это тот же самый предикат, хотя могла быть и просто локальная переменная плана. При наличии четвертого параметра агент будет ожидать ответа в этом же цикле моделирования. Если четвертый параметр опустить, то это будет означать, что получение незамедлительного ответа не принципиально для отправителя запроса, отправитель продолжит свою работу и будет обрабатывать полученный в будущем ответ стандартным способом перехвата события изменения базы убеждений (см. следующий пример).
Далее предположим, что агент отправитель это «jomi», а агент получатель – «rafael».
b) .send(rafael,askOne,value(beer,X)): «jomi» посылает запрос «value(beer,X)» агенту «rafael». При этом дальнейшее выполнение намерений агента «jomi» не приостанавливается. Когда «rafael» ответит на запрос, то «jomi» получит событие «+value(beer,10)[source(rafael)]».
.send(rafael,askOne,value(beer,X),A,2000): аналогично примеру «а)» с поправкой на «jomi» и «rafael-я» и той разницей, что «jomi» ждет ответа 2 секунды. Если по истечении этого времени ответ не получен, то в переменную «А» помещается «timeout».
с) .send(rafael,tell,value(10)): «jomi» посылает value(10) агенту «rafael». Литерал «value(10)[source(jomi)]» будет добавлен в базу убеждений «rafael-я», а также будет сгенерировано соответствующее событие.
d) .send(rafael,achieve,go(10,30): «jomi» посылает параметризованную цель «go(10,30)» «rafael-ю». Когда «rafael» получит данное сообщение, то в его очередь событий добавится «+!go(10,30)[source(jomi)]».
