【问题标题】:Jade: how to run the same agent multiple times?Jade:如何多次运行同一个代理?
【发布时间】:2017-05-05 13:49:52
【问题描述】:

我需要多次运行我的代理。每次所有的代理都应该是

  • 已创建
  • 执行他们的行为并
  • 从平台上移除。

我的问题在于最后一步。

如何从平台中删除代理,或者如何关闭平台以便稍后执行另一个代理?

我尝试了这段代码,但仍然无法关闭 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);

}

如何每次都关闭主容器?谢谢

【问题讨论】:

  • 你的代码是否使用这一行编译:Agent = container.createNewAgent(Ag[j], "jade.project."+Ag[j], null);?
  • 是的,实际上第一次循环执行一次代码没有问题,到第二次迭代出现错误(平台正在运行,请先关闭它)跨度>
  • 所以我每次都需要在下一次迭代开始之前关闭它。
  • 评论:结构化文本;明确的标题(提及“翡翠”)

标签: java eclipse-plugin agent agents-jade multi-agent


【解决方案1】:

我通常使用代理管理系统。使用 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();
    }

}

【讨论】:

    【解决方案2】:

    你或许可以尝试 container.kill() 来关闭平台。

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 2017-03-17
      • 2022-09-16
      • 2020-06-26
      • 2015-05-31
      • 1970-01-01
      相关资源
      最近更新 更多