Настройте время генерации сущности через обратную связь

Этот пример показывает систему постановки в очередь, в которой обратная связь влияет на частоту прибытия. Цель цикла обратной связи состоит в том, чтобы стабилизировать очередь сущностей путем замедления скорости генерации сущностей блока Entity Generator, когда больше сущностей накапливается в блоке Entity Queue и блоке Entity Server.

Схема показывает простую систему постановки в очередь с генератором сущностей, очередью сущностей, сервером сущностей и блоком Entity Terminator. Для получения дополнительной информации о создании этой простой системы постановки в очередь, смотрите, Создают Дискретную Модель.

Емкость блока Entity Server 1. Это приводит к увеличению длины очереди без обратной связи. Цель состоит в том, чтобы регулировать время межгенерации сущностей на основе размера очереди и количества сущностей, ожидающих обслуживания.

  • В блоке Сущности Generator выберите MATLAB action как источник времени. Добавьте этот код в поле Intergeneration time 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().

  • В блоке Очередь сущностей, на вкладке Статистика, выберите Количество сущностей в блоке, n и Средняя длина очереди, l как выходная статистика.

  • В блоке Entity Server выберите MATLAB action как источник времени обслуживания. Добавьте этот код в поле Service time 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|.
  • В блоке Entity Server, на вкладке Statistics, выберите Количество сущностей в блоке, n как выходную статистику.

  • Добавьте блок Simulink Function. На блоке Simulink Function дважды кликните сигнатуру функции и введите y = getAvgInterGenTime().

  • В блоке Simulink Function:

  1. Добавьте два блока In1 и переименуйте их в numInQueue и numInServer.

  2. numInQueue представляет текущее количество сущностей, накопленных в очереди, а numInServer представляет текущее количество сущностей, накопленных на сервере.

  3. Используйте Add block, чтобы добавить эти два входов.

  4. Используйте блок Bias и установите Bias параметр как 1. Постоянное смещение 1 - гарантировать ненулевое время межгенерации.

Опционально выберите Function Connections из окна Information Overlays на вкладке Debug, чтобы отобразить цикл обратной связи от блока Simulink Function к блоку Entity Generation.

  • В родительской модели соедините Количество сущностей в блоке, n статистики из блоков Entity Queue и Entity Server с блоком Simulink Function.

  • Соедините блок Scope с блоком Average queue length, l statistic из блока Entity Queue. Цель состоит в том, чтобы исследовать среднюю длину очереди.

  • Увеличьте время симуляции, чтобы 10000 и моделируйте модель.

  • Обратите внимание, что Средняя длина очереди, l в возможности неинвестирует из-за эффекта обратной связи для частоты генерации обескураженных сущностей.