Python ile Ayrık Olay Benzetimi
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
SimPy üç tür kaynak sunar:
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
Kaynak oluşturma
resource_1 = simpy.Resource(env, capacity=8)
capacity=8)Kaynak talebi
# Kaynak isteğini aç with resource_1.request() as request:# Kaynak isteği yap yield request# Kaynak kullanılabilir olunca yield env.timeout(event_duration)
Önceki kaynağın bir varyasyonu
resource_1 = simpy.PreemptiveResource(
env, capacity=1)
Bazı süreçler diğerlerine göre önceliklidir
Örnek: tamirci
Kullanım simpy.Resource() ile benzerdir
DNT_CURLY_TAG_7
En yüksek öncelikle kaynak isteği
with resource_1.request(priority=1) as
request:
yield request
yield env.timeout(process_duration)
Daha düşük öncelikle kaynak isteği
with resource_1.request(priority=2) as
request:
yield request
yield env.timeout(process_duration)
Homojen, ayırt edilmemiş kütlenin üretim/tüketimini modellemek için yararlı
Sürekli (su gibi) veya kesikli (elma gibi) olabilir
Örnek: Bir benzin istasyonundaki yakıt rezervi.
tank_1 = simpy.Container(
env, tank_size, init=tank_size)
Depoya/tanka ekleme ve çıkarma
yield tank_1.put(add_quantity)
yield tank_1.get(remove_quantity)
Tanktaki mevcut miktarı al
tank_1.level
Toplam tank kapasitesini al
tank_1.capacity
Bir mağaza (store) oluştur
store_1 = simpy.Store(
env, capacity=2)
simpy.Container()'a benzer ancak farklı nesneleri depolar
Kaplarda depolanan soyut "miktar"ın aksine
yield store_1.put("item_1")
yield store_1.get()
Mevcut öğe listesini al
store_1.items
Mağaza kapasitesini al
store_1.capacity
Örnek
Mevcut durum: 1 kasiyer
simpy.Resource(env, capacity=1)...
süre: 23.7 dk | Müşteri 30 > Tamamlandı
Simüle edilen senaryolar: n kasiyer
simpy.Resource(env, capacity=2)...
süre: 13.2 dk | Müşteri 30 > Tamamlandı
simpy.Resource(env, capacity=3)...
süre: 8.6 dk | Müşteri 30 > Tamamlandı
simpy.Resource(env, capacity=4)...
süre: 8.6 dk | Müşteri 30 > Tamamlandı
Python ile Ayrık Olay Benzetimi