2016-06-30 11 views
0

私は自分のプロジェクトで複数のエージェントプラットフォーム用のjadeに取り組んでいます。ジェイドJavaエージェントコミュニケーション

私はエージェントを含むメインコンテナとエージェントコンテナを持っています。私はエージェントコンテナまたはメインコンテナにエージェントからのデータを送信したい

..

私のエージェントはクライアントであり、私のメインのコンテナがサーバーになりますので。

翡翠のアーキテクチャでは、エージェントのコンテナにエージェントが含まれることを理解しました。

これは可能ですか?

エージェントの間でデータを送信するapiがあるのだろうかと思っていました。事前

答えて

0

おかげで私はそれはあなたが達成しようとしていることが何であるかを確認していません。あなたがJADEエージェントから送信しているACLMessageの最終的な再現者は誰ですか?ターゲットコンテナに常駐するすべてのエージェントですか?

明確にするために、コンテナは本質的にエージェントが常駐できるアドレスです。メッセージを送信したり受信したりすることはできません。 JADEフレームワーク内では、エージェントはACLMessagesの「受信ボックス」、基本的に受信したメッセージのリストを含むBlockingQueueオブジェクトを備えています。エージェントは自身のリストを観察し、ライフサイクルが進むにつれてそのリストを処理することができます。コンテナにはこの機能がありません。

ACLMessagesは、受信者とその他の詳細を追加することによって、特定のエージェントに誘導できます。メッセージが供給されたエージェントは、たとえば、あなたが特に一致基準に基づいて、エージェントの「受信ボックス」からメッセージを選択することができMessageTemplateを利用することにより、特定のACLMessagesのために聞くことができます。

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

は、エージェントが取ることができるようになります次のACLMessage.INFORMメッセージを'inbox 'から削除します。

さらなる能力のために、私はあなたが翡翠APIを通過することをお勧めします。

また、あなたが達成しようとしているのは、コンテナ内のすべてのエージェントにメッセージを送信することです。 AMSエージェントにプラットフォーム上のエージェントのリストを照会してから、ContainerIDでフィルタリングすることができます。

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 

このコードは、AMSエージェントに登録されているすべての利用可能なエージェントのリストを取得します。問題がある場合は幸運と投稿をしてください:)

関連する問題