Построение модели дискретных событий с 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...