Сколько агентов JADE обрабатывает по контрактному сетевому протоколу

Мой вопрос о том, сколько агентов 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 или с производительностью моего компьютера? Заранее спасибо за ваш ответ.


person Farida ben belkacem    schedule 14.07.2020    source источник
comment
Не могли бы вы отформатировать свой код с помощью {}, чтобы мы могли видеть, какой именно из этого текста является вашим кодом   -  person Verity    schedule 15.07.2020
comment
нет, вам нужно отредактировать свой вопрос, а затем добавить свой код   -  person Verity    schedule 15.07.2020
comment
@Verity Я отредактировал свой вопрос   -  person Farida ben belkacem    schedule 15.07.2020
comment
теперь вы должны отформатировать его правильно;) И тогда ваш вопрос в порядке, и мы можем ответить вам: D   -  person Verity    schedule 15.07.2020


Ответы (1)


Похоже, что DFService имеет ограничение по умолчанию на количество возвращаемых результатов, равное 100. Вы можете уменьшить его, установив соответствующий SearchConstraints для метода DFService.search(), подобный этому

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.

Спасибо Фариде за упоминание проблемы с моим первоначальным ответом и за указание на правильное решение.

person Martin Pilát    schedule 15.07.2020
comment
Спасибо за ваше вмешательство, профессор @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); - person Farida ben belkacem; 16.07.2020