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

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

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

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

void remove_people( Person personToRemove ) - удаляет заданный элемент из реплицированного объекта и удаляет его.

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

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

Другой часто используемый случай: элемент реплицированного объекта (агент) хочет уничтожить сам себя:

get_Main().remove_people( this );

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