Дискретно-подієве моделювання в Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
У SimPy є три типи ресурсів:
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
Створення ресурсу
resource_1 = simpy.Resource(env, capacity=8)
capacity=8)Запит ресурсу
# Відкрити запит ресурсу with resource_1.request() as request:# Надіслати запит на ресурс yield request# Коли ресурс стане доступним yield env.timeout(event_duration)
Варіація попереднього ресурсу
resource_1 = simpy.PreemptiveResource(
env, capacity=1)
Деякі процеси можуть мати пріоритет над іншими
Приклад: ремонтник
Використання подібне до simpy.Resource()
Запит ресурсу з найвищим пріоритетом
with resource_1.request(priority=1) as
request:
yield request
yield env.timeout(process_duration)
Запит ресурсу з нижчим пріоритетом
with resource_1.request(priority=2) as
request:
yield request
yield env.timeout(process_duration)
Корисно для моделювання виробництва/споживання однорідних, невідмінних мас
Може бути неперервною (як вода) або дискретною (як яблука)
Приклад: Запаси пального на АЗС.
tank_1 = simpy.Container(
env, tank_size, init=tank_size)
Додавати й вилучати з контейнера/бака
yield tank_1.put(add_quantity)
yield tank_1.get(remove_quantity)
Отримати поточний рівень у баку
tank_1.level
Отримати загальну місткість бака
tank_1.capacity
Створити сховище
store_1 = simpy.Store(
env, capacity=2)
Подібне до simpy.Container(), але дозволяє зберігати різні об'єкти
На відміну від абстрактної «кількості» в контейнерах
yield store_1.put("item_1")
yield store_1.get()
Отримати список доступних елементів
store_1.items
Отримати місткість сховища
store_1.capacity
Приклад
Поточна ситуація: 1 касир
simpy.Resource(env, capacity=1)...
час: 23.7 хв | Покупець 30 > Завершено
Змодельовані сценарії: n касирів
simpy.Resource(env, capacity=2)...
час: 13.2 хв | Покупець 30 > Завершено
simpy.Resource(env, capacity=3)...
час: 8.6 хв | Покупець 30 > Завершено
simpy.Resource(env, capacity=4)...
час: 8.6 хв | Покупець 30 > Завершено
Дискретно-подієве моделювання в Python