Читайте также: |
|
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 |