SimPy paketi: Kaynak türleri

Python ile Ayrık Olay Benzetimi

Dr Diogo Costa

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

Mevcut kaynak türleri

  • SimPy üç tür kaynak sunar:

  • resource

  • container
  • store
Python ile Ayrık Olay Benzetimi

Mevcut kaynak türleri

simpy.Resource()

  • Süreçler arasında kaynak paylaş
  • Örnek: restorandaki masalar

simpy.Container()

  • Süreçler arasında homojen madde paylaşımı için kaynak
  • Miktarlar kesikli (örn. elma) veya sürekli (örn. su) olabilir
  • Örnek: su rezervuarı

simpy.Store()

  • Sınırsıza yakın sayıda nesne depolar
  • Örnek: süpermarket
Python ile Ayrık Olay Benzetimi

Yöntem: simpy.Resources()

Kaynak oluşturma

resource_1 = simpy.Resource(env, capacity=8)
  • Sınırlı kaynak kapasitesi olduğunda kullanılır (örn. capacity=8)
  • Bir kaynağa eşzamanlı erişen süreç sayısını sınırlar
  • Süreç kaynağı kullanmak için istek yapar
    • Tüm kaynaklar kullanımda ise istekler kuyruğa alınır
  • Süreçler kaynağı serbest bırakınca bekleyen istekler tetiklenir

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)
Python ile Ayrık Olay Benzetimi

Kaynaklar: öncelik ve el koyma

  • Önceki kaynağın bir varyasyonu

    resource_1 = simpy.PreemptiveResource(
    env, capacity=1)
    
  • Bazı süreçler diğerlerine göre önceliklidir

  • Örnek: tamirci

    • Öncelik 1: arızalı makineleri onarma
    • Öncelik 2 veya daha az: bakım
  • 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)
    
Python ile Ayrık Olay Benzetimi

Yöntem: simpy.Container()

  • 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.

  • Arabalar rezervi azaltır, tankerler artırır
  • Bir konteyner oluşturma
    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
    
Python ile Ayrık Olay Benzetimi

Yöntem: simpy.Store()

  • 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

  • Depoya ekle ve çıkar
yield store_1.put("item_1")
yield store_1.get()
  • Mevcut öğe listesini al

    store_1.items
    
  • Mağaza kapasitesini al

    store_1.capacity
    
Python ile Ayrık Olay Benzetimi

SimPy kaynakları iş kararlarını nasıl bilgilendirir?

Örnek

  • 1 kasiyerli süpermarket
  • Sahip daha fazla kasiyere yatırımın değerini bilmek istiyor
  • Daha fazla kasiyer bekleme süresini azaltır mı?

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

Hadi pratik yapalım!

Python ile Ayrık Olay Benzetimi

Preparing Video For Download...