8

hi i m working on my theses under jade

i use the ams to discover all the jade agents on the main container but when i tried to make some agent containers i failed to search all the containers to get all agents on them

please help me fixing my code who discover only the agent of the ams of the current container

that the code i use to create agent under containers.

  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();

        }

that my agent who needs to broadcast an 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();
        }
timaschew
  • 16,254
  • 6
  • 61
  • 78

2 Answers2

8

you only need to send a request to the AMS agent, then print or do whatever you want with the agent list ( present agent in the jade middleware ):

step 1 : send request to 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) { ... }

step 2 : showing the result of the request :

for (int i=0; i<agents.length;i++){
     AID agentID = agents[i].getName();
     System.out.println(agentID.getLocalName());
}
steevn
  • 242
  • 2
  • 8
4
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
    }
kemar aim
  • 63
  • 8
  • 1
    Please add an explanation of your code so other users can understand your answer in the future. – Brody Nov 03 '15 at 23:03