Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Sb99054

.pdf
Скачиваний:
9
Добавлен:
13.02.2021
Размер:
898.08 Кб
Скачать

всякийраз, когдамусороказываетсявзанимаемойимячейке, подбирает

исжигает его.

Агент формирования окружающего пространства (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