玉代理数据通信

时间:2017-06-20 16:02:09

标签: java agents-jade

我的项目是创建代表公共汽车的代理商,使用高斯赛德尔方法解决潮流系统。现在的困难在于,由于不同的公交车拥有不同的信息,他们需要相互发送信息才能进行计算。我的方法是定义变量来表示每个代理中的电压等已知值,然后在必要时将它们传递给其他代理。但是,由于我对编程特别是JADE非常陌生,因此我无法让这些代理共享信息。我该如何实现?非常感谢你。

2 个答案:

答案 0 :(得分:1)

据我所知,“黄页服务”将对您有所帮助。您应该在安装过程中注册每个代理,并在需要时进行搜索。例如(来自“使用Jade开发多代理系统”)。

注册:

protected void setup() {
... // Register the book-selling service in the yellow pages 
   DFAgentDescription dfd = new DFAgentDescription(); 
   dfd.setName(getAID()); 
   ServiceDescription sd = new ServiceDescription(); 
   sd.setType("Book-selling"); 
   sd.setName(getLocalName()+"-Book-selling"); 
   dfd.addServices(sd); 
   try { 
       DFService.register(this, dfd);
   } catch (FIPAException fe) { 
      fe.printStackTrace(); } ...
   }

和搜索:

DFAgentDescription template = new DFAgentDescription(); 
ServiceDescription sd = new ServiceDescription(); 
sd.setType("Book-selling"); 
template.addServices(sd); 
try { 
    DFAgentDescription[] result = DFService.search(myAgent, template); 
} catch (FIPAException fe) { 
    fe.printStackTrace(); 
}

答案 1 :(得分:1)

有关基本信息,请参阅将要的linke。这是一个基本的解决方案,但不能很好地扩展。 Passing ACL messages between jade remote platforms

要获得更清洁的解决方案,请按照以下步骤操作:

  1. 使用目录服务商(DF)注册代理和服务。你可以在这个帖子和其他人中找到关于如何做到这一点的建议。 (来自代理商提供服务的消息 - > DF)
  2. 从DF请求服务和代理。再一次,这可以找到 (来自代理请求服务的消息 - > DF) (DF->响应服务供应商信息)
  3. 将自定义消息发送给提供服务的代理。 在此消息中,您将嵌入信息。
  4. 我通常使用XML或字符串操作:

    AID r=new AID("agent-name@platform",AID.ISGUID);
    r.addAddresses("http://192.168.1.1:7778/acc");
    acl.addReceiver(r);
    acl.setContent("time=10:30");
    this.send(acl);
    System.out.println("\nMessage Sent to "+r);