【发布时间】:2019-05-16 15:14:47
【问题描述】:
我遇到了 Jade-agent 问题,无法继续进行签名练习。
问题如下:
我有两个基本代理:卖家和买家。每个可能有不止一个。它们与 JADE 协议进行通信。卖家说出产品的价格,买家购买。所以,我决定在买家代理中实现一个HashMap,因为卖家有一个关联的价格,所以当买家想要搜索卖家代理时,他们存储在一个hashmap中。在 hashmap 中,key 是 agent 的 AID 和 value,他销售的产品的价格(它是一个 Seller 本地变量)。但是当我想访问产品的价格时,我不知道如何获取它。
卖方代理。
public class SellerAgent extends Agent {
private ArrayList<String> messages; // Messages between them are stored in ArrayList.
int price; // Price of the product.
// setup() and takeDown().
@Override
protected void setup() {
messages= new ArrayList();
price = rnd.nextInt(50);
// Agent registration
ServiceDescription sd = new ServiceDescription();
sd.setType("GUI");
sd.setName("Seller");
DFAgentDescription dfd = new DFAgentDescription();
dfd.setName(getAID());
dfd.addServices(sd);
try {
DFService.register(this, dfd);
} catch (FIPAException fe) {
fe.printStackTrace();
}
}
@Override
protected void takeDown() {
try {
DFService.deregister(this);
} catch (FIPAException fe) {
fe.printStackTrace();
}
System.out.println("END OF " + this.getName());
}
public Integer getPrice() { return price; }
}
买方代理。
public class BuyerAgent extends Agent {
private HashMap<AID, Integer> sellers; // Sellers.
private ArrayList<String> messages; // Messages between them are stored in ArrayList.
@Override
protected void setup() {
sellers = new HashMap();
messages = new ArrayList();
// Agent registration
ServiceDescription sd = new ServiceDescription();
sd.setType("GUI");
sd.setName("Buye");
DFAgentDescription dfd = new DFAgentDescription();
dfd.setName(getAID());
dfd.addServices(sd);
try {
DFService.register(this, dfd);
} catch (FIPAException fe) {
fe.printStackTrace();
}
// SearchAgents Task.
addBehaviour(new SearchAgents(this, 5000)); // Search Seller Agent.
}
@Override
protected void takeDown() {
try {
DFService.deregister(this);
} catch (FIPAException fe) {
fe.printStackTrace();
}
System.out.println("END OF " + this.getName());
}
public class SearchAgents extends TickerBehaviour {
public SearchAgents(Agent a, long period) {
super(a, period);
}
@Override
protected void onTick() {
DFAgentDescription template;
ServiceDescription sd;
DFAgentDescription[] result;
// We search Seller Agents.
sd = new ServiceDescription();
sd.setName("Seller");
template = new DFAgentDescription();
template.addServices(sd);
try {
result = DFService.search(myAgent, template);
if (result.length > 0) {
agricultores.clear();
for (int i = 0; i < result.length; ++i)
seller.put(result[i].getName(), i); /*HERE IS THE PROBLEM, value needs to be price of seller product, not i*/
} else {
// No agents where found.
agricultores.clear();
System.out.println("Not found.");
}
} catch (FIPAException fe) {
fe.printStackTrace();
}
}
}
}
【问题讨论】:
-
您必须向卖家发送一条消息以了解其价格
-
是的,我终于按照你说的做了,而且成功了!使用我编写的代码,我搜索 de AID Agent,当我找到一个时,我将它保存在一个数组中。所以,当我得到代理时,只需发送带有信息的 de ACLMessage 并保存。谢谢你的回答! ^^
标签: java agents-jade