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

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

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

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

  • В блоке Entity Generator выберите 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 сущностей в блоке, n и Средней длине очереди, l как выходная статистика.

  • В блоке Entity Server выберите 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|.
  • В блоке Entity Server, во вкладке Statistics, выбирают Number сущностей в блоке, n как выходная статистика.

  • Добавьте Функциональный блок Simulink. На Функциональном блоке Simulink дважды кликните функциональную подпись и введите y = getAvgInterGenTime().

  • В Функциональном блоке Simulink:

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

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

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

  4. Используйте блок Bias и установите Bias параметр как 1. Систематическая ошибка 1 должен гарантировать ненулевое время межгенерации.

Опционально, выберите Function Connections из информационных Оверлейных программ под вкладкой Debug, чтобы отобразить обратную связь от Функционального блока Simulink до блока Entity Generation.

  • В родительской модели соедините Количество сущностей в блоке, n статистика от блоков Сервера Очереди и Сущности Сущности до Функционального блока Simulink.

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

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

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