#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, но выполняет цикл и подсчитывает накопление за вас.)