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

Емкость блока сервера сущностей составляет 1. Это приводит к увеличению длины очереди без обратной связи. Цель состоит в регулировании времени взаимодействия сущностей на основе размера очереди и количества сущностей, ожидающих обслуживания.
В блоке «Генератор объектов» выберите MATLAB action в качестве источника времени. Добавьте этот код в поле Действие по времени между поколениями.
persistent rngInit;
if isempty(rngInit) seed = 12345; rng(seed); rngInit = true; end
% Pattern: Exponential distribution
mu = getAvgInterGenTime();
dt = -mu*log(1-rand());
Время межпоколенческого взаимодействия dt генерируется из экспоненциального распределения со средним значением mu, которая определяется функцией getAvgInterGenTime().
В блоке Очередь объектов (Entity Queue) на вкладке Статистика (Statistics) выберите Количество объектов в блоке (Number of entities in block), n и Средняя длина очереди (Average queue length) l в качестве выходной статистики.
В блоке «Сервер сущностей» выберите MATLAB action в качестве источника времени обслуживания. Добавьте этот код в поле Действие времени обслуживания.
persistent rngInit; if isempty(rngInit) seed = 67868; rng(seed); rngInit = true; end
% Pattern: Exponential distribution
mu = 3;
dt = -mu*log(1-rand());
The service time |dt| is drawn from an exponential distribution with mean |3|.
В блоке Сервер сущностей на вкладке Статистика выберите Число сущностей в блоке, n в качестве выходной статистики.
Добавьте функциональный блок Simulink. В блоке Simulink Function дважды щелкните по сигнатуре функции и введите y = getAvgInterGenTime().
В блоке функции Simulink:

Добавьте два блока In1 и переименуйте их в numInQueue и numInServer.
numInQueue представляет текущее количество объектов, накопленных в очереди, и numInServer представляет текущее количество объектов, накопленных на сервере.
Для добавления этих двух входных данных используйте команду «Добавить блок».
Использовать блок смещения и установить Bias параметр как 1. Постоянное смещение 1 это гарантировать ненулевое время между поколениями.
При необходимости выберите Function Connections в разделе Information Overlays на вкладке Debug, чтобы отобразить цикл обратной связи от блока Simulink Function до блока Entity Generation.
В родительской модели соедините статистику Количество сущностей в блоке, n из блоков Очередь сущностей и Сервер сущностей с блоком Функция симулятора.
Подключите блок Scope к средней длине очереди, l статистика из блока Entity Queue. Цель состоит в изучении средней длины очереди.
Увеличение времени моделирования до 10000 и смоделировать модель.
Обратите внимание, что средняя длина очереди l в области не увеличивается из-за эффекта обратной связи для нежелательной скорости генерации объекта.

Генератор объектов | Очередь сущностей | Сервер сущностей | Терминатор объекта