Ошибка в deleteSelf (): агент должен принадлежать некоторому населению - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть следующая модель, где у меня есть агент для поддонов и агент для коробок с множеством коробок внутри агента для поддонов. Таким образом, поддоны прибывают, затем вилочный погрузчик перемещает их к столу, и затем они входят в блок «задержки», который доставляет его к входному блоку процесса коробки. Внизу вилочные погрузчики с блок-схем снимают коробки с поддонов и перемещают их в узел, как показано на рисунке. После того как все ящики будут удалены из поддона, вилочный погрузчик вынимает поддоны, и они опускаются.

В настоящее время удаленные поля добавляются в очередь и остаются там. Я хочу удалить / уничтожить их с раковиной. Когда я добавляю приемник вместо / или после очереди, я получаю следующую ошибку

Exception during discrete event execution:
root.pallets[0].boxes[-1]:
Error in deleteSelf(): Agent should belong to some population
java.lang.RuntimeException: root.pallets[0].boxes[-1]:
Error in deleteSelf(): Agent should belong to some population

Есть ли способ обойти эту ошибку. Я удаляю коробки с поддонов в диаграмме состояний внутри агента поддонов, который зацикливается до тех пор, пока все ящики не будут удалены:

if (boxes.size() > 0){
Box b = boxes(0);
b.box_location = this.getXYZ();
remove_boxes(b);
get_Main().enter.take(b);
current_N_Boxes--;}

Спасибо! enter image description here

1 Ответ

0 голосов
/ 12 апреля 2020

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

Существует несколько способов справиться с этим:

  1. Используйте блоки Batch / Unbatch или Pickup / Dropoff, чтобы «правильно» располагать агентов внутри агентов, причем родители и потомки перемещаются по процессам в разное время. (AnyLogi c обрабатывает наличие агентов, которые не были разобраны / удалены, по-прежнему существуют в популяции по умолчанию.)

  2. Создайте свои блочные агенты в основной популяции в Main и используйте коллекции в ваших агенты паллет, чтобы ссылаться на коробки внутри них. Затем вы можете «удалить» их из поддона (удалив их из коллекции поддонов), сохраняя при этом их в основной группе, пока они не завершат свою часть процесса.

  3. Переместите ваших агентов-боксеров в группу в Main (скажем, unpalettedBoxes), удаляя их из поддона (используйте функцию goToPopulation в агенте-боксере), и действуйте, как в 2.

...