Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Пример реализации работы с протоколом FIPA-Subscribe для мультиагентной системы в программной среде JADE

Пример реализации онтологии для мультиагентной системы в программной среде JADE | Пример реализации детерминированного конечного автомата для мультиагентной системы в программной среде JADE | Пример реализации последовательности действий для мультиагентной системы в программной среде JADE | Пример реализации параллельных действий для мультиагентной системы в программной среде JADE | Пример реализации работы со службами AMS и DF для мультиагентной системы в программной среде JADE | Пример реализации работы с протоколом FIPA-Request для мультиагентной системы в программной среде JADE |


Читайте также:
  1. Boot (англ. загрузка. Пример: основной загрузочный сектор) -вирусы
  2. D.1. Примеры уязвимостей
  3. F48.1 Синдром деперсонализации-дереализации
  4. I. Задания для самостоятельной работы
  5. I. Задания для самостоятельной работы
  6. I. Задания для самостоятельной работы
  7. I. Задания для самостоятельной работы

 

package ExampleFIPASubscribe;

 

import jade.Boot;

import jade.core.Profile;

import jade.core.Runtime;

import jade.core.ProfileImpl;

import jade.wrapper.ContainerController;

import jade.wrapper.AgentController;

 

// Главная программа

public class Main

{

public Main() {}

 

// Запуск агентов получателя и отправителя

public static void main(String[] args)

{

// Загрузка JADE-системы

String arg[] = {"-gui"};

Boot boot=new Boot(arg);

// Создание агентного контейнера (для локального хоста)

Profile p = new ProfileImpl();

p.setParameter(Profile.MAIN_HOST, "1-fcd36d9673f14");

p.setParameter(Profile.MAIN_PORT, "1099");

p.setParameter(Profile.CONTAINER_NAME, "MyContainer");

Runtime rt = Runtime.instance();

ContainerController cc = rt.createAgentContainer(p);

// Создание и запуск агентов получателя и отправителя,

// которые содержатся в главном контейнере

try

{

Object args1[]={"ResponderAgent1","ResponderAgent2"};

AgentController agent1 = cc.createNewAgent("InitiatorAgent", "ExampleFIPASubscribe.SubscribeInitiatorAgent", args1);

agent1.start();

AgentController agent2 = cc.createNewAgent("ResponderAgent1", "ExampleFIPASubscribe.SubscribeResponderAgent", null);

agent2.start();

AgentController agent3 = cc.createNewAgent("ResponderAgent2", "ExampleFIPASubscribe.SubscribeResponderAgent ", null);

agent3.start();

}

// Обработка исключительной ситуации

catch(Exception e) {e.printStackTrace();}

}}


package ExampleFIPASubscribe;

import jade.core.Agent;

import jade.core.AID;

import jade.lang.acl.ACLMessage;

import jade.proto.SubscriptionInitiator;

import jade.domain.FIPANames;

import java.util.Date;

import java.util.Vector;

// агент-инициализатор

public class FIPASubscribeInitiatorAgent extends Agent

{

private int nResponders;

 

// добавить поведение, связанное с протоколом FIPA-Subsribe,

// перед началом работы

protected void setup()

{

Object[] args = getArguments();

if (args!= null && args.length > 0)

{

nResponders = args.length;

System.out.println("Requesting dummy-action to "+ nResponders+" responders.");

// Подготовить сообщение Request

ACLMessage msg = new ACLMessage(ACLMessage. SUBSCRIBE);

for (int i = 0; i < args.length; ++i)

msg.addReceiver(new AID((String) args[i], AID.ISLOCALNAME));

msg.setProtocol(FIPANames.InteractionProtocol.FIPA_SUBSCRIBE);

msg.setReplyByDate(new Date(System.currentTimeMillis()+ 10000));

msg.setContent("dummy-action");

 

// создание поведения

addBehaviour(new SubscriptionInitiator(this, msg)

{

// вызывается, если получено сообщение Agree

protected void handleAgree(ACLMessage agree)

{

System.out.println("Agent "+ agree.getSender().getName()+

" agreed to perform the requested action");

cancel(agree.getSender(),false);

}

// вызывается, если получено сообщение Refuse

protected void handleRefuse(ACLMessage refuse)

{

System.out.println("Agent "+ refuse.getSender().getName()+

" refused to perform the requested action");

nResponders--;

}

// вызывается, если получено сообщение Inform

protected void handleInform(ACLMessage inform)

{

System.out.println("Agent "+ inform.getSender().getName()+

" successfully performed the cancel action");

cancellationCompleted(inform.getSender());

}

// вызывается, если получено сообщение Failure

protected void handleFailure(ACLMessage failure)

{

if (failure.getSender().equals(myAgent.getAMS()))

System.out.println(

"Responder does not exist");

else

System.out.println("Agent "+ failure.getSender().getName()+

" failed to perform the cancel action");

}

// вызывается, если все ответы собраны

protected void handleAllResponses(

Vector notifications)

{

if (notifications.size() < nResponders)

System.out.println(

"Timeout expired: missing "+(nResponders - notifications.size())+

" responses");

}

});

}

else

System.out.println("No responder specified.");

}

}

 


package ExampleFIPASubscribe;

import jade.core.Agent;

import jade.core.AID;

import jade.lang.acl.ACLMessage;

import jade.lang.acl.MessageTemplate;

import jade.proto.SubscriptionResponder;

import jade.domain.FIPANames;

 

// агент-участник

public class FIPASubscribeResponderAgent extends Agent

{

// добавить поведение, связанное с протоколом FIPA-Subsribe,

// перед началом работы

protected void setup()

{

System.out.println("Agent "+getLocalName()+

" waiting for requests...");

// Подготовить шаблон сообщения

MessageTemplate template = MessageTemplate.and(

MessageTemplate.MatchProtocol(

FIPANames.InteractionProtocol.FIPA_SUBSCRIBE),

MessageTemplate.or(

MessageTemplate.MatchPerformative(ACLMessage.SUBSCRIBE),

MessageTemplate.MatchPerformative(ACLMessage.CANCEL)));

 

// создание поведения

addBehaviour(new SubscriptionResponder(this, template)

{

// вызывается, если получено сообщение Subsribe

protected ACLMessage handleSubscription(

ACLMessage request)

{

System.out.println("Agent "+getLocalName()+

": SUBSCRIBE received from "+request.getSender().getName()+

". Action is "+request.getContent());

if (checkAction())

{

System.out.println("Agent "+getLocalName()+

": Agree");

ACLMessage agree = request.createReply();

agree.setPerformative(ACLMessage.AGREE);

return agree;

}

else

{

System.out.println("Agent "+getLocalName()+

": Refuse");

ACLMessage refuse = request.createReply();

refuse.setPerformative(ACLMessage.REFUSE);

return refuse;

}

}

 

// вызывается, если получено сообщение Cancel

protected ACLMessage handleCancel(ACLMessage cancel)

{

if (performAction())

{

System.out.println("Agent "+getLocalName()+

": Cancel successfully performed");

ACLMessage inform = cancel.createReply();

inform.setPerformative(ACLMessage.INFORM);

return inform;

}

else

{

System.out.println("Agent "+getLocalName()+

": Cancel failed");

ACLMessage failure = cancel.createReply();

failure.setPerformative(ACLMessage.FAILURE);

return failure;

}

}

});

}

 

// согласиться или отвергнуть с заданной вероятностью

private boolean checkAction() {return (Math.random()>0.2);}

 

// выполнить действие с заданной вероятностью

private boolean performAction() {return (Math.random()>0.2);}

}

 


Дата добавления: 2015-11-14; просмотров: 51 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Пример реализации работы с протоколом FIPA-ContractNet для мультиагентной системы в программной среде JADE| Пример реализации работы с различными схемами и абстрактными дескрипторами онтологии для мультиагентной системы в программной среде JADE

mybiblioteka.su - 2015-2024 год. (0.013 сек.)