Sb99054
.pdf–всякийраз, когдамусороказываетсявзанимаемойимячейке, подбирает
исжигает его.
Агент формирования окружающего пространства (environment agent):
–является служебным агентом;
–впроцессеработысистемыслучайнымобразомдобавляетмусорвячейки пространства;
–при завершении работы системы очищает пространство от мусора.
Агент-менеджер (manager agent):
–является служебным агентом;
–обеспечивает запуск системы в одной из возможных рабочих конфигураций.
Для запуска рассматриваемой МАС необходимо следующее. 1. Запустить JCC (см. 8.1.4).
2. Раскрыть дерево каталогов jar-архива jadex-applications-bdi-2.4.jar
как показано на рис. 8.6 и выбрать элемент дерева Manager.agent.xml (или выбрать дерево каталогов jar-архива в левой части главного окна jadex- applications-bdi-2.4.jar -> jadex -> examples->garbagecollector -> GarbageCollector. application.xml).
Рис. 8.6. Окно управления Jadex
3.В выпадающем списке «Configuration» выбрать требуемую конфигурацию запуска;
4.Нажать кнопку «Start». На экране появится окно, представленное на рис. 8.7.
11
|
|
|
|
Рис. 8.7. Отображение работы агентов по сбору мусора |
||||||||
|
|
|
|
Исследовать |
|
|
|
|
|
|
|
|
|
|
|
|
пространство |
|
|
|
|
|
|
|
|
|
|
|
|
Идти в следующую |
|
|
|
|
|
|
|
|
|
|
|
|
ячейку |
|
|
|
|
|
|
|
|
|
|
|
|
Взять мусор |
|
|
|
|
Взять мусор |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
и сжечь его |
||||
|
|
|
|
|
|
|
|
|
||||
Агент-сборщик |
Положить |
Окружающее |
Агент-сжигатель |
|||||||||
мусора № 1-N |
мусор |
пространство |
мусора № 1-N |
Добавить мусор |
Очистить |
|
пространство |
||
в ячейку |
||
от мусора |
||
|
Создать агента |
Агент окружающего |
|
пространства |
Агент-менеджер
Рис. 8.8. Диаграмма вариантов использования МАС сборщиков мусора
12
Примечание. Аналогичным образом могут быть запущены другие примеры из пакета jadex-applications-bdi-2.4.jar. Исходные тексты для всех примеров находятся в каталоге: <каталог установки Jadex>\sources.zip\sources\ jadex-applications-bdi.
На рис. 8.8 представлена диаграмма вариантов использования для рассматриваемого примера.
Файл ADF с описанием агента-сборщика мусора:
<agent xmlns="http://jadex.sourceforge.net/jadex" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jadex.sourceforge.net/jadex http://jadex.sourceforge.net/jadex-0.96.xsd" name="GarbageCollector" package="jadex.examples.garbagecollector">
<imports> <import>jadex.runtime.*</import> <import>jadex.util.*</import> <import>jadex.*</import>
</imports>
<beliefs>
<!—- Объект(агент) обеспечивающий данные об окружении агента-мусорщика -->
<belief name="env" class="Environment"> <fact>
Environment.getInstance($agent.getType(), $agent.getName())
</fact>
</belief>
<!-- Текущая позиция агента в окружающем пространстве -->
<belief name="pos" class="Position"> <fact evaluationmode= "dynamic">
$beliefbase.env.getPosition($agent.getName()) </fact>
</belief>
<!—- Если в текущей ячейке (области) пространства есть мусор, то она помечается как «грязная» -->
<belief name="is_dirty" class="boolean"> <fact evaluationmode="dynamic">
$beliefbase.env.isDirty($beliefbase.pos)
13
</fact>
</belief>
<!-- Признак указывающий, что в текущий момент у агента уже есть собранный мусор и он не может взять больше
-->
<belief name="has_garbage" class="boolean"> <fact evaluationmode="dynamic">
$beliefbase.env.hasGarbage($agent.getName()) </fact>
</belief>
</beliefs>
<goals>
<!—- Цель: Взять собрать мусор и принести его к агенту-сжигателю мусора. Эта цель создается всякий раз когда агент находит мусор я ячейке(области) пространства -->
<achievegoal name="take"> <unique/> <creationcondition>
$beliefbase.is_dirty && !$beliefbase. env.isBurnerPresent($beliefbase.pos)
</creationcondition>
<deliberation>
<inhibits ref="check"/> </deliberation>
</achievegoal>
<!-- Цель: Исследовать пространство по определенному маршруту в поисках мусора -->
<performgoal name="check" exclude="never"/>
<!-- Цель: Идти на определенную ячейку поространства
-->
<achievegoal name="go">
<parameter name="pos" class="Position"/> </achievegoal>
<!-- Цель: Поднять мусор-->
<achievegoal name="pick" exclude="never" retrydelay="100">
<dropcondition> !$beliefbase.is_dirty &&
!$beliefbase.has_garbage
14
</dropcondition>
</achievegoal>
</goals>
<plans>
<!-- План: Взять мусор из ячейки, отнести его к агенту-сжигателю мусора и вернуться обратно-->
<plan name="take_plan"> <body class="TakePlan"/> <trigger>
<goal ref="take"/> </trigger>
</plan>
<!-- План: Обход местности по определенному маршруту и поиск мусора -->
<plan name="checking_plan"> <body class="CheckingPlan"/> <trigger>
<goal ref="check"/> </trigger>
</plan>
<!-- План: Поднять мусор --> <plan name="pickup_plan"> <body class="PickUpPlan"/>
<trigger>
<goal ref="pick"/> </trigger>
</plan>
<!-- План: Идти в заданную позицию --> <plan name="go_plan">
<parameter name="pos" class="Position"> <goalmapping ref="go.pos"/>
</parameter>
<body class="GoPlan"/> <trigger>
<goal ref="go"/> </trigger>
</plan>
</plans>
<configurations>
15
<configuration name="default"> <goals>
<!-- Начальная цель – поиск мусора --> <initialgoal ref="check"/>
</goals>
</configuration>
</configurations>
</agent>
Каждый файл ADF описывает одного агента и должен содержать корневой элемент agent, включающий нескольких блоков данных.
Блок configurations описывает возможные рабочие конфигурации агента. Каждая конфигурация описывается в отдельном xml-элементе configuration. В рассмотренном примере для агента-сборщика мусора определенаоднаконфигурация сзаданной начальной целью (initialgoal) агента– поиск мусора (check). Например:
<configurations>
<configuration name="default"> <goals>
<!-- Начальная цель – поиск мусора --> <initialgoal ref="check"/>
</goals>
</configuration>
</configurations>
Блок beliefs описывает возможные убеждения агента. Каждое убеждение (xml-элемент belief) имеет два обязательных атрибута:
–name – имя переменной для хранения убеждения;
–class – тип переменной.
Дляубеждениявозможныдочерниеxml-элементы, содержащиезаданные значения или методы языка программирования Java: fact – для одиночного значения, facts – длямножественныхзначений. Нижеприведенывозможные варианты задания убеждений.
Убеждение с изначально заданным значением:
<!-- Имя агента -->
<belief name="myName" class="String">
16
<fact>”GarbageCollector1”</fact>
</belief>
Убеждение с динамически изменяющимся значением (указывается с помощью атрибута evaluationmode):
<!-- Текущая позиция агента в окружающем пространстве -->
<belief name="pos" class="Position"> <fact evaluationmode="dynamic">
$beliefbase.env.getPosition($agent.getName()) </fact>
</belief>
Убеждение со значением, изменяемым с периодичностью, заданной в атрибуте updaterate:
<!-- Таймер обновляется каждые 10 секунд --> <belief name="timer" class="long" updaterate=
”10000”>
<fact>
System.currentTimeMillis()
</fact>
</belief>
Блок goals описывает цели агента. Каждая цель описывается в отдельном xml-элементе и соответствует одному из четырех типов целей: цель для выполнения (xml-элемент performgoal), цель для достижения (xml-элемент achievegoal), поисковая цель (xml-элемент querygoal) и цель для поддержания (xml-элемент maintaingoal).
Цель независимо от типа имеет несколько атрибутов и дочерних xmlэлементов, которые специфицируют жизненный цикл цели (см. рис. 8.2). Рассмотрим их более подробно.
Атрибут name задает название цели.
xml-элементы parameter и parameterset – определяют параметры цели с одиночным и множественным значением, соответственно. Например:
<!-- Цель: Переместиться в определенную ячейку пространства -->
<achievegoal name="go">
<parameter name="pos" class="Position"/> </achievegoal>
17
xml-элемент unique – признак уникальности. Если цель содержит данный элемент, то агент может иметь только одни экземпляр цели данного класса. Например, цель take уникальна для агента-сборщика мусора:
<achievegoal name="take"> <unique/>
...
</achievegoal>
xml-элементы creationcondition, contextcondition и dropcondition задают условия на создание, контекст выполнения и удаление цели (см. рис. 8.2). Например:
<!-- Цель: Поднять мусор-->
<achievegoal name="pick" exclude="never" retrydelay="100">
<dropcondition> !$beliefbase.is_dirty &&
!$beliefbase.has_garbage </dropcondition>
</achievegoal>
xml-элемент deliberation содержит названия целей в xml-элементе inhibits, которые будут переведены в состояние «временно приостановлено» suspended (см. рис. 8.2). Например:
<achievegoal name="take">
...
<deliberation>
<inhibits ref="check"/> </deliberation>
</achievegoal>
Блок plans содержит описания возможных планов агента. Каждое убеждение агента (xml-элемент belief) имеет следующие атрибуты и дочерние xml-элементы:
атрибут name – задает название плана;
xml-элементы parameter и parameterset определяют параметры плана с одиночным и множественным значением. Например:
<!-- План: Идти в заданную позицию --> <plan name="go_plan">
<parameter name="pos" class="Position">
18
<goalmapping ref="go.pos"/> </parameter>
...
</plan>
xml-элемент body – название Java-класса, в котором определена последовательность действий при выполнении плана. Например:
<plan name="go_plan">
...
<body class="GoPlan"/>
...
</plan>
В xml-элементe trigger перечисляются названия целей или событий, для которых может быть выполнен данный план.
Элемент imports содержит список импортируемых пакетов или классов Java. Например:
<imports> <import>jadex.runtime.*</import> <import>jadex.util.*</import> <import>jadex.*</import> <import>java.util.HashMap</import> <import>java.awt.*</import>
</imports>
Ниже представлен пример реализации в коде Java плана «Взять мусор из ячейки, отнести его к агенту-сжигателю мусора и вернуться обратно»:
package jadex.examples.garbagecollector; import jadex.runtime.*;
//Все планы агента Jadex должны наследовать базовый класс Plan
public class TakePlan extends Plan
{
//Обязательный метод, где описаны действия плана public void body()
{
Environment env = (Environment)getBeliefbase(). getBelief("env").getFact();
//Создать цель «Поднять мусор»
IGoal pickup = createGoal("pick");
19
dispatchSubgoalAndWait(pickup);
//Двигаться к агенту-сжигателю мусора
Position oldpos = env.getPosition(getAgentName()); IGoal go = createGoal("go"); go.getParameter("pos").setValue(env.getBurnerPosi-
tion());
dispatchSubgoalAndWait(go);
//Положить мусор env.drop(getAgentName());
//Вернуться обратно
IGoal goback = createGoal("go"); goback.getParameter("pos").setValue(oldpos); dispatchSubgoalAndWait(goback);
}
}
8.2.Порядок выполнения работы
1.Инсталлировать платформу Jadex и запустить Jadex Control Center.
2.В открывшемся окне JCC запустить приложения CleanWorld, DisasterManagement, GarbageCollector, HunterPrey, MarsWorld [7].
Поэкспериментировать с конфигурациями запуска приложений.
3.Распаковать исходные тексты из архива sources.zip. Открыть sources/jadex-applications-bdi/pom.xml в NetBeans. Выбрать одно приложение из перечисленных выше и изучить исходные тексты целей и планов агентов. Скомпилировать jar-файл.
8.3.Содержание отчета
1.Цель работы.
2.Документированные исходные тесты целей и планов для агентов выбранного приложения.
8.4.Вопросы для самопроверки
1.Какие типы целей могут быть у агента?
2.Какой класс является базовым для планов, какой метод является обязательным для реализации.
3.Как хранятся данные в агенте (beliefbase)?
4.Как запустить на исполнение приложение Jadex?
20