exponenta event banner

Основные системы очередей моделей

В этом примере показано, как моделировать базовые системы организации очередей при моделировании дискретных событий с использованием блоков «Очередь сущностей» и «Сервер сущностей».

Блок «» Очередь сущностей «» хранит сущности в течение периода времени, который не может быть определен заранее. Повседневный пример очереди - люди, ожидающие регистрации в магазине. Покупатель не может заранее определить, как долго он должен ждать завершения покупки. Можно использовать очередь объектов в различных приложениях, таких как самолеты, ожидающие доступа к взлетно-посадочной полосе, или сообщения, ожидающие передачи. Блок очереди сущностей имеет емкость хранилища, политику сортировки сущностей и политику перезаписи сущностей. На основе этих параметров блок пытается вывести объекты в зависимости от того, принимает ли дочерний блок новые объекты.

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

В этом примере представлены основные модели очередей, показывающие, как:

  • Модельная очередь FIFO, очередь LIFO и приоритетная очередь.

  • Укажите политики перезаписи сущностей, когда очередь достигает емкости.

  • Настройка и изменение времени обслуживания объектов.

  • Назначение и изменение атрибутов сущности на основе событий.

  • Ознакомьтесь со статистикой длины очереди во время моделирования.

Сортировка объектов с помощью блока очереди объектов

В этой модели показано, как сортировать сущности путем изменения политики сортировки очереди. Блок Entity Queue поддерживает три политики сортировки сообщений:

  • Last-in-first-out (Last-in-first-out (LIFO)) - новейший объект в хранилище удаляется первым.

  • First-in-first-out (FIFO) - самый старый объект в хранилище отходит первым.

  • Приоритет - объекты сортируются на основе их приоритета. Приоритетную очередь можно использовать только в том случае, если снят флажок Перезаписать самый старый элемент, если очередь заполнена.

В модели ниже показаны четыре различных поведения сортировки объектов: FIFO, LIFO, Priority в порядке возрастания и Priority в порядке убывания.

Четыре идентичных блока генератора объектов генерируют по 10 объектов. Каждый блок использует повторяющийся шаблон последовательности для времени межгенерации объектов dt.

После генерации 10 сущностей, время между поколениями dt установлен в бесконечность, чтобы прекратить генерирование объектов. В блоке Генератор объектов (Entity Generator) в поле Действие времени межгенерации (Intergeneration time) используется этот код.

persistent SEQ;
persistent idx;
if isempty(SEQ)
    % Generate 10 entites with 1 second intervals.
    SEQ = [1 1 1 1 1 1 1 1 1 1];
    idx = 1;
end
if idx > numel(SEQ)
    % Stop entity generation after generating 10 entities.
    dt = inf;
else
    dt = SEQ(idx);
end

Блок генерирует объект и задает атрибут Attribute1 на каждом объекте. Атрибуты можно использовать для представления элементов или свойств объектов. В этом примере первый объект несет значение 1, и значение атрибута каждого сгенерированного объекта увеличивается на 1. Для этого в блоке «Генератор объектов» на вкладке «Действия с событиями» в поле «Создать действие» используется этот код.

% Pattern: Repeating Sequence
persistent SEQ1;
persistent idx1;
if isempty(SEQ1)
    SEQ1 = [1 2 3 4 5 6 7 8 9 10];
    idx1 = 1;
end
if idx1 <= numel(SEQ1)
    entity.Attribute1 = SEQ1(idx1);
end
idx1 = idx1 + 1;

Сгенерированные объекты пересылаются в четыре блока очереди объектов. Чтобы показать поведение сортировки, блоки Entity Queue соединяются с четырьмя идентичными блоками Entity Gate, настроенными как элементы освобождения. Затвор освобождения позволяет пройти одному объекту, когда он получает объект, несущий положительное значение (больше, чем 0) значение из порта управления. Затворы блокируют объекты для первого 10 секунд и сохранить их в очереди. После первых 10 секунд вентили позволяют проходить одному объекту в секунду на основе политики сортировки.

Моделирование модели. Откройте инспектор данных моделирования и убедитесь, что объекты, отходящие от каждого блока очереди объектов, сортируются на основе политики сортировки очереди.

  • На первом графике показаны объекты, отходящие от очереди с политикой FIFO. Первая сущность с Attribute стоимость 1, отходит от очереди, когда врата открываются в момент времени 11. Последующие объекты покидают очередь в том же порядке, что и их генерация, с увеличением значения атрибута.

  • На втором графике показаны объекты, отходящие от очереди с политикой LIFO. Эта политика изменяет последовательность отхода объекта, начиная с объекта с наибольшим значением атрибута.

  • Третий график показывает объекты, отходящие от приоритетной очереди, которая сортирует объекты на основе их атрибутов в порядке возрастания, а не в порядке их входа в очередь. Объект, несущий наименьшее значение атрибута, отходит первым. Последующие сущности следуют той же политике.

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

Политики перезаписи объектов очереди

Можно указать, что делает блок очереди сущностей, когда блок достигает своей емкости, задав политику перезаписи сущностей. Укажите политику, установив или сняв флажок Перезаписать самый старый элемент, если очередь заполнена.

  • Если флажок Перезаписать самый старый элемент, если очередь заполнена, снят, блок не принимает новые объекты, когда очередь заполнена. Это поведение блокирующей очереди.

  • Если установлен флажок Перезаписать самый старый элемент, если очередь заполнена, то блок всегда принимает входящий объект путем перезаписи самого старого объекта в хранилище. Блок перезаписывает самый старый объект, но объект, покидающий блок, определяется политикой сортировки очереди.

В этой модели два идентичных блока генератора объектов генерируют объекты каждый 1 второй. Объекты пересылаются в два блока очереди объектов, каждый из которых имеет емкость 10 и политику сортировки объектов FIFO. Однако очередь блокировки настроена на то, чтобы не принимать новые объекты, когда ее очередь заполнена, в то время как очередь перезаписи настроена на перезапись самой старой сущности, когда ее очередь заполнена. Очередь блокировки и очередь перезаписи соединены с двумя идентичными блоками сервера сущностей, каждый из которых имеет значение времени обслуживания 25 секунд. Частота формирования объектов блока генератора сущностей намного выше, чем частота обслуживания блока сервера сущностей. Это различие приводит к накоплению объектов в блоке «Очередь объектов».

Смоделировать модель и открыть блок «Просмотр последовательностей». Обратите внимание, что блоки «Генератор объектов 1» и «Генератор объектов 2» первоначально генерируют объекты со значениями данных 0.8147и объекты пересылаются на сервер 1 сущностей и сервер 2 сущностей. Оба блока генератора объектов генерируют второй набор объектов со значениями данных 0.9058, которые хранятся в очереди блокировки и перезаписи, поскольку оба блока сервера сущностей заполнены. Остальные сгенерированные объекты также сохраняются в блоках очереди объектов.

Обратите внимание, что блок «» Очередь сущностей 1 «» прекращает прием новых сущностей в хранилище на время 11. Однако очередь сущностей 2 разрешает новую сущность с атрибутом 0.9706 в хранилище и перезаписывает самую старую существующую сущность, которая имеет значение данных 0.9058.

Настройка времени обслуживания сущности

В базовой системе организации очередей можно использовать блок сервера сущностей для моделирования задержек на основе процессов в системе. Источник, указывающий задержку, можно определить путем изменения параметра Service time source блока Entity Server.

В этом примере показаны четыре различных источника, которые можно использовать в зависимости от приложения:

  • Dialog - Можно определить постоянное значение времени обслуживания. В первом массиве моделирования объекты задерживаются для 2 секунд. Затем блок пытается переслать объекты следующему блоку.

  • Signal port - Время обслуживания определяется входящим сигналом Simulink ®. Во втором шаблоне моделирования блок использует значения сигнала нарастания в качестве источника времени обслуживания.

  • Attribute - указанное значение атрибута сущности определяет время обслуживания. В третьем массиве моделирования каждый объект несет Attribute1 со значением 4 который является источником времени обслуживания.

  • MATLAB action - Можно ввести код MATLAB™ в поле Действие времени обслуживания и присвоить переменную dt, который является параметром, используемым моделью в качестве времени обслуживания. В четвертом шаблоне моделирования время случайного обслуживания dt = rand(1,1); используется, и код устанавливает случайное значение времени обслуживания, которое равномерно распределено между 0 и 1.

Моделирование модели и анализ результатов

Смоделировать модель и наблюдать за инспектором данных моделирования, который отображает объекты, пересылаемые блоком сервера сущностей.

Построение простой системы очередей для изменения атрибутов сущности

Можно присоединить атрибуты к объектам для представления их элементов. В системе организации очередей можно использовать действия в качестве ответов на события и изменять атрибуты сущности. Например, можно изменить значение атрибута объекта, когда объект входит и выходит из блока «Очередь объектов». В блоке Очередь сущностей (Entity Queue) на вкладке Действия с событиями (Event actions) можно просмотреть набор событий, для которых можно создавать действия.

Предположим, вы хотите смоделировать систему обслуживания клиентов в филиале банка. Филиал имеет двух банковских кассиров, каждому из которых присвоен определенный вид операции. Клиенты прибывают в филиал. Они выбирают номер для своей операции и направляются к соответствующему банковскому кассиру. Клиенты покидают филиал после завершения транзакции.

В этом примере прибытие клиента моделируется блоком генератора объектов. Предполагается, что клиенты прибывают с постоянным промежуточным временем, и Период равен 1. Каждому сгенерированному объекту присваивается атрибут TransactionType для представления запросов клиента. TransactionType|is initialized as |0 поскольку транзакция неизвестна до входа клиентов в филиал.

Зал ожидания представлен блоком Entity Queue. При входе клиента в зал ожидания ему присваивается номер соответствующего банковского кассира. Это действие представлено изменением атрибутов объекта в действиях события блока «Очередь объектов». Ниже приведено действие, вызываемое событием записи объекта в блок очереди объектов.

Анализ длины очереди с использованием статистики и логических очередей

Статистику очереди можно использовать для анализа и понимания поведения очереди в моделировании. В частности, можно измерить:

  • Количество объектов, отправленных из очереди в дочерний блок.

  • Количество объектов в определенное время моделирования.

  • Среднее ожидание объектов в очереди перед выходом из блока.

  • Средняя длина очереди или количество объектов, извлеченных из очереди блоком «Поиск сущности».

Понимание этих статистических данных может дать представление о поведении модели. Дополнительные сведения о статистике очереди см. в разделе Интерпретация моделей SimEvents с помощью статистического анализа.

В этом примере представлены два различных метода визуализации и определения длины очереди.

Чтобы определить, хранит ли очередь какие-либо объекты, можно вывести статистику, соответствующую количеству объектов, хранящихся в блоке.

Для вывода статистики выполните следующие простые шаги.

  1. Включите выходной сигнал n из блока очереди. В диалоговом окне блока на вкладке Статистика (Statistics) установите флажок Количество объектов в блоке (Number of entities in block, n).

  2. Из библиотеки Sinks в наборе библиотек Simulink ® вставьте в модель блок Scope. Подключите выходной порт n блока очереди к входному порту блока Scope.

    Область показывает, пуста ли очередь.

Дополнительные сведения о визуализации статистики очереди см. в разделе Исследование статистики и визуализация результатов моделирования.

Секционирование очереди для понимания длины очереди

Можно разбить очередь на разделы, чтобы получить дополнительные сведения о длине и поведении очереди во время моделирования.

Предположим, что вы хотите определить, какая доля времени в очереди превышает 10 для очереди с емкостью 100. Это можно исследовать с помощью пары очередей, соединенных последовательно. Очереди имеют длину 90 и 10. Вместе они представляют собой очередь вместимостью 100.

Разделение исходной очереди на две очереди меньшего размера позволяет собирать статистику, связанную с одной из очередей меньшего размера. Например, можно просмотреть статистику длины очереди для блока Entity Queue вместимостью 90. При наличии объектов, накопленных в очереди емкостью 90, в означает, что очередь с емкостью 10 заполнен. Таким образом, определяют долю времени, в течение которого очередь имеет емкость 100 имеет минимум 10 сущностей, эквивалентных определению доли времени, в течение которого длина очереди составляет 90 больше, чем 0.

Моделирование модели. Убедитесь, что емкость очереди объектов 90 блок выводит число объектов в блоке, n. Обратите внимание, что в определенных временных интервалах объекты хранятся в блоке, что указывает на то, что очередь с емкостью 10 заполнен.

Визуализация доли времени, в течение которого очередь имеет емкость 10 заполняется, статистический сигнал дополнительно обрабатывается и сравнивается с нулем.

См. также

|

Связанные темы