我正在研究玉石下的论文
我使用ams来发现主容器上的所有jade代理,但是当我尝试制作一些代理容器时,我无法搜索所有容器以获取所有代理
请帮我修复我的代码,他们只发现当前容器的代理
我用来在容器下创建代理的代码。
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();
}
答案 0 :(得分:8)
您只需要向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());
}
答案 1 :(得分: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
}