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

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

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


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

 

package ExampleFIPAContractNet;

 

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", "ExampleFIPAContractNet.ContractNetInitiatorAgent", args1);

agent1.start();

AgentController agent2 = cc.createNewAgent("ResponderAgent1", "ExampleFIPAContractNet.ContractNetResponderAgent", null);

agent2.start();

AgentController agent3 = cc.createNewAgent("ResponderAgent2", "ExampleFIPAContractNet.ContractNetResponderAgent", null);

agent3.start();

}

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

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

}}


package ExampleFIPAContractNet;

import jade.core.Agent;

import jade.core.AID;

import jade.lang.acl.ACLMessage;

import jade.proto.ContractNetInitiator;

import jade.domain.FIPANames;

import java.util.Date;

import java.util.Vector;

import java.util.Enumeration;

 

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

public class ContractNetInitiatorAgent extends Agent

{

private int nResponders;

// добавить поведение, связанное с

// протоколом FIPA-ContractNet, перед началом работы

protected void setup()

{

Object[] args = getArguments();

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

{

nResponders = args.length;

System.out.println(

"Trying to delegate dummy-action to one out of "+nResponders+

" responders.");

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

ACLMessage msg = new ACLMessage(ACLMessage.CFP);

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

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

msg.setProtocol(FIPANames.InteractionProtocol.FIPA_CONTRACT_NET);

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

msg.setContent("dummy-action");

 

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

addBehaviour(new ContractNetInitiator(this, msg)

{

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

protected void handlePropose(ACLMessage propose, Vector v)

{

System.out.println("Agent "+ propose.getSender().getName()+" proposed "+propose.getContent());

}

 

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

protected void handleRefuse(ACLMessage refuse)

{

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

}

// вызывается, если получено сообщение 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");

nResponders--;

}

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

protected void handleAllResponses(Vector responses, Vector acceptances)

{

if (responses.size() < nResponders)

System.out.println(

"Timeout expired: missing "+(nResponders – responses.size())+

" responses");

int bestProposal = -1;

AID bestProposer = null;

ACLMessage accept = null;

Enumeration e = responses.elements();

while (e.hasMoreElements())

{

ACLMessage msg = (ACLMessage)e.nextElement();

if (msg.getPerformative() == ACLMessage.PROPOSE)

{

ACLMessage reply = msg.createReply();

reply.setPerformative(ACLMessage.REJECT_PROPOSAL);

acceptances.addElement(reply);

int proposal = Integer.parseInt(msg.getContent());

if (proposal > bestProposal)

{

bestProposal = proposal;

bestProposer = msg.getSender();

accept = reply;

}

}

}

if (accept!= null)

{

System.out.println("Accepting proposal "+ bestProposal+" from responder "+bestProposer.getName());

accept.setPerformative(ACLMessage.ACCEPT_PROPOSAL);

}

}

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

protected void handleInform(ACLMessage inform)

{

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

" successfully performed the requested action");

}

});

}

else

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

}

}

 


package ExampleFIPAContractNet;

import jade.core.Agent;

import jade.lang.acl.ACLMessage;

import jade.lang.acl.MessageTemplate;

import jade.proto.ContractNetResponder;

import jade.domain.FIPANames;

 

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

public class ContractNetResponderAgent extends Agent

{

// добавить поведение, связанное с

// протоколом FIPA-ContractNet, перед началом работы

protected void setup()

{

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

" waiting for CFP...");

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

MessageTemplate template = MessageTemplate.and(

MessageTemplate.MatchProtocol(FIPANames.InteractionProtocol.FIPA_CONTRACT_NET),

MessageTemplate.MatchPerformative(ACLMessage.CFP));

 

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

addBehaviour(new ContractNetResponder(this, template)

{

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

protected ACLMessage handleCfp(ACLMessage cfp)

{

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

": CFP received from "+cfp.getSender().getName()+". Action is "+ cfp.getContent());

int proposal = evaluateAction();

if (proposal > 2)

{

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

": Proposing "+proposal);

ACLMessage propose = cfp.createReply();

propose.setPerformative(ACLMessage.PROPOSE);

propose.setContent(String.valueOf(proposal));

return propose;

}

else

{

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

": Refuse");

ACLMessage refuse = cfp.createReply();

refuse.setPerformative(ACLMessage.REFUSE);

return refuse;

}

}

 

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

// сообщение Accept-Proposal

protected ACLMessage handleAcceptProposal(

ACLMessage cfp, ACLMessage propose,ACLMessage accept)

{

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

": Proposal accepted");

if (performAction())

{

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

": Action successfully performed");

ACLMessage inform = accept.createReply();

inform.setPerformative(ACLMessage.INFORM);

return inform;

}

else

{

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

": Action execution failed");

ACLMessage failure = accept.createReply();

failure.setPerformative(ACLMessage.FAILURE);

return failure;

}

}

 

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

// сообщение Reject-Proposal

protected void handleRejectProposal(ACLMessage cfp, ACLMessage propose, ACLMessage reject)

{

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

": Proposal rejected");

}

});

}

 

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

private int evaluateAction() {return (int)(Math.random()*10);}

 

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

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

}

 


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


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

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