我的项目是创建代表公共汽车的代理商,使用高斯赛德尔方法解决潮流系统。现在的困难在于,由于不同的公交车拥有不同的信息,他们需要相互发送信息才能进行计算。我的方法是定义变量来表示每个代理中的电压等已知值,然后在必要时将它们传递给其他代理。但是,由于我对编程特别是JADE非常陌生,因此我无法让这些代理共享信息。我该如何实现?非常感谢你。
答案 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
要获得更清洁的解决方案,请按照以下步骤操作:
我通常使用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);