gpt4 book ai didi

java - 我需要使用 AID 从一个类访问一个值

转载 作者:行者123 更新时间:2023-12-02 05:35:31 24 4
gpt4 key购买 nike

我遇到了 Jade-agent 问题,无法继续进行签名练习。

问题如下:

我有两个基本代理:卖家和买家。每一种可能都有不止一个。它们使用 JADE 协议(protocol)进行通信。卖家说出产品的价格,买家购买。所以,我决定在买家代理中实现一个HashMap,因为卖家有一个关联的价格,所以当买家想要搜索卖家代理时,它们被存储在一个hashmap中。在 HashMap 中,键是代理的 AID 和值,即他销售的产品的价格(它是 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();
}
}
}
}

最佳答案

这不会向您提供卖家的任何价格。在这里,您只需获取所有可用卖家的列表。获取价格的方式是向每个卖家发送消息并询问价格,然后听取并获得他们的相应回复(价格)。

首先,向每个卖家发送一条消息。在 BuyerAgent 类中:

ACLMessage msg = new ACLMessaage(ACLMessage.REQUEST);
msg.setContent("What's the price?");
for(DFAgentDescription df : results) {
msg.addReceiver(df.getName());
}
myAgent.send(msg);
block();

SellerAgent类中:

ACLMessage msg = myAgent.receive(MessageTemplate.MatchPerformative(ACLMessage.REQUEST));
if(msg != null) {
ACLMessage reply = msg.createReply();
reply.setPerformative(ACLMessage.PROPOSE);
reply.setContent(**YOUR PRICE HERE**);
myAgent.send(reply);
}
block();

同样,在 BuyerAgent 类中:

msg = myAgent.receive(MessageTemplate.MatchPerformative(ACLMessage.PROPOSE));
if(msg != null) {
sellers.put(msg.getSender(), Integer.parseInt(msg.getContent());
...
}

注意:我在这里使用的 ACLMessages 类型(REQUEST、PROPOSE)并不那么重要。您可以根据需要更改它们。

关于java - 我需要使用 AID 从一个类访问一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56171755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com