Читайте также: |
|
package ExampleFIPARequest;
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", "ExampleFIPARequest.FIPARequestInitiatorAgent", args1);
agent1.start();
AgentController agent2 = cc.createNewAgent("ResponderAgent1", "ExampleFIPARequest.FIPARequestResponderAgent", null);
agent2.start();
AgentController agent3 = cc.createNewAgent("ResponderAgent2", "ExampleFIPARequest.FIPARequestResponderAgent", null);
agent3.start();
}
// Обработка исключительной ситуации
catch(Exception e) {e.printStackTrace();}
}}
package ExampleFIPARequest;
import jade.core.Agent;
import jade.core.AID;
import jade.lang.acl.ACLMessage;
import jade.proto.AchieveREInitiator;
import jade.domain.FIPANames;
import java.util.Date;
import java.util.Vector;
// агент-инициализатор
public class FIPARequestInitiatorAgent extends Agent
{
private int nResponders;
// добавить поведение, связанное с протоколом FIPA-Request,
// перед началом работы
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.REQUEST);
for (int i = 0; i < args.length; ++i)
msg.addReceiver(new AID((String) args[i], AID.ISLOCALNAME));
msg.setProtocol(FIPANames.InteractionProtocol.FIPA_REQUEST);
msg.setReplyByDate(new Date(System.currentTimeMillis()+ 10000));
msg.setContent("dummy-action");
// создание поведения
addBehaviour(new AchieveREInitiator(this, msg)
{
// вызывается, если получено сообщение Inform
protected void handleInform(ACLMessage inform)
{
System.out.println("Agent "+ inform.getSender().getName()+
" successfully performed the requested action");
}
// вызывается, если получено сообщение Refuse
protected void handleRefuse(ACLMessage refuse)
{
System.out.println("Agent "+ refuse.getSender().getName()+
" refused to perform the requested action");
nResponders--;
}
// вызывается, если получено сообщение 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 requested action");
}
//вызывается, если все извещающие сообщения собраны
protected void handleAllResultNotifications(
Vector notifications)
{
if (notifications.size() < nResponders)
System.out.println(
"Timeout expired: missing "+ (nResponders – notifications.size())+ " responses");
}
});
}
else
System.out.println("No responder specified.");
}
}
package ExampleFIPARequest;
import jade.core.Agent;
import jade.core.AID;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.MessageTemplate;
import jade.proto.AchieveREResponder;
import jade.domain.FIPANames;
// агент-участник
public class FIPARequestResponderAgent extends Agent
{
// добавить поведение, связанное с протоколом FIPA-Request,
// перед началом работы
protected void setup()
{
System.out.println("Agent "+getLocalName()+
" waiting for requests...");
// Подготовить шаблон сообщения
MessageTemplate template = MessageTemplate.and(
MessageTemplate.MatchProtocol(
FIPANames.InteractionProtocol.FIPA_REQUEST), MessageTemplate.MatchPerformative(ACLMessage.REQUEST));
// создание поведения
addBehaviour(new AchieveREResponder(this, template)
{
// вызывается, если было послано сообщение Request
protected ACLMessage handleRequest(ACLMessage request)
{
System.out.println("Agent "+getLocalName()+
": REQUEST 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;
}
}
// вызывается, если нет посланных ответов или
// ответом было сообщение Agree
protected ACLMessage prepareResultNotification(ACLMessage request, ACLMessage response)
{
if (performAction())
{
System.out.println("Agent "+getLocalName()+
": Action successfully performed");
ACLMessage inform = request.createReply();
inform.setPerformative(ACLMessage.INFORM);
return inform;
}
else
{
System.out.println("Agent "+getLocalName()+
": Action failed");
ACLMessage failure = request.createReply();
inform.setPerformative(ACLMessage.FAILURE);
return failure;
}
}
});
}
// согласиться или отвергнуть с заданной вероятностью
private boolean checkAction() {return (Math.random()>0.2);}
// выполнить действие с заданной вероятностью
private boolean performAction() {return (Math.random()>0.2);}
}
Дата добавления: 2015-11-14; просмотров: 43 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Пример реализации работы со службами AMS и DF для мультиагентной системы в программной среде JADE | | | Пример реализации работы с протоколом FIPA-ContractNet для мультиагентной системы в программной среде JADE |