hi pracuję nad moimi tezami pod jadeitemjak zdobyć agentów na wszystkich pojemnikach jade?
Używam ams do odkrycia wszystkich agentów jade na głównym kontenerze, ale gdy próbowałem zrobić kilka kontenerów agentów, nie przeszukałem wszystkich kontenerów, aby uzyskać dostęp do wszystkich agentów
proszę mi pomóc ustalające mój kod, który odkryć tylko agentem AMS bieżącym kontenerze
że kod używam do tworzenia agenta pod pojemniki.
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();
}
że mój agent, który musi nadawać się 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();
}
ja już to zrobił na moim kodu, ale kiedy uruchomić wiele pojemników, które nie działają. –
cóż, ten kod jest testowany niedawno, działa tak dobrze, nawet z wieloma kontenerami, sprawdź ponownie – steevn
Zawiesza się czasami losowo !! –