【问题标题】:How many agents JADE handle on contract net protocol合约网络协议上有多少代理 JADE 处理
【发布时间】:2020-07-14 21:06:16
【问题描述】:

我的问题是,JADE 在使用合约网络协议时可以处理多少个代理? 我在同一个容器上有一个 ContractNetInitiator 代理和 130 个 ContractNetResponder。用于创建这些代理的代码如下:

ProfileImpl profileImpl2 = new ProfileImpl(false);
        profileImpl2.setParameter(ProfileImpl.MAIN_HOST, "localhost");
        AgentContainer agentContainer = runtime.createAgentContainer(profileImpl2);
        
         AgentController v;
         
         for (int i=0; i<130; i++){ //8 est le nombre d'agents véhicules
              v=agentContainer.createNewAgent("vehicle"+i, "VehicleAgent", new Object[]{});
            v.start(); } 

try {
        // Register the vehicle-transporting service in the yellow pages
        dfd = new DFAgentDescription();
        dfd.setName(getAID());
        ServiceDescription sd = new ServiceDescription();
        sd.setName("Transport Of Items");
        sd.setType("Transport");
        dfd.addServices(sd);
        DFService.register(this, dfd);
    } catch (FIPAException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

ContractNetInitiator 只找到了 100 个代理。我用来搜索这些代理的代码如下:

try {
        // search list of Vehicle agents
        template = new DFAgentDescription();
        sd = new ServiceDescription();
        sd.setType("Transport");
        template.addServices(sd);

        DFAgentDescription[] result = DFService.search(this, template);

        if (result.length > 0) {
            vehicleAgentsD = new AID[result.length];
            log.info("Agent Dispatcher Agent  found  this vehicle's Agents :");
            for (int i = 0; i < result.length; ++i) {
                vehicleAgentsD[i] = result[i].getName();
                log.info("VA" + i + "===>" + vehicleAgentsD[i].getName());
            }

        } else {
            System.out.println("Agent " + getLocalName() + " did not find any service");
        }

    } catch (FIPAException fe) {
        fe.printStackTrace();
    }

这个错误是与 JADE 的限制有关还是与我的电脑性能有关? 提前感谢您的回答。

【问题讨论】:

  • 能否请您使用“{}”格式化您的代码,以便我们可以看到此文本中的哪些内容正是您的代码
  • 不,您必须编辑您的问题,然后添加您的代码
  • @Verity 我编辑了我的问题
  • 现在你必须正确格式化它;)你的问题没问题,我们可以回答你:D

标签: java agents-jade


【解决方案1】:

DFService 似乎对它返回的结果数量有一个默认限制设置为 100。您可以通过为DFService.search() 方法设置适当的SearchConstraints降低它这样的方法

SearchConstraints getAll = new SearchConstraints();
getAll.setMaxResults(new Long(max_results));
DFAgentDescription dfd = new DFAgentDescription();
ServiceDescription sd  = new ServiceDescription();
sd.setType( "service-proxy" );
dfd.addServices(sd);
DFAgentDescription[] result = DFService.search(this, dfd,getAll);

为了增加此值,您需要将属性jade_domain_df_maxresult 设置为更高的值并在创建时将其提供给容器:

Profile pMain = new ProfileImpl(null, 8888, null);
pMain.setParameter("jade_domain_df_maxresult", "1000");
AgentContainer mc = rt.createMainContainer(pMain);

这个答案基于jade-develop邮件列表中的theseanswers

感谢 Farida 在我的原始答案中提及问题并指出正确的解决方案。

【讨论】:

  • 感谢@Martin Pilat 教授的干预。我尝试了提出的解决方案,但这对我不起作用。但是,按照您共享的链接 (jade.tilab.com/pipermail/jade-develop/2012q3/018536.html),给出的答案有效。我将此行添加到我的代码中:Profile pMain = new ProfileImpl(null, 8888, null); pMain.setParameter("jade_domain_df_maxresult", "1000"); AgentContainer mc = rt.createMainContainer(pMain);
猜你喜欢
  • 1970-01-01
  • 2014-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 2020-08-19
相关资源
最近更新 更多