Skip to main content
LibreTexts - Ukrayinska

5.3: Час авансу та списки подій

  • Page ID
    28728
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)

    У цьому розділі розглядається, як моделювання проходить через час, плануючи події подій та обробляючи кожне з них по черзі. Загалом модель моделюється як впорядкована за часом послідовність виникнення подій. Входження подій обробляються по одному. Кожна подія змінює значення однієї або декількох змінних стану і може планувати інші події. Цей імітаційний підхід ілюструється одним можливим моделюванням двох робочих станцій у послідовній моделі.

    Список подій - це впорядкований за часом список всіх подій, запланованих на поточний час і в майбутньому. Моделювання продовжується шляхом видалення першої події у списку та його обробки. Ця обробка може призвести до того, що до списку буде додано одне або кілька подій, які будуть оброблені в поточний час або в майбутньому. Зауважте, що зі списку видаляється лише одна подія за раз. Всі інші залишаються в списку. Після обробки виникнення події список буде складатися з подій, які вже є у списку, коли перша подія була вилучена, плюс ті, які були додані обробкою цієї події.

    Для моделі двох робочих станцій двигун імітації повинен мати справу з шістьма подіями, які змінюють значення змінних стану. Кожна з цих подій повинна бути запланована вчасно і оброблена. Ці події - це прибуття сутності (частини) на кожну станцію, а також початок і кінець обробки.

    У будь-який момент часу список подій може містити такі випадки подій у майбутні моменти часу:

    • Сутність прибуває на робочу станцію Подія.
    • Сутність закінчує службу на робочій станції події.
    • Сутність закінчує службу на робочій станції B події.

    Інші події можуть відбуватися тільки в той же момент часу, що і інша подія.

    • Початок обслуговування на робочій станції Подія, яка може статися або коли сутність приходить на робочу станцію A (приходить на робочу станцію подія), або коли сутність завершує обробку на робочій станції A (закінчує службу на робочій станції A подія).
    • Сутність надходить до робочої станції B подія, яка виникає кожен раз, коли сутність закінчує службу на робочій станції відбувається подія. (Нагадаємо, немає затримки часу для переміщення між робочими станціями.)
    • Початок обслуговування на робочій станції B подія, яка може статися або коли сутність прибуває на робочу станцію B (приходить на робочу станцію B подія) або коли сутність завершує обробку на робочій станції B (закінчує службу на робочій станції B подія).

    Для ілюстрації розглянемо одну можливість для списку подій на початку моделювання.

    Поточний час моделювання: 0

    Наступний час моделювання = Час першої події в списку = 0.0

    \ [
    \ begin {масив} {l|ll}
    \ text {Подія} &\ text {Час виникнення} &\ text {Ідентифікатор сутності}\
    \ hline\ text {Сутність прибуває до A} & 0.0 & 1
    \ end {масив}
    \ nonumber\]

    Моделювання розпочнеться з приходом першої сутності в момент 0.

    Таким чином, першим завданням движка моделювання є обробка події Entity Arrives to A в момент 0. Це завдання включає в себе видалення Entity приходить до події зі списку і виконання дій, пов'язаних з подією: планування наступної сутності приходить до події і планування події Entity Start Service, якщо робоча станція A простоює (який він спочатку). Після того, як сутність надходить до події обробляється список подій виглядає наступним чином, припускаючи, що наступний прихід на робочу станцію A знаходиться на час 5.0:

    Поточний час моделювання: 0
    Наступний час моделювання = Час першої події у списку = 0.0

    \ [
    \ begin {масив} {l|ll}
    \ text {Подія} &\ text {Час виникнення} &\ text {Ідентифікатор сутності}
    \\ hline\ text {Початок служби в A} & 0.0 & 1\\
    \ text {Сутність приходить до A} & 5.0 & 2
    \ end {масив}
    \ номер\]

    Суб'єкт з ідентифікаційним номером 2 прибуде в час 5.0 і Кінець служби на робочій станції A для сутності з ідентифікатором номер 1 відбудеться в момент 8.0.

    Двигун моделювання просуває час до наступної події на час 5.0 і обробляє сутність приходить до події для сутності з ідентифікатором 2. Це означає, що Entity Прибуває до A подія буде видалено зі списку, а End Service at A подія залишиться в списку.

    Під час 5.0 ресурс робочої станції A знаходиться в зайнятому стані. Таким чином, сутність з ID 2 потрапляє в чергу на ресурс робочої станції А. Жодного запису для цієї сутності не буде розміщено у списку подій. Крім того, обробка цієї події призводить до події Entity Прибуває до A буде заплановано на час 32.5 для сутності з ідентифікатором 5. Це означає, що наступне входження сутності приходить до події події поміщається в календарі подій в час 32.5.

    Таким чином, після обробки Entity Прибуває до події події в той час 5.0, список подій складається з End Service at A подія, яка раніше була в списку плюс наступний Сутність Прибуває до події, яка була недавно розміщена в списку, як показано нижче.

    Поточний час моделювання: 5.0
    Наступний час моделювання = Час першої події у списку = 8.0

    \ [
    \ begin {масив} {l|cl}
    \ text {Подія} &\ text {Час виникнення} &\ text {Ідентифікатор сутності}
    \\ hline\ text {Завершити службу в A} & 8.0 & 1\\
    \ text {Сутність прибуває до A} & 32.5 & 3
    \ end {масив}
    \ номер\]

    Далі, двигун моделювання просуває час до 8.0, щоб обробити закінчення служби на подію для сутності 1. Суб'єкт з ідентифікаційним номером 1 прибуде на робочу станцію B в час 8.0, оскільки немає затримки руху. Сутність з ідентифікатором № 2 покине чергу ресурсу робочої станції А і почне обробку за допомогою робочої станції ресурсу, який тільки що став простоювати. Таким чином, ресурс робочої станції А стає зайнятим.

    Таким чином, після обробки End Service at A подія, сутність приходить до A подія залишається в списку і сутність приходить до B подія, а також Початок служби на подію A додаються.

    Поточний час моделювання: 8.0 Час
    наступного моделювання = Час першої події у списку = 8.0

    \ [
    \ begin {масив} {l|cl}
    \ text {Подія} &\ text {Час виникнення} &\ text {Ідентифікатор сутності}\
    \ hline\ text {Сутність надходить до B} & 8.0 & 1\\
    \ text {Початок служби в A} & 8.0 & 2\\
    \ text {Сутність надходить до А } & 32.5 & 3
    \ end {масив}
    \ nonumber\]

    Двигуни моделювання зазвичай використовують стратегію, згідно з якою вся можлива обробка однієї сутності в поточний час моделювання буде виконана перед будь-якою обробкою будь-якої іншої сутності. Інший спосіб сказати це полягає в тому, що суб'єкт буде діяти якомога далі, поки не перешкоджає затримка часу або очікування недоступного в даний час ресурсу. Це означає, що нові події в поточний час моделювання для цієї сутності розміщуються першими у списку подій. Таким чином, у наведеному вище списку сутність надходить до події B для сутності з ідентифікатором 1 в час 8.0 передує запуску служби на подію A для сутності з ідентифікатором номер 2.

    Інша частина моделювання обробляється аналогічним чином.