[英]Jade: how to run the same agent multiple times?
我需要多次运行代理。 每次所有代理商都应
我的问题是最后一步。
如何从平台上删除代理,或者如何关闭平台以在以后执行另一个代理?
我尝试了这段代码,但仍然无法关闭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);
}
每次如何关闭主容器? 谢谢
您可能可以尝试使用container.kill()关闭平台。
我通常使用代理管理系统。 使用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();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.