Динамическое создание и удаление агентов

AnyLogic позволяет динамически добавлять и удалять агенты. Чтобы иметь возможность динамического добавления или создания агентов, вложенный агент должен быть популяцией, то есть, в его свойстве Начальное количество агентов должно быть задано количество экземпляров данного типа агента (либо 0, если вы не хотите, чтобы экземпляры агента создавались при запуске модели, а хотите добавить их позднее самостоятельно).

Предположим, у вас есть популяция агентов people типа Person, находящаяся на диаграмме агента Main. Тогда AnyLogic автоматически создаст два метода, позволяющие динамически добавлять и удалять агентов из этой популяции во время выполнения модели:

Person add_people() - добавляет новый объект типа Person в популяцию (и возвращает его для того, чтобы вы могли произвести допонительную инициализацию этого объекта)

void remove_people( Person personToRemove ) - удаляет заданного агента из популяции и уничтожает его.

Обратите внимание, что эти методы создаются в типе агента Main, так что они могут быть вызваны напрямую из любого места типа Main (например, из его действия При запуске или из Действия события и т.д.). При необходимости создания или удаления агента из другого агента, нужно вначале получить доступ к агенту Main. Например, если один человек рождает другого, то вы должны написать такой код в агенте "родителя":

main.add_people() или, что эквивалентно, ((Main)getOwner()).add_people();

Другой часто используемый случай: агент хочет уничтожить сам себя:

main.remove_people( this );

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

Демонстрационная модель: Event Generating New Agents