Как достать агентов на все контейнеры нефритовые?

Привет я работаю над диссертацией под нефритом

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

Пожалуйста, помогите мне исправить мой код, который обнаруживает только агент AMS текущего контейнера

что код, который я использую для создания агента под контейнерами.

  Runtime rt= Runtime.instance();

    Profile p=new ProfileImpl();


    AgentContainer AgentContainere = rt.createMainContainer(p);


    AgentController[] tab=new AgentController[N];

    try {


        int k=0;
        for (int i = 0; i < N; i++) {

            if (i % 100 == 0) {
                p=new ProfileImpl();
                AgentContainere = rt.createMainContainer(p);
            }

            if ((i+1)%(N/NbrC)==0) {
                tab[i] = AgentContainere.createNewAgent(psoeudo+" - "+i, "Agents.KmeanAgent", new Object[]{K,NbrC,true,k});
                k++;
            }else
            tab[i] = AgentContainere.createNewAgent(psoeudo+" - "+i, "Agents.KmeanAgent", new Object[]{K,NbrC,false,N});    
        }


        for (AgentController tab1 : tab) {
            tab1.start();

        }

что мой агент, которому нужно транслировать aclmessage:

     try {
            currentCluster = new Point(p.getX(), p.getY());
            tableOfCenters[index] = currentCluster;
            AMSAgentDescription[] agents = null;
            boolean notstable = true;
            int found = 0;
            long sleeptime=7000;
            while (notstable) {
                try {
                    sleep(sleeptime);

                    SearchConstraints c = new SearchConstraints();
                    c.setMaxResults(new Long(-1));

                    agents = AMSService.search(this, new AMSAgentDescription(), c);
                    if (agents.length > found) {
                        found = agents.length;
                        sleeptime+=5000;

                    } else {
                        notstable = false;
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            System.out.println(found + "the found agent");
            AID myId = getAID();
            ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
            int sendloop=0;
            msg.setContent(getName() + currentCluster + " index = " + index);
            for (AMSAgentDescription agent : agents) {

                AID sendTo = agent.getName();
                if (!sendTo.equals(myId) && !sendTo.getName().toLowerCase().contains("ams") && !sendTo.getName().toLowerCase().contains("df")) {
                    msg.addReceiver(sendTo);
                    sendloop++;
                    if (sendloop%10==0) {
                       send(msg);
                       System.out.println(msg);
                       msg.clearAllReceiver();
                    }
                }

            }
            if (sendloop%10!=0) {
                       send(msg);
                       System.out.println(msg);
                       msg.clearAllReceiver();
                    }




            System.out.println("********************");
            System.out.println(msg);
            System.out.println("********************");
        } catch (Exception e) {
            e.printStackTrace();
        }

2 ответа

Решение

Вам нужно только отправить запрос агенту AMS, затем распечатать или сделать все, что вы хотите со списком агентов (присутствует агент в промежуточном программном обеспечении Jade):

Шаг 1: отправить запрос в AMS:

    // Required imports

    import jade.domain.AMSService;
    import jade.domain.FIPAAgentManagement.*;

    ...
    AMSAgentDescription [] agents = null;

    try {
        SearchConstraints c = new SearchConstraints();
        c.setMaxResults ( new Long(-1) );
        agents = AMSService.search( this, new AMSAgentDescription (), c );
    }
    catch (Exception e) { ... }

шаг 2: отображение результата запроса:

for (int i=0; i<agents.length;i++){
     AID agentID = agents[i].getName();
     System.out.println(agentID.getLocalName());
}
import jade.core.Agent;
import jade.core.AID;

import jade.domain.AMSService;
import jade.domain.FIPAAgentManagement.*;

public class SearchC extends Agent 
{
    protected void setup() 
    {
        AMSAgentDescription [] agents = null;
        try {
            SearchConstraints c = new SearchConstraints();// object to searh                    //the container exist on the System
            c.setMaxResults (new Long(-1));//define infinity result to C
            agents = AMSService.search( this, new AMSAgentDescription (), c );//putt all agent found on the system to the agents list
        }
        catch (Exception e) {
            System.out.println( "Problem searching AMS: " + e );
            e.printStackTrace();
        }

        AID myID = getAID();// this methode to get the idesntification of //agents such as (Name , adress , host ....etc)
        for (int i=0; i<agents.length;i++)
        {
            AID agentID = agents[i].getName();
            System.out.println(
                ( agentID.equals( myID ) ? "*** " : "    ")
                + i + ": " + agentID.getName() 
            );
        }
        doDelete();// kill agent
        System.exit(0); // exit System
    }
Другие вопросы по тегам