2016-05-09 4 views
1

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の新機能を使用しているので、コードを手助けしてくれる人もいますか?

答えて

2

私はあなたのコードをテストし、受信者エージェントはすべての送信者エージェントからのメッセージを受け取ります。

私はいくつかの質問や発言を持っている:

  1. 送信側エージェントが自分の番号を送信する必要がありますどのくらいの頻度?与えられた時間の後、一回だけ、または周期的に、

  2. 受信者エージェントは受信した値の合計ではなく、常に最後に受信した値を比較します。

  3. より良い利用メッセージを受信した後のロジックについては、この構造は、:

    if (msg_IncomingLoadDetails != null) { 
        // your logic 
    } else { 
        block();    
    } 
    

    それはNullPointerExceptionが

+0

のようないくつかの問題を防ぐことができダニの行動は、すべての5S方法をonTick実行します。私は値を合計しないことを知っています。私はすべてのエージェントからどのように値を受け取り、合計するかを知りたいです。 –

+0

Agent.receive()メソッドは、エージェントのキュー内で最も古いメッセージを受け取ります。 2つの送信者エージェントを作成し、それぞれ5秒ごとにランダムな整数を送信します。受信者は両方の送信者から受信します。コンソールからのログは次のとおりです。http://pastebin.com/D8sN1fUY –

+1

このように動作します。送信者と受信者エージェントが開始され、受信者はメッセージを取得しようとしますが、キューは空です。だから彼の行動はブロックし、信号を待っている。両方の送信者がその番号を送信します。受信者は新しいメッセージについての信号を取得し、自分の行動を引き起こします。キュー内のメッセージを見つけて取得して表示します。次に、再び行動を引き起こし、キュー内の2番目のメッセージを見つけて取得して表示します。 –

関連する問題