2015-02-22 4 views
6

हाय im जेड के तहत मेरे शोध करे पर काम करसभी कंटेनर जेड पर एजेंट कैसे प्राप्त करें?

मैं एम्स का उपयोग मुख्य कंटेनर पर सभी जेड एजेंटों को खोजने के लिए, लेकिन जब मैं कुछ एजेंट कंटेनर करने की कोशिश की मैं सभी कंटेनर खोज करने के लिए उन पर सभी एजेंटों प्राप्त करने में विफल

कृपया मुझे मेरे कोड है जो केवल मौजूदा कंटेनर

कि कोड मैं का उपयोग कंटेनरों के तहत एजेंट बनाने के लिए की एम्स के एजेंट की खोज फिक्सिंग मदद करते हैं।

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

उत्तर

6

आप केवल, एम्स के एजेंट के लिए एक अनुरोध भेजने के लिए फिर प्रिंट या एजेंट की सूची के साथ जो चाहें करें की जरूरत है (वर्तमान एजेंट जेड मिडलवेयर में):

चरण 1:

// 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: एम्स के लिए अनुरोध भेज showi एनजी अनुरोध के परिणाम:

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

मैं पहले से ही मेरे कोड पर यह किया लेकिन जब मैं कई कंटेनर शुरू कि काम नहीं करते। –

+0

अच्छी तरह से, यह कोड हाल ही में परीक्षण किया गया है, यह कई कंटेनरों के साथ भी बहुत अच्छा काम करता है, इसे फिर से जांचें – steevn

+0

यह कुछ समय यादृच्छिक रूप से लटकता है !! –

3
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 
    } 
+1

कृपया अपने कोड का स्पष्टीकरण जोड़ें ताकि अन्य उपयोगकर्ता भविष्य में अपना उत्तर समझ सकें। – Brody

संबंधित मुद्दे