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

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

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

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

Чтобы открыть пример, смотрите Example Model for Discouraged Arrival.

  1. В блоке Entity Generator выберите MATLAB action как Time source. Добавьте этот код в поле 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().

  2. В блоке Entity Queue, во вкладке Statistics, выбирают Number of entities in block, n и Average queue length, l как выходная статистика.

  3. В блоке Entity Server выберите MATLAB action как Service time source. Добавьте этот код в поле 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());

    Время обслуживания dt чертится от экспоненциального распределения со средним 3.

  4. В блоке Entity Server, во вкладке Statistics, выбирают Number of entities in block, n, как выходная статистика.

  5. Добавьте блок Simulink Function из библиотеки SimEvents®. На блоке Simulink Function дважды кликните функциональную подпись и введите y = getAvgInterGenTime().

  6. В блоке Simulink Function:

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

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

    2. Добавьте блок Simulink® Add, чтобы добавить эти два входных параметров.

    3. Добавьте блок Simulink Bias и установите параметр Bias как 1.

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

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

  7. В родительской модели соедините статистику Number of entities in block, n от Entity Queue и блоков Entity Server с блоком Simulink Function.

  8. Соедините блок Simulink Scope со статистической величиной Average queue length, l от блока Entity Queue.

    Цель состоит в том, чтобы исследовать среднюю длину очереди.

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

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

Смотрите также

| | |

Похожие темы