2016-12-20 2 views
0

Ich muss meine Agenten mehrmals ausführen. Jedes Mal, wenn alle Mittel solltenJade: Wie man den gleichen Agenten mehrmals laufen lässt?

seine
  • erstellt
  • ihr Verhalten führen und
  • von der Plattform entfernt werden.

Mein Problem ist mit dem letzten Schritt.

Wie kann ich die Agenten von der Plattform entfernen oder wie kann ich die Plattform herunterfahren, um später eine andere auszuführen?

habe ich versucht, diesen Code, aber ich kann immer noch nicht die RMA herunterzufahren:

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); 

} 

Wie kann ich schließen die maincontainer jedes Mal nach unten? danke

+0

Gibt es in Ihrem Code mit dieser Zeile kompilieren: 'Agenten = container.createNewAgent (Ag [j] " jade.project" + Ag [j], null);'? – DimaSan

+0

Ja, tatsächlich gibt es kein Problem mit dem Code, wenn die erste Schleife einmal ausgeführt wird, kommt ein Fehler zu der zweiten Iteration (die Plattform läuft, bitte zuerst herunterfahren) –

+0

so muss ich es jedes Mal schließen bevor die nächste Iteration gestartet wird. –

Antwort

0

Sie können wahrscheinlich container.kill() versuchen, die Plattform herunterzufahren.

0

Ich verwende in der Regel das Agent Management System. Die Verwendung des AMS ist viel mehr Code und und Admin, aber es ermöglicht Ihnen, auf die Antwort (Inform/Fehler) zu reagieren.

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(); 
    } 

} 
Verwandte Themen