У меня отлично работает многоагентная система, использующая JADE для добавления в систему агента источника и агента загрузки.Агент источника обеспечивает электроэнергию требовательным агентам нагрузки.Как только агент загрузки получает требуемую мощность, он прекращает работу.
Код агента источника:
public class SourceAgent extends Agent{
//Some variables
protected void setup(){
DFAgentDescription dfd = new DFAgentDescription();
dfd.setName(getAID());
System.out.println(getAID().getClass().getName());
ServiceDescription sd = new ServiceDescription();
sd.setType("adding-load");
sd.setName("JADE-power-trading");
dfd.addServices(sd);
try {
DFService.register(this, dfd);
}
catch (FIPAException fe) {
fe.printStackTrace();
}
addBehaviour(new OfferRequestsServer());
addBehaviour(new PurchaseOrdersServer());
}
protected void takeDown(){
try{
DFService.deregister(this);
}
catch (FIPAException fe){
fe.printStackTrace();
}
System.out.println("GenAgent " + getAID().getName() + " terminating.");
}
private class OfferRequestsServer extends CyclicBehaviour{
public void action(){
MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.CFP);
ACLMessage msg = myAgent.receive(mt);
if (msg != null){
//Some conditions
myAgent.send(reply);
}
catch(IOException ex){
Logger.getLogger(SourceAgent.class.getName()).log(Level.SEVERE, null, ex);
}
}
else block();
}
}
private class PurchaseOrdersServer extends CyclicBehaviour{
public void action(){
MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.ACCEPT_PROPOSAL);
ACLMessage msg = myAgent.receive(mt);
if(msg != null){
//Some conditions
}
}
}
Код агента загрузки:
public class LightAgent extends Agent {
public int Demand ;
private AID[] GenAgent;
protected void setup(){
System.out.println("Hello! load-agent " + getAID().getName() + " is ready.");
Demand = 10;
System.out.println("Demanded power is " + Demand);
addBehaviour(new TickerBehaviour(this, 10000){
public void onTick(){
System.out.println("Trying to obtain: " + Demand);
DFAgentDescription template = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
sd.setType("adding-load");
template.addServices(sd);
try{
DFAgentDescription[] result = DFService.search(myAgent, template);
System.out.println("Found the following generation agents: ");
GenAgent = new AID[result.length];
for (int i = 0; i < result.length; ++i) {
GenAgent[i] = result[i].getName();
System.out.println(GenAgent[i].getName());
}
}
catch(FIPAException fe){
fe.printStackTrace();
}
myAgent.addBehaviour(new RequestPerformer());
}
}
);
}
protected void takeDown(){
System.out.println("Load-agent " + getAID().getName() + " terminating.");
}
private class RequestPerformer extends Behaviour{
//Some variables
public void action(){
switch(step){
//Some conditions
}
}
Код работает отлично.Я удалил большую часть, чтобы показать только то, что может быть необходимо.Прямо сейчас, когда я запускаю код, всплывает графический интерфейс.Мне нужно добавить агент источника и агент загрузки вручную.
Мне нужно изменить его так, чтобы первый агент источника и агент загрузки были добавлены автоматически.Я пытался создать пользовательские классы, но даже не приблизился.Я думал, есть ли способ сделать это?Возможно ли это сделать?