Я пытаюсь подражать тому, что делает QUEST, когда буфер запрашивается для определенной Части. Там, если часть не находится в буфере, запрос остается в ожидании, и если часть поступает в буфер, она освобождается на машине, запрашивающей ее. Я также видел это поведение в SimPy, которое является еще одним движком DES.Запросить сущность из Anyogic Process Block и подождать, пока она не будет доступна, если в данный момент ее нет,
Я не могу найти простой способ сделать это в AL. Блок очереди имеет следующие методы:
- релиз (Агент): Вернется ложь и забыть о запросе, если есть не агент, как один не указано
- удалить (агент): Будет ли возвращать нулевое значение, если есть нет агент в очереди
так эти методы не будут делать то, что я хочу ... Это становится немного более сложным, так как очередь содержит агент с параметрами, и я хочу, чтобы запросить конкретный набор параметров (скажем, агенты имеют числовой параметр, который может идти от 1 до 3, и меня интересуют только агенты в очереди, если этот параметр h как значение 2). Кроме того, есть ряд агентов, тянущих эти агенты из очереди одновременно, и я хотел бы приоритет установить (скажем, FIFO) так что есть несколько вещей, которые я пробовал и не привожу меня в никуда:
- Использование блока захвата вместо очереди и добавления агентов во встроенную очередь в блоке захвата. -> Я не могу найти правильный метод для захвата из буфера по-другому из блока буфера (поэтому я перешел к варианту 2), но у пользователя seize есть многообещающий выбор ресурсов для выбора, который может помочь с выбором параметра down-selection
- Использование блока захвата и хранение агентов в пуле в качестве ресурсов. проблемы с динамическим созданием ресурсов, захват соответствующего и т. д.
- Создание очереди запросов, которые возвратили null из очереди. Это звучит как излишество, но я посмотрю на него.
Все они кажутся немного сложными для такой простой вещи в других программах для симуляции, поэтому мне интересно, не хватает ли я чего-то или если кто-то столкнулся с этим вопросом до
Как вы упомянули, Anylogic не имеет родного способа борьбы с такими проблемами. То, что вы можете сделать, это хранить запросы, которые не выполнялись в совокупности (или блоке ожидания), и каждый раз, когда агент входит в очередь, вы проверяете эти запросы, независимо от того, отвечает ли агент требуемым параметрам. Это в основном то, что делают QUEST и SimPy (автоматически, хотя). Многие функции, доступные в другом программном обеспечении, все еще должны быть реализованы в Anylogic, но объектно-ориентированное программирование позволяет вам делать практически все (с небольшим количеством Java-кода) – luizfvpereira