2016-12-20 1 views
0

에이전트를 여러 번 실행해야합니다. 때마다 모든 에이전트는Jade : 같은 에이전트를 여러 번 실행하는 방법?

  • 자신의 행동과
  • 가 플랫폼에서 제거 할을 수행 만들어야합니다.

제 마지막 단계에 문제가 있습니다.

플랫폼에서 에이전트를 제거하려면 어떻게해야합니까? 아니면 나중에 다른 플랫폼을 실행하기 위해 플랫폼을 종료 할 수 있습니까?

나는이 코드를 시도했지만 난 여전히 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 각 시간을 종료 할 수 있습니다? thanks

+0

는 코드이 줄 컴파일을 수행합니다'에이전트 = container.createNewAgent은 (Ag [J] ". jade.project"+의 Ag [J], 널을)'? – 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(); 
    } 

} 
관련 문제