Побудова моделі дискретних подій із SimPy

Дискретно-подієве моделювання в Python

Dr Diogo Costa

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

Перш ніж будувати модель

  • Зрозумійте динамічну систему

  • Визначте цілі моделі дискретних подій

  • Визначте процеси:

    • паралельні
    • послідовні
  • Визначте відповідні ресурси SimPy (resource, container, store)

  • Визначте архітектуру моделі:

    • Змінні стану
    • Робочий потік моделі
    • Генератори
Дискретно-подієве моделювання в Python

Динамічна система та цілі моделі

Зрозумійте динамічну систему

  • Які чинники впливають на її поведінку?
  • Які процеси/події треба включити?

Цілі моделі

  • Часто використовується для оптимізації систем
  • Що саме ви хочете оптимізувати?

    • Більше клієнтів
    • Швидший час опрацювання
    • Оптимальний розподіл ресурсів
  • Змінні стану для моніторингу цих цілей

Дискретно-подієве моделювання в Python

Визначте відповідні ресурси SimPy

Спільні ресурси

simpy.Resource(env, capacity=4)
  • Ресурси, спільні для процесів

Приклади

  • Столи в ресторані
  • Верстати на фабриці
  • Місця в театрі
  • Касири в магазині

Контейнери

simpy.Container(env, capacity, 
init=initial_capacity)
  • Ресурс поводиться як резервуар чи кошик

  • Додавати й вилучати кількість:

.put() та .get()

Приклади

  • Запаси пального на АЗС
  • Вугілля на вугільній електростанції
Дискретно-подієве моделювання в Python

Визначте відповідні ресурси SimPy

Сховище (Store)

simpy.Store(env, capacity=4)
  • Ресурс як крамниця з багатьма товарами

  • За замовчуванням місткість необмежена

  • Комірки для зберігання довільних обʼєктів

  • Додавати й вилучати елементи:

.put() та .get()

Приклади

  • Магазини з різними товарами
  • Комора
  • Майстерня
  • Домогосподарство
Дискретно-подієве моделювання в Python

Обʼєднання подій за допомогою побітових операторів

SimPy використовує побітові оператори, щоб обʼєднувати дві події

Типи операторів у Python

  • Арифметичні, логічні та порівняння

Побітові оператори

  • Побітові обчислення над цілими
  • Очікують два операнди
    • Приклад: a & b, a >> b, a ^ b

У SimPy

  • Побітові оператори створюють умовну подію
  • Очікування обох або однієї з двох подій/процесів

Доречні побітові оператори для SimPy

  • Очікує обидва процеси: __and__() або &
  • Очікує будь-який із процесів: __or__() або |
Дискретно-подієве моделювання в Python

Давайте потренуємось!

Дискретно-подієве моделювання в Python

Preparing Video For Download...