agent.goToPopulation не работает при входе в очередь с помощью AnyLogic

#anylogic

#anylogic

Вопрос:

Я надеялся, что смогу использовать действие On Enter для очереди, чтобы добавить агента в определенную совокупность, используя:

 agent.goToPopulation(expeditedCases);
 

введите описание изображения здесь

Однако во время выполнения я вижу, что очередь заполняется, но никакие агенты не входят ни в одну из коллекций агентов?

введите описание изображения здесь

Ответ №1:

Способ, которым вы пока запускаете свою модель, является чисто DES, поэтому ваши агенты не являются частью какой-либо совокупности, поэтому используемая вами функция не работает. Вместо этого выполните следующие действия в источнике:

введите описание изображения здесь

Конечно, вместо A используйте необходимый тип агента.

Комментарии:

1. Спасибо, но все еще не работает. Я установил для этого значение adverseEvents population, чтобы все популяции были пустыми во время выполнения.

2. Да, это ожидаемо, потому что у вас есть только очереди и приемник в конце. Таким образом, очередь не задерживает агента ни на секунду. Мгновенно агент переходит от источника к приемнику. Как только агент попадает в приемник, он удаляется и больше не существует (таким образом, пустое заполнение). Чтобы решить эту проблему, используйте блок «Exit» вместо «Sink».

3. ах, спасибо. Любые советы о наилучшем способе удаления X количества агентов из очереди в день?

4. Вы могли бы использовать циклическое событие со временем повторения 1 день. В поле действия события используйте цикл for с числом циклов, равным количеству агентов, которые вы хотите удалить, и коду в теле потребуется использовать функцию «удалить (0)», поэтому вы пишете: queue.remove(0). 0 удобно использовать, потому что вы будете продолжать удалять первый в очереди. Обязательно добавьте условие, что это должно выполняться только в том случае, если размер очереди больше 0, поэтому if(queue.size()> 0) в противном случае у вас будет ошибка.

5. Спасибо. Мне нужно расставить приоритеты в очереди, но по ряду переменных агенты — насколько они близки к достижению 15 дней с момента создания и серьезности

Ответ №2:

Ваш подход действительно работает, но, поскольку вам нечем удерживать своих агентов после очередей, они сразу же попадают в Sink очередь, после чего их удаляют из популяции, частью которой они являются.

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

Однако такое использование популяций агентов не является нормальным подходом в «чистой» модели процесса, подобной этой. В любом случае у вас есть доступ к агентам внутри каждой очереди (через функцию очереди agents ), если вам это нужно. И, например, это может быть также / вместо этого то, что вы хотели показать визуально с помощью анимации агентов (например, с разными цветами в зависимости от очереди / состояния, в котором они находились). Это требует использования разметки пространства (или присвоения координат агентам), чтобы они существовали где-то пространственно, пока они перемещаются по потоку процесса.

Комментарии:

1. Спасибо. Я использовал коллекции для периодического сбора статистики, как в примере AnyLogic за 3 дня.

2. Ах да, это одно из преимуществ: доступ к статистике по населению. (Хотя вы также можете просто вычислить статистику «вручную», используя Java в функции AnyLogic: например, статистика count population просто перебирает агентов внутри, считая те, где условие истинно, что сводится к 3 или 4 строкам Java; статистика population по-прежнему требует, чтобы вы написалиосновное выражение Java, но выполняет цикл и подсчитывает накопление за вас.)