Недетерминированные события и процессы

Дискретно-событийное моделирование на Python

Diogo Costa (PhD, MSc)

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

Недетерминированность событий

ПРИМЕЧАНИЕ: Термины «событие» и «процесс» используются как синонимы.

Что такое недетерминированность события (или процесса)?

  • Невозможность точно предсказать ход процесса
  • Такой процесс называется «недетерминированным»

Почему это важно?

  • Природные и антропогенные явления часто недетерминированы
  • При каждом повторении они протекают по-разному
  • Их продолжительность нельзя определить точно
  • Могут существенно влиять на результат системы
Дискретно-событийное моделирование на Python

Примеры недетерминированных процессов и событий

Природный мир

  • Момент извержения вулкана
  • Точный момент начала дождя
  • Время и место удара молнии
  • Время и место образования торнадо

Антропогенные процессы

  • Момент поломки оборудования
  • Момент, когда человеку нужно в туалет
  • Момент, когда ребёнок начинает плакать
  • Задержка коммерческого рейса
Дискретно-событийное моделирование на Python

Моделирование недетерминированных событий в дискретно-событийных моделях

Недетерминированные процессы

  • Оказывают непредсказуемое воздействие на систему
  • Точная продолжительность неизвестна

Статистика

  • Позволяет моделировать вариативность длительности процессов
  • Для этого удобен пакет random

  • Пример: random.randint(start, end)

import random

# Non-deterministic processes
process_1 = [5, 15]

while time < simulation_time:

   # Update simulation time: process_1
   time += random.randint(
               process_1[0], 
               process_1[1])

Дискретно-событийное моделирование на Python

Моделирование недетерминированных событий с помощью SimPy

  • Специальных методов для недетерминированных процессов нет

  • Вариативность длительности рассчитывается так же, как в моделях без SimPy

  • Передайте нужную статистику в .timeout()

import random

# Non-deterministic processes
process_1 = [5, 15]

while True:

  # Update simulation time: process_1
  yield env.timeout(random.randint(
         process_1[0], 
         process_1[1]))
Дискретно-событийное моделирование на Python

Давайте потренируемся!

Дискретно-событийное моделирование на Python

Preparing Video For Download...