Мой код не будет работать, если каждая часть не помещается в отдельную кнопку? - PullRequest
0 голосов
/ 06 февраля 2019

Точная проблема

Я обнаружил, что если у меня есть эти две части кодов, написанных друг за другом в одном месте, т.е. одной кнопкой, функции, связанные с блоком wait (то есть wait.get() и wait.size()) не сработает.Однако, если у меня каждая часть в отдельной кнопке, все работает отлично.

ЧАСТЬ 1

1- Направляющие агенты households до enter блок-схема

for (Agent i: households){
    enter.take(i);}
traceln("this is 1");

(enter здесь связан непосредственно с wait), затем..

traceln("this is the current wait size: " + wait.size());

На этом этапе агенты предположительно находятся в ожидании.Однако wait.size() возвращает this is the current wait size: 0.Хотя агенты отображаются в ожидании в окне просмотра , которое выглядит так .Эти агенты недоступны с помощью таких функций, как wait.get () или wait.size ()

PART 2

Поэтому эта часть, которая должна выполняться после части 1, не работает

for (int i =0 ; i<wait.size() ; i++){
    collection_main_households.add(wait.get(i).getIndex());
}
wait.freeAll();

Короче говоря, эти коды будут работать только в отдельных кнопках, но я хочу, чтобы они работали, если они написаны друг за другом.

дополнительная информация о модели

В основном, модель предназначена для мобильности населения в некоторых районах.На этапе stratup в main я создаю и связываю каждую семью, основываясь на таблице, содержащей количество членов и их возраст.

Способ построения этих семейств основан на household агенте, который используется в качестве ядра для linking и перемещает членов его семейства (father, mother и children).Таким образом, если я переместил household из A в B, message будет отправлено его членам с указанием переместить их из A в B.

Код вверх только для первых двух шагов после домохозяйствполностью сформированы и готовы к размещению в своих первоначальных местах.Процесс выглядит следующим образом:

  1. Я использую enter, чтобы включить домохозяйства в блок-схему
  2. Затем все собрались во временном статусе wait, прежде чем они выйдут на свободу.
  3. С помощью команды wait.free(this) я использую selectOutPut(IN/Out), чтобы распределить эти households в их исходные местоположения.
  4. Когда household входит в его местоположение (в данном случае новый * 1063)*) Я send a message всем своим подключенным членам просим их отправиться в одно и то же место назначения, используя те же команды enterID.take(this) и waitID.free(this).На этом этапе все эти компоненты (household и его члены father, mother и children) должны быть в одном и том же node.
  5. Я повторяю процесс в случае сhousehold хочет изменить свое местоположение.

Я использовал collections, чтобы обойти проблему динамического изменения и доступа к Hash Lists, сгенерированному с помощью wait.waitingEntities.Имеет значение то, что если wait брать одновременно с enter, как это решить?

снимок экрана

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Одна вещь, с которой у меня раньше были проблемы, это порядок одновременных событий.Я предлагаю пойти поэкспериментировать и изменить его с LIFO на FIFO в разделе случайности и посмотреть, изменит ли это что-нибудь для вас.

0 голосов
/ 06 февраля 2019

При запуске агенты еще не были отправлены на потоковую диаграмму, поэтому блок ожидания действительно будет пустым и будет иметь размер 0.

Похоже, вы пытаетесь добавить домохозяйства в коллекцию.Если вы хотите добавить все домохозяйства в одну коллекцию, просто используйте население и свяжите это население с вашим источником.Население предоставляет функциональность базовой коллекции.

В коде запуска вашего домашнего агента вы также можете добавить туда или несколько коллекций в зависимости от параметров агента.

...