2015-02-22 12 views
6

im hi làm việc trên luận án của tôi dưới ngọclàm thế nào để có được các đại lý trên tất cả các container ngọc?

i sử dụng AMS để khám phá tất cả các đại lý ngọc bích trên thùng sơn chính nhưng khi tôi đã cố gắng để làm cho một số container đại lý i thất bại trong việc tìm kiếm tất cả các container để có được tất cả các đại lý trên chúng

hãy giúp tôi sửa chữa mã của tôi có công phát hiện chỉ có đại lý của ams của vùng chứa hiện

rằng mã tôi sử dụng để tạo ra đại lý dưới container.

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

     } 

rằng đại diện của tôi có nhu cầu để phát sóng một 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(); 
     } 

Trả lời

6

bạn chỉ cần gửi một yêu cầu đến đại lý AMS, sau đó in hoặc làm bất cứ điều gì bạn muốn với danh sách đại lý (đại lý hiện tại trong middleware ngọc):

bước 1: gửi yêu cầu tới 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) { ... } 

bước 2: showi ng là kết quả của các yêu cầu:

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

tôi đã làm nó trên mã của tôi nhưng khi tôi bắt đầu nhiều hộp mà không có tác dụng. –

+0

tốt, mã này được thử nghiệm gần đây, nó hoạt động rất tốt, ngay cả với nhiều thùng chứa, kiểm tra lại lần nữa – steevn

+0

Nó treo lên một số lần ngẫu nhiên !! –

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

Vui lòng thêm giải thích mã của bạn để người dùng khác có thể hiểu câu trả lời của bạn trong tương lai. – Brody

Các vấn đề liên quan