2016-12-20 23 views
0

エージェントを複数回実行する必要があります。すべてのエージェントがジェイド:同じエージェントを複数回実行するには?

  • する必要がありますたびにその動作を実行し、
  • がプラットフォームから削除される。
  • を作成しました

私の問題は最後のステップです。

エージェントをプラットフォームから削除するにはどうしたらいいですか?また、後で別のプラットフォームを実行するためにプラットフォームをシャットダウンする方法はありますか?

私はこのコードを試してみましたが、私はまだRMAをシャットダウンすることはできません。

for(int i=0; i<10;i++) 
{ 
    System.out.println("******************************iteration************************"+i); 
    // Récupération du conteneur (Main Container) en cours d'execution de Jade     
    Runtime rt = Runtime.instance(); 
    // Création du profil par défault 
    ProfileImpl p = new ProfileImpl(false); 
    AgentContainer container =rt.createAgentContainer(p); 
    AgentController Agent=null;  


    for (int j=0; j<Ag.length;j++) 
    {//loop to create all the existing agents in Ag (array). 
     try { System.out.println("creation de l'agent"+j); 
      Agent = container.createNewAgent(Ag[j], "jade.project."+Ag[j], null); 
      Agent.start(); 

     } catch (StaleProxyException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    }  


    //shut down 
    System.out.println("******************************Fin iteration************************"+i); 

} 

にはどうすればmaincontainerたびにシャットダウンすることができますか?ありがとう

+0

コードは 'Agent = container.createNewAgent(Ag [j]、" jade.project。 "+ Ag [j]、null);'という行でコンパイルしますか? – DimaSan

+0

はい、実際には、最初のループが1回実行され、2回目の繰り返しに来てエラーが表示された場合(プラットフォームが実行されています。最初にシャットダウンしてください)、コードに問題はありません –

+0

だから、次の反復が開始される前に –

答えて

0

おそらく、プラットフォームをシャットダウンするためにcontainer.kill()を試すことができます。

0

私は通常、エージェント管理システムを使用しています。 AMSを使用すると、より多くのコードと管理者が増えますが、応答(通知/失敗)に対処することができます。

public void destroyAgent(final AID AgentName) { 
    log("kill agent initiated by " + this.getLocalName()); 
    KillAgent ka = new KillAgent(); 
    ka.setAgent(AgentName); 

    Action actExpr = new Action(this.getAMS(), ka); 
    ACLMessage AMSRequest = new ACLMessage(ACLMessage.REQUEST); 
    AMSRequest.addReceiver(this.getAMS()); 

    AMSRequest.setOntology(JADEManagementOntology.getInstance().getName()); 
    AMSRequest.setLanguage(FIPANames.ContentLanguage.FIPA_SL); 
    AMSRequest.setProtocol(FIPANames.InteractionProtocol.FIPA_REQUEST); 
    try { 
     getContentManager().fillContent(AMSRequest, actExpr); 

     addBehaviour(new AchieveREInitiator(this, AMSRequest) { 

      protected void handleInform(ACLMessage inform) { 
       log(Level.INFO, "Agent successfully Destroyed name:" + AgentName); 
      } 

      protected void handleFailure(ACLMessage failure) { 
       log(Level.SEVERE, "Agent kill failed name: " + AgentName); 
      } 
     }); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

}