2016-06-30 23 views
0

Ich arbeite an Jade für mehrere Agenten-Plattform in meinem Projekt.Jade Java Agent Kommunikation

Ich habe einen Hauptbehälter und Agent Container, die Agenten enthält.

ich Daten von Agent zu Agent Container oder Hauptbehälter senden möchten ..

Da mein Agent ein Client und mein Hauptbehälter ist, wird ein Server sein.

In der Jade-Architektur habe ich verstanden, dass Agent-Container Agenten enthalten wird.

Ist das möglich?

Ich fragte mich, ob es Apis gibt, Daten unter Agenten zu senden.

Vielen Dank im Voraus

Antwort

0

Ich bin nicht sicher, was es ist, dass Sie versuchen zu erreichen. Wer ist der Endempfänger der ACLMessage, die Sie vom JADE-Agenten senden? Sind das alle Agenten, die sich im Zielcontainer befinden?

Nur um klar zu stellen, ein Container ist im Wesentlichen eine Adresse, in der Agenten residieren können, es ist keine Entität an sich, die Nachrichten posten und empfangen kann. Innerhalb des JADE-Frameworks verfügen Agents über einen 'Posteingang' für ACL-Nachrichten, im Grunde ein BlockingQueue-Objekt, das eine Liste empfangener Nachrichten enthält. Der Agent ist in der Lage, seine eigene Liste zu beobachten und sie so zu behandeln, als ob sein Lebenszyklus fortschreitet. Container verfügen nicht über diese Fähigkeit.

ACLMessages können durch Hinzufügen von Empfängern und anderen Details auf bestimmte Agenten gerichtet werden. Ein Agent, der Nachrichten wird recieving können für bestimmte ACLMessages hören durch eine MessageTemplate Verwendung, wo Sie gezielt Nachrichten auswählen können aus dem ‚Posteingang‘ des Agenten basierend auf Übereinstimmungskriterien, zum Beispiel:

Messagetemplate mt = MessageTemplate.MatchPerformative(ACLMessage.INFORM); 
ACLMessage msg = myAgent.receive(mt); 

ermöglicht dem der Agent die nehmen nächste ACLMessage.INFORM-Nachricht von seinem 'Postfach'.

für weitere Fähigkeiten, ich schlage vor, Sie gehen durch die Jade API.

Auch für was ich glaube, Sie versuchen zu erreichen, die eine Nachricht an alle Agenten in einem Container senden. Sie können den AMS-Agenten nach einer Liste der Agenten auf der Plattform abfragen und sie dann nach ContainerID filtern. hier ist ein Code, den Sie zu erhalten begonnen:

AMSAgentDescription[] agents = null; 
SearchConstraints sc = new SearchConstraints(); 
// if multiple searchs are done, isolate them based on the name of searching agent 
sc.setSearchId(getAID().getName()); 
sc.setMaxResults(new Long(-1)); // long value of -1 means get all agents 
agents = AMSService.search(this, new AMSAgentDescription(), sc); //Query AMS agent for available agents 

Dieser Code wird eine Liste mit allen zur Verfügung stehenden Mitteln auf der Plattform abgerufen werden, die mit dem AMS-Agent registriert sind. Viel Glück und Post wenn Sie Probleme haben :)