JADEには次の要件があります。 乱数を生成するタスクを持つ複数のエージェントを作成する必要があります。別の受信側エージェントは、生成されたすべての乱数を収集し、それらを合計して決定を下す。ことである これはクラスはtickerbehaviour延びてJADEを使用して別のエージェントの複数のエージェントからメッセージ(整数値)を追加する方法
protected void onTick()
{
ACLMessage msg_LoadDetails = new ACLMessage(ACLMessage.INFORM);
msg_LoadDetails.addReceiver(new AID("LoadCoordinator", AID.ISLOCALNAME));
msg_LoadDetails.setContent(String.valueOf(getLoad()));
LoadConv.send(msg_LoadDetails);
//load = (int)(Math.random()*1000+1);
}
レシーバクラスは、環状挙動延び、以下のようにダニonTick方法であり、ここで
public void action()
{
ACLMessage msg_IncomingLoadDetails = LoadCoordinator.receive();
if(msg_IncomingLoadDetails!=null)
totalLoad = Integer.parseInt(msg_IncomingLoadDetails.getContent());
if(totalLoad>500)
{actioncommand = "off";}
else
{actioncommand = "on";}
System.out.println("The current load is:" +totalLoad+ "; the load will be switched " +actioncommand);
block();
}
問題を以下のように作用する方法は、送信者剤であります受け取った値は私が(コンソールから)作成する1つのエージェントのものです。私は作成されたすべてのエージェントの値を受け取りたい。これはエージェントの配列を作成する必要がありますか?多くのエージェントメッセージから値を読み取るにはどうすればよいですか?私がJAVAとJADEの新機能を使用しているので、コードを手助けしてくれる人もいますか?
のようないくつかの問題を防ぐことができダニの行動は、すべての5S方法をonTick実行します。私は値を合計しないことを知っています。私はすべてのエージェントからどのように値を受け取り、合計するかを知りたいです。 –
Agent.receive()メソッドは、エージェントのキュー内で最も古いメッセージを受け取ります。 2つの送信者エージェントを作成し、それぞれ5秒ごとにランダムな整数を送信します。受信者は両方の送信者から受信します。コンソールからのログは次のとおりです。http://pastebin.com/D8sN1fUY –
このように動作します。送信者と受信者エージェントが開始され、受信者はメッセージを取得しようとしますが、キューは空です。だから彼の行動はブロックし、信号を待っている。両方の送信者がその番号を送信します。受信者は新しいメッセージについての信号を取得し、自分の行動を引き起こします。キュー内のメッセージを見つけて取得して表示します。次に、再び行動を引き起こし、キュー内の2番目のメッセージを見つけて取得して表示します。 –