Приоритетная очередь из 2 источников в AnyLogic

#priority-queue #anylogic

Вопрос:

Добрый день! Я попытался построить сетевую модель в AnyLogic 8.7.6. У меня есть 2 источника с разными приоритетами (пакеты из первого источника получают приоритет 2, а пакеты из второго источника получают приоритет 1). Пакеты из источников передаются в очередь. Очередь должна отсортировать их по приоритету.

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

Параметры приоритета определяются в Агентах у Источников.

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

Я провел простой эксперимент. Источник 1 генерирует 1 агента в секунду, а Источник 2 генерирует 10 агентов в секунду. Мы видим, что очередь пуста 🙁

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

Я понятия не имею, почему. Очередь не сортирует их в соответствии с их приоритетом.

P.S. Извините, у меня есть русскоязычная версия Anylogic.

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

1. Как мы можем узнать, не работает ли сортировка, если в очереди ничего нет? Пожалуйста, удалите все соединения из очереди, чтобы образовалась очередь…если у вас есть две очереди, подключенные друг к другу, агенты войдут в первую и сразу перейдут в следующую очередь… таким образом, они никогда не имеют приоритета, потому что они никогда не стоят в очереди в первой очереди, где, я полагаю, вы устанавливаете приоритеты.

2. Спасибо! Я понимаю, в чем была моя проблема. Очередь не может ничего сортировать, так как она ничего не собирает. Агенты немедленно покидают очередь. Так просто…. Однако число моих агентов начинается с 39. Не 1….

3. (Это было мое самое первое утверждение в моем первоначальном ответе 😉 ) Вы можете игнорировать номер агента или создать свою собственную функцию и выбрать, что вы хотите отобразить. Проверьте мою последнюю фотографию в моем обновленном вопросе. (Если мой ответ помог вам решить вашу проблему, не забудьте принять его)

Ответ №1:

Не видя емкости очереди, если у вас есть две очереди, соединенные друг с другом, агенты войдут в первую и сразу перейдут в следующую очередь… таким образом, они никогда не имеют приоритета, потому что они никогда не стоят в очереди в первой очереди, где, я полагаю, вы устанавливаете приоритеты.

Попробуйте удалить соединение между двумя очередями и просто посмотрите, будут ли агенты упорядочены в соответствии с вашим приоритетом.

Смотрите небольшой тест ниже

У меня есть пользовательский тип агента с переменной priority и простой блок-схемой с 2 источниками и очередью

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

В соответствии с вашим примером я устанавливаю переменную приоритета агентов, созданных в источнике 1, на 2, а в источнике 2 они установлены на 1.

В очереди я устанавливаю порядок заказа на основе приоритета и говорю блоку использовать переменную приоритета внутри агентов (чем выше, тем выше приоритет)

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

Для примера я установил source1 для генерации агентов каждую минуту, а source 2-для генерации каждую секунду.

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

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

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

Вы всегда можете создать пользовательскую функцию toString (), чтобы определить, что должно отображаться при нажатии на блок очереди

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

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

1. Спасибо вам за ваш ответ. Нет, это не работает. Я просто оставляю два источника, соединяю их с очередью, а затем соединяю очередь с приемником. Источники генерируют агентов с параметром «Приоритет». Сортировка очереди производится по этому параметру. Вместимость очереди не ограничена.

2. Спасибо за отзыв, я обновил свой ответ очень простым примером. Я надеюсь, что это поможет вам найти приемлемое решение вашей проблемы. Если это все еще не помогает, пожалуйста, предоставьте подробную информацию о приоритизации ваших блоков, аналогично тому, что я сделал

3. И что еще более интересно, очередь может сортировать пакеты внутри агентов, которые были сгенерированы в одно и то же время. Итак, если я заменю два источника одним источником. И этот источник генерирует агентов с помощью uniform_discr(1,5). Очередь сортирует пакеты в пределах одной метки времени создания.

4. Очередь будет сортировать агентов каждый раз, когда в очереди появляется новый агент. Не уверены, решена ли ваша проблема сейчас или нет?

5. Я обновил задачу. Нет, это все равно не работает 🙁