как получить агенты на всех контейнерах jade?
Привет, я работаю над своими диссертациями под jade
Я использую ams, чтобы обнаружить все агенты jade на главном контейнере, но когда я попытался сделать некоторые контейнеры агента, я не смог найти все контейнеры, чтобы получить все агенты на них
пожалуйста, помогите мне исправить мой код, который обнаруживает только агент 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
}