2016-12-20 4 views
0

Мне нужно несколько раз запускать свои агенты. Каждый раз, все средства должны бытьJade: как запустить один и тот же агент несколько раз?

  • создал
  • выполнить свое поведение и
  • быть удален с платформы.

Моя проблема с последним шагом.

Как удалить агентов с платформы или как я могу закрыть платформу, чтобы выполнить другую позже?

Я попробовал этот код, но я до сих пор не могу закрыть РВД:

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

ли ваш код компилируется с этой строки: 'Агент = container.createNewAgent (Ag [J], " jade.project" + Ag [J], NULL);'? – DimaSan

+0

Да, это действительно так, на самом деле нет проблем с кодом, если первый цикл выполняется один раз, придя ко второй итерации, появляется ошибка (платформа запущена, сначала выключите ее) –

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

} 
Смежные вопросы