Добавить агента автоматически в контейнер - PullRequest
0 голосов
/ 21 июня 2019

У меня отлично работает многоагентная система, использующая 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
    }
}

Код работает отлично.Я удалил большую часть, чтобы показать только то, что может быть необходимо.Прямо сейчас, когда я запускаю код, всплывает графический интерфейс.Мне нужно добавить агент источника и агент загрузки вручную.

Мне нужно изменить его так, чтобы первый агент источника и агент загрузки были добавлены автоматически.Я пытался создать пользовательские классы, но даже не приблизился.Я думал, есть ли способ сделать это?Возможно ли это сделать?

...