コンテキストは次のとおりです。あるエージェント(「senderAgent」としましょう)から別のエージェント(「targetAgent」)にメッセージを送信しています。ここでは何も複雑ではありません。メッセージ伝搬タイプは INFORM です。
関連するsenderAgent部分のコードは次のとおりです(ワンショット動作内):
message = new ACLMessage(ACLMessage.INFORM);
message.addReceiver(new AID("targetAgent", AID.ISLOCALNAME));
message.setContent(jsonContent); // not important here
send(message);
関連する targetAgent 部分のコード (循環動作内):
MessageTemplate mt =
MessageTemplate.and(MessageTemplate.MatchPerformative(ACLMessage.INFORM),
MessageTemplate.MatchSender("senderAgent", AID.ISLOCALNAME));
ACLMessage msg = receive(mt);
if (msg != null) {
//do something
}
block();
問題は、このメッセージが targetAgent によって捕捉されないことです。それは確かに私のsenderAgentによって送信されますが、targetAgentの周期的な動作は常に「null」メッセージ(別名「メッセージなし」)を受け取るようです。
Jade Console の Sniffer ツールと Introspector ツールの両方を使用して調査しました。
- Sniffer は、メッセージが senderAgent から targetAgent に効果的に送信されていることを示しています。
- イントロスペクターは、メッセージが送信者側で送信され、ターゲット側で受信されたことも示しています。
コンテンツは問題なく、AID も問題ないのに、targetAgent の周期的な受信動作が何もキャッチしないのはなぜですか?
この問題が発生するのはこれが初めてで、システムの他のエージェント間で同様の通信を正常に実装する前に、かなり迷っています...
ヘルプ、デバッグのヒント、またはアイデアをいただければ幸いです。