лучшие книги по экономике
Главная страница

Главная

Замовити роботу

Последние поступления

Форум

Создай свою тему

Карта сайта

Обратная связь

Статьи партнёров


Замовити роботу
Книги по
алфавиту

Б
В
Г
Д
Е
Ж
З
И
К
Л
М
Н
О

ІНФОРМАЦІЙНІ ТЕХНОЛОГІЇ ВІРТУАЛЬНИХ ОРГАНІЗАЦІЙ

Страницы [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ]
[ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ 21 ] [ 22 ] [ 23 ] [ 24 ] [ 25 ] [ 26 ] [ 27 ] [ 28 ] [ 29 ] [ 30 ] [ 31 ] [ 32 ]
[ 33 ] [ 34 ] [ 35 ] [ 36 ] [ 37 ] [ 38 ] [ 39 ] [ 40 ] [ 41 ] [ 42 ] [ 43 ] [ 44 ] [ 45 ] [ 46 ] [ 47 ] [ 48 ] [ 49 ] [ 50 ]

 

Агент також може бути знищений за допомогою метода killAgent(). Але знищити агента цим методом може лише агент, який його викликав, або агент сам себе.
Обмін повідомленнями
Message — стандартний клас для обміну інформацією в MadKit. Цей клас визначає лише такі речі, як відправник, отримувач, або час відправлення, так що головним чином використовуються спеціалізовані підкласи класу Message. Отримувачі та відправники повідомлень ідентифікуються завдяки їх унікальній адресі AgentAdress.
MadKit не нав’язує якийсь стандартний механізм взаємодії. Такий механізм може бути визначений розробником окремо, або вбудований у специфічну бібліотеку моделей агентів.
MadKit забезпечує роботу визначених видів повідомлень типу StringMessage, XMLMesssage і ActMessage. На базі останнього визначені, як підкласи, ACLMessage і KQMLMessage.
Відправлення повідомлень
sendMessage(AgentAdress, <повідомлення>) виконує базову, низькорівневу операцію відправлення повідомлення і передає повідомлення за вказаною адресою агента. Поле «Відправник» задається автоматично ядром. Адреса агента може бути отримана через іншого агента, але частіше є результатом запиту до групи з указанням ролі.
Існує також високорівнева версія, для якої необхідно знати тільки групу та роль отримувача повідомлення. Є також можливість відправити повідомлення багатьом адресатам орієнтуючись на параметри група та роль — broadcastMessage(<група>, <роль>, <повідомлення>), або broadcastMessage(<спільнота>, <група>, <роль>, <повідомлення>) (в першому випадку параметр <спільнота> вважається рівним «public»).
Наприклад:

AgentAddress otherAgent = getAgentWithRole(«travel», «contract-net», «bidder»);
sendMessage(otherAgent, new ContractMessage(«your-offer?»));

broadcastMessage(«travel», «marketgroup», «provider», new ACTMessage(«ask-for-bid»,»travel-proposal»)).
Отримання повідомлень
Прийняті повідомлення розміщуються ядром у скриньку пові­домлень агента. Вони там зберігаються без пріорітетів за методом FIFO (перший надійшов — перший оброблений). Є два низькорівневих запити для опрацювання повідомлень в агентах. Запит isMessageBoxEmpty() повертає «false», якщо у черзі є непрочитані повідомлення. Метод nextMessage() повертає перше непрочитане повідомлення та видаляє його зі скриньки повідомлень.
Наприклад:

if (!isMessageBoxEmpty())
{
Message m = nextMessage();
println(«The sender was: «+ m.getSender());
}

Необхідно зауважити, що окремі класи агентів можуть додавати власні методи для полегшення роботи з повідомленнями.
Управління групами та ролями
Групи та ролі завжди доступні для агента і агент може виконувати відносно них інформаційні запити та запити дії (табл. 6.1).
Таблиця 6.1
API ГРУП/РОЛЕЙ

 

Запити дії

Інформаційні запити

Групи

createGroup(…), leaveGroup(…)

getAvaibleКомmunites(…), getExistingGroups(…), getMyGroups(…), isGroup(…), isКомmunity(…)

Ролі

requestRole(…), leaveRole(…)

GetMyRoles(…), getExistingRoles(…), isRole(…), getAgentsWithRole(…), getAgentWithRole(…)

В API групі як параметр використовується назва групи (тип String); у запитах стосовно ролі обов’язковими є параметри: назва групи на назва ролі (тип String).
Нижче наведено опис перелічених у табл. 1 запитів:
int createGroup(String d, String c, String g, String s, GroupIdentifier a)
int createGroup(String d, String g, String s, GroupIdentifier a)
Цей запит створює групу з назвою g в спільноті с (якщо параметр відсутній, в спільноті «public»). Якщо логічний параметр d вказано tруe — група є розподіленою, в іншому випадку група є локальною (тобто її агенти не видно для віддалених ядер). Параметр s використовується для опису загальної структури групи, але ця функція знаходиться в стадії розробки. Параметр а це ідентифікатор групи, тобто об’єкт, який впроваджує механізм захисту та авторизації, котрий спілкується з агентом до того, як дозволити агенту увійти до групи.
Наприклад:
createGroup(tруe,»myКомmunity»,»myGroup»,null,null)
createGroup(false,»myGroup»,null,null)
У першому випадку ми створили розподілену групу myGroup у спільноті myКомmunity без опису та елемента авторизації. В другому випадку ми створили локальну групу myGroup у спільноті public без опису та елемента авторизації.
int requestRole(String c, String g, String r, Object m)
int requestRole(String g, String r, Object m)
Поточний агент робить запит на виконання ролі r в групі g спільноти c (якщо спільнота не вказана, то в спільноті «public»). Параметр m це так звана картка членства, котру агент може використати для входу до групи та отримання запитаної ролі; цей параметр може приймати значення null якщо група g не має механізму захисту та авторизації.
Запит може повертати наступні значення:
1: операція пройшла успішно;
-1: у доступі відмовлено;
-2: цей агент вже виконує запитану роль;
-3: вказана група не існує;
-4: вказана спільнота не існує.
Наприклад:
requestRole(«myКомmunity»,»myGroup»,»player»,null)
void leaveRole(String c, String g, String r)
void leaveRole(String g, String r)
Агент відмовляється від виконання ролі r в групі g спільноти c (якщо спільнота не вказана, то в спільноті «public»). Якщо цей агент виконує тільки одну роль — r — в групі g, він також покидає групу.
void leaveGroup(String c, String g)
void leaveGroup(String g)
Агент виходить з групи g спільноти c (якщо спільнота не вказана, то в спільноті «public»).
boolean isКомmunity(String c)
Повертає «tруe», якщо спільнота існує, тобто в цій спільності існує ядро (представлене агентом SiteAgent).
boolean isGroup(String c, String g)
boolean isGroup(String g)
Повертає «tруe», якщо група g існує в спільноті с (якщо спільнота не вказана, то в спільноті «public»).
boolean isRole(String c, String g, String r)
boolean isRole(String g, String r)
Повертає «tруe», якщо роль r існує в групі g спільноти с (якщо спільнота не вказана, то в спільноті «public»). В іншому випадку повертає «false».
String[] getMyGroups(String c)
String[] getMyGroups()
Повертає масив рядків з назвами груп, членом яких є даний агент. Групи беруться зі спільноти с (якщо спільнота не вказана, то зі спільноти «public»).
String[] getExistingGroups(String c)
String[] getExistingGroups()
Повертає масив рядків з назвами груп, які належать до спільноти с (якщо спільнота не вказана, то до спільноти «public»).
String[] getMyRoles(String c, String g)
String[] getMyRoles(String g)
Повертає масив рядків з назвами всіх ролей, які виконує даний агент в групі g. Групи беруться зі спільноти с (якщо спільнота не вказана, то зі спільноти «public»).
String[] getExistingRoles(String c, String g)
String[] getExistingRoles(String g)
Повертає масив рядків з назвами всіх ролей, які існують в групі g. Групи беруться зі спільноти с (якщо спільнота не вказана, то зі спільноти «public»). При використанні необхідно пам’ятати, що цю інформацію може отримати лише агент, який входить до групи g.
String[] getAvailableКомmunities()
Повертає масив рядків із назвами всіх спільнот, до яких входить поточне ядро (через агент SiteAgent). За угодою містить тільки один елемент, спільноту «public».
AgentAddress[] getAgentsWithRole(String c, String g, String r)
AgentAddress[] getAgentsWithRole(String g, String r)
Повертає масив елементів AgentAdress, що містить адреси всіх агентів, які виконують ролі r в групі g. Групи беруться зі спільноти с (якщо спільнота не вказана, то зі спільноти «public»). При використанні необхідно пам’ятати, що цю інформацію може отримати лише агент, який входить до групи g.
Наприклад:

AgentAddress[] agList = getAgentsWithRole(«myКомmunity», «myGroup», «aRole»);
for (int i=0;i<agList.length;i++)

sendMessage(agList[i],new StringMessage(«Hello, world!»));
AgentAddress getAgentWithRole(String c, String g, String r)
Повертає одного агента, взятого навмання з переліку, який повертає getAgentsWithRole(…).
Графічний інтерфейс
Графічна модель MadKit базується на незалежних графічних компонентах, використовуючи специфікацію Java Beans для стан­дартної версії. Кожний агент сам відповідальний за свій власний графічний інтерфейс у кожному аспекті (представлення, обробка подій, дії...). Інтерфейсом агента може бути простий текстовий діалог, складна конструкція, заснована на багатьох різних елемен­тах управління вікном, або ж вбудований програмний модуль. «Графічна оболонка» (зазвичай, нею виступає робочий стол «MadKit») запускає ядро та налаштовує інтерфейси для різних агентів та керує ними в глобальному GUI — графічному користувацькому інтерфейсі (наприклад: кожний агент має власне вікно, або відображений на глобальному робочому просторі, або комбінований з інтерфейсом іншого агента тощо).
Так як графічна оболонка — це класичний програмний модуль, він може бути вбудований в агента для максимальної гнучкості, і це дозволяє контролювати інтерфейси інших агентів звичайним агентом, який може бути частиною будь-якого сценарію взаємодії.
Процедура
Призначення інтерфейсу до агента це досить проста процедура.
Визначається метод initGUI(). Ця функція автоматично викликається ядром під час створення агента, якщо зареєстрована графічна оболонка.
Викликається метод setGUIObject(…) з бажаним інтерфейсом у якості параметру. Найкраще це зробити в частині агента initGUI().
Є також два додаткових запити: getGUIObject() повертає інтерфейс, який в поточний час зв’язаний з агентом; метод hasGUI() надає можливість перевірити, чи працює агент в режимі GUI (тобто чи надає платформа графічну оболонку).
Наприклад:
protected void initGUI()
{
JLabel myLabel = new JLabel(«Ulysses»);
setGUIObject(myLabel);
}
Це створить мітку «Ulysses» як екземпляр класу JLabel, та задасть її як графічний інтерфейс агента.


Зверніть увагу, що в описі вказано також типи параметрів запиту (String, int, Object тощо) і тип значення, що його повертає запит.

Страницы [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ]
[ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ 21 ] [ 22 ] [ 23 ] [ 24 ] [ 25 ] [ 26 ] [ 27 ] [ 28 ] [ 29 ] [ 30 ] [ 31 ] [ 32 ]
[ 33 ] [ 34 ] [ 35 ] [ 36 ] [ 37 ] [ 38 ] [ 39 ] [ 40 ] [ 41 ] [ 42 ] [ 43 ] [ 44 ] [ 45 ] [ 46 ] [ 47 ] [ 48 ] [ 49 ] [ 50 ]


ВНИМАНИЕ! Содержимое сайта предназначено исключительно для ознакомления, без целей коммерческого использования. Все права принадлежат их законным правообладателям. Любое использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие или полученные в связи с использованием содержимого сайта.
© 2007-2019 BPK Group.