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

Главная

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

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

Форум

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

Карта сайта

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

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


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

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

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

Страницы [ 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 ]

 

// Повідомлення «узгодження контракту»
else if (m.getAct().eqюаlsIgnoreCase(«MAKE-CONTRACT»))
{
String group = m.getContent().toString();
display(«Received offer: «+group);
if (hasGUI()) message.setBackground(Color.green);
/* Створення групи та запит ролі для проведення
резервування/продажу квитка */
createGroup(tруe,»travel»,group,null,null);
requestRole(«travel»,group,»service»,null);
}
// Повідомлення «підтвердження контракту»
else if (m.getAct().eqюаlsIgnoreCase(«VALIDATE»)){
display(«Validating contract OK»);
if (hasGUI()) message.setBackground(Color.magenta);
sendMessage(m.getSender(),
new ACLMessage(«ACCEPT-CONTRACT»));
if (hasGUI()) {
pause(4000);
message.setBackground(Color.lightGray);
}
display(«Ticket: «+комpetence+» to «+thepoint);
}
}
// Життедіяльність агента
public void live()
{
// Очікування та обробка отриманих повідомлень
while (tруe) {
Message m = waitNextMessage();
if (m instanceof ACLMessage)
handleMessage((ACLMessage)m);
}
}
}
5.3. Агент-посередник
/*
* Broker.java — Travel, a simple demo application
*/
/* Імпортуємо бібліотеки класів, що використовуються:*/
import madkit.kernel.*;
import madkit.lib.graphics.*;
import madkit.lib.messages.ACLMessage;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
/* Наведений нижче клас містить пропоновану ціну перевізника; він використовується посередником для визначення найкращої пропозиції серед запропонованих. */
class BidAnswer {
AgentAddress bidder;
int value;
BidAnswer(AgentAddress b, int v){bidder = b; value = v;}
int getValue(){return value;}
AgentAddress getBidder(){return bidder;}
}
/*Створюємо клас Посередник, підклас класу Агент:*/
public class Broker extends Agent implements ActionListener
{
// Визначення змінних
Vector bidders = new Vector();
BidAnswer[] answers;
int contract = 0;
String contractID=««;
String kernelID=««;
JButton b;
int cpt=0;
AgentAddress client;
boolean pause = false;
public void enterPause()
{
pause = tруe;
b.setBackground(Color.red);
b.repaint();
while (pause)
pause(200);
}
// Ініціалізація користувацького інтерфейсу
public void initGUI()
{
JPanel p = new JPanel(new BorderLayout());
OPanel o = new OPanel();
p.add(«Center»,o);
b = new JButton(«Next step»);
b.addActionListener(this);
p.add(«South»,b);
setGUIObject(p);
setOutputWriter(o.getOut());
}
public void actionPerformed(ActionEvent e)
{
pause=false;
b.setBackground(Color.gray);
}
// Активація агента
public void activate()
{
println(«Broker ready»);
// Створення та під’єднання до груп та ролей
createGroup(tруe,»travel»,»travel-providers»,null,null);
createGroup(tруe,»travel»,»travel-clients»,null,null);
requestRole(«travel»,»travel-providers», «broker»,null);
requestRole(«travel»,»travel-clients», «broker»,null);
/* Визначення адреси ядра (використовується для створення унікального номеру контракту) */
kernelID=new String(getAddress().getKernel().toString());
}
// Обробка повідомлень
public void handleMessage(ACLMessage m)
{ String product=null;
// Повідомлення — запит клієнта
if (m.getAct().eqюаlsIgnoreCase(«REQUEST»)){
println(«Receiving client request»);
enterPause();
product = m.getContent().toString();
client = m.getSender();
// Відбір агентів з потрібним продуктом
AgentAddress[] bidders=getAgentsWithRole(«travel»,»travel-providers», product+»-provider»);
/* Перевірка наявності агентів з потрібним продуктом; у разі відсутності агентів Посередник повідомляє про це Клієнта та переходить в режим очікування наступного повідомлення. */
if (bidders.length==0){
println(«Not found providers of « + product);
sendMessage(client, new ACLMessage(«NO-PROVIDERS»));
return;
}
println («Found providers of «+product);
cpt = bidders.length;
answers = new BidAnswer[cpt];
println («Transmitting requests...»);
// Створення повідомлення до відібраних перевізників із запитом ціни
ACLMessage req=new ACLMessage(«REQUEST-FOR-BID»,
product);
// Відправдлення створеного вище повідомлення
broadcastMessage(«travel»,»travel-providers», product+»-provider»,req);
println («Waiting for offers..»);
}
// Повідомлення — пропозиції перевізників
else if (m.getAct().eqюаlsIgnoreCase(«BID»)){
receiveBid(m);
}
}

  1. // Життедіяльність агента

public void live()
{
// Очікування на повідомлення
while (tруe)
{
Message m = waitNextMessage();
// Обробка повідомлення
if (m instanceof ACLMessage)
handleMessage((ACLMessage)m);
else
System.err.println(«ERROR: invalid message type: «+ m);
}
}
// Обробка пропозицій — відповідей перевізників
protected void receiveBid(ACLMessage m){
println(«Received an offer of « + m.getContent() + « from « + m.getSender());
cpt--;
answers[cpt]=new BidAnswer(m.getSender(),((Integer) new Integer
(m.getContent().toString())).intValue());
if (cpt <= 0)
bestContract();
}
// Вибір кращої пропозиції (нижчої ціни)
void bestContract()
{
AgentAddress best = null;
int bestoffer;
println(«Selecting best offer from « + answers.length + « proposals»);
enterPause();
bestoffer=answers[0].getValue();
best=answers[0].getBidder();
for (int i=0;i<answers.length;i++){
println(«:: best: « + bestoffer+», value: « + answers[i].getValue());
if (answers[i].getValue() < bestoffer) {
best=answers[i].getBidder();
bestoffer=answers[i].getValue();
}
}
if (best != null)
{
println(«Chosen provider:»+best);
println(« avec «+bestoffer+» F»);
// Визначення номеру контракту
contract++;
contractID=« # «+contract+» thру Broker «+new String(get
Address().getLocalID().toString())+» at «+kernelID;
println(«Contract»+contractID);
println(«Sending provider confirmation»);
enterPause();
// Передача інформації щодо контракту перевізнику
sendMessage(best,
new ACLMessage(«MAKE-CONTRACT»,»contract-»+contractID));
pause(100);
// Передача інформації щодо контракту клієнту
println(«Sending client confirmation»);
enterPause();
sendMessage(client,
new ACLMessage(«MAKE-CONTRACT»,»contract-»+contractID));
}
}
}
5.4. Компіляція агентів
Створений код необхідно зберегти у файлах з розширенням .java у каталозі <Madkit>/tutorial/<MyAgents>. Туди ж переписати файли, на які є посилання в коді — у нас це графічні файли з розширенням .gif. Тепер до використання агента в середовищі Madkit залишився один крок, а саме — компіляція та копіювання файлу .jar. Найкраще оформити це у вигляді пакетного файлу MS-DOS (.bat):
rem Формуємо класи Java
javac -classpath..\..\libs\madkit\madkit.jar *.java
rem Формуємо бібліотеку.jar
jar cf diftravelagents.jar *.class *.gif
rem Копіюємо результат у автозавантаження Madkit
copy diftravelagents.jar..\..\autoload
5.5. Завантаження агентів
Після цього завантажуємо MadKit та в дереві відкриваємо пап­ку з нашими агентами (рис. 6.5).

Рис. 6.5. Дерево клієнтських агентів
На рис. 6.6 можна побачити процес роботи агентів.
Для роботи в мережі необхідно викликати агента вбудованого Комmunicator (Agents>Комmunicator) та вказати по черзі IP комп’ютерів, з якими потрібно встановити зв’язок (рис. 6.7). Пам’ятайте, що на комп’ютері, з яким Ви маєте намір зв’язатись, також повинен бути завантажений агент Комmunicator.

Рис. 6.6. Робота агентів

Рис. 6.7. Встановлення зв’язку
з комп’ютером у мережі
Для підключення до спільноти «travel» у мережі необхідно на цьому комп’ютері запустити агента, що входить до цієї спільноти, або власноруч поставити відмітку в діалозі (рис. 6.8).

Рис. 6.8. Підключення до спільнот в мережі
На рис. 6.9 відображено робочий стіл, під’єднаний до мережі, з брокером, який працює з віддаленими агентами.

Рис. 6.9. Робота в мережі
з віддаленими агентами


6.4. Завдання для перевірки знань

    • Що таке програмний агент?
    • Прокласифікуйте програмних агентів.
    • Для вирішення яких задач програмні агенти можуть використовуватися у віртуальних організаціях?
    • Які технології забезпечують функціонування програмних агентів?
    • Назвіть приклади інструментальних засобів для розробки мультиагентних систем.
    • Вкажіть чотири складових агента в MadKit.
    • Вкажіть призначення складової агента activate().
    • Вкажіть призначення складової агента end().
    • Вкажіть особливості класу Agent порівняно з батьківським класом.
    • Яким чином може бути представлена інформація для того, щоб її могли використовувати програмні агенти?

Страницы [ 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-2022 BPK Group.