Джейд: как запустить один и тот же агент несколько раз?

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

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

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

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

Я пробовал этот код, но я все еще не могу закрыть 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);

}

Как я могу каждый раз закрывать основной контейнер? Благодарность


person Rahma Ferjani    schedule 20.12.2016    source источник
comment
Ваш код компилируется с этой строкой: Agent = container.createNewAgent(Ag[j], "jade.project."+Ag[j], null);?   -  person DimaSan    schedule 20.12.2016
comment
Да, на самом деле проблем с кодом нет, если первый цикл выполняется один раз, при переходе ко второй итерации появляется ошибка (платформа работает, сначала выключите ее)   -  person Rahma Ferjani    schedule 20.12.2016
comment
поэтому мне нужно закрывать его каждый раз, прежде чем начнется следующая итерация.   -  person Rahma Ferjani    schedule 20.12.2016
comment
Обзор: структурированный текст; уточненное название (упоминание Джейд)   -  person try-catch-finally    schedule 22.12.2016


Ответы (2)


Вероятно, вы можете попробовать container.kill(), чтобы закрыть платформу.

person nikelyn    schedule 19.05.2017

Обычно я использую систему управления агентами. Использование 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();
    }

}
person Clintus    schedule 13.10.2017