SimPy paketine giriş

Python ile Ayrık Olay Benzetimi

Dr Diogo Costa

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

SimPy nedir?

SimPy paket logosu: Python için ayrık olay simülasyonları

  • Standart Python tabanlı, süreç tabanlı ayrık olay simülasyon çatısı

  • Süreç ve olayları tanımlamak için üreteç (generator) fonksiyonlar kullanır (Toolbox önkoşul kursunda incelenir)

  • Ölçeklenebilir:

    • Modeller birden çok üreteç içerebilir
    • Her üreteç birden çok süreç barındırabilir
    • Süreçler sıralı veya paralel çalışabilir
Python ile Ayrık Olay Benzetimi

Normal fonksiyonlar ve üreteç fonksiyonlar

Normal Fonksiyon

def mygenerator():
    return 10
  • return bir değer döndürür ve fonksiyonun yürütülmesini sonlandırır

Fonksiyonu çalıştırma:

10

Üreteç (Generator) Fonksiyonu

def mygenerator():
    yield 20
    yield 12
  • yield bir değer döndürür ve iç durum korunarak yürütmeyi duraklatır

Üreteci çalıştırma:

20
12
Python ile Ayrık Olay Benzetimi

Temel SimPy metodları özeti

1) SimPy Ortamı oluşturma

env = simpy.Environment()

2) Üreteç fonksiyonu SimPy ortamına ekleme

env.process()

3) Modeli çalıştırma

env.run()

4) Simülasyonda zaman ilerletme

env.timeout()

5) Geçerli simülasyon zamanını alma

env.now
Python ile Ayrık Olay Benzetimi

Trafik ışıkları: SimPy modeli kurma

1) SimPy paketini içe aktarın

import simpy

2) Süreçler içeren bir üreteç fonksiyonu oluşturma

def traffic_light(env, name, timestep):
     while True:
        yield env.timeout(timestep)
        print(f"Time {env.now:02d} sec | Traffic light at {name} | Red light!")
        yield env.timeout(timestep)
        print(f"Time {env.now:02d} sec | Traffic light at {name} | Yellow Light!")
        yield env.timeout(timestep)
        print(f"Time {env.now:02d} sec | Traffic light at {name} | Green Light!")
Python ile Ayrık Olay Benzetimi

Trafik ışıkları: SimPy modeli kurma

3) SimPy ortamı oluşturma

env = simpy.Environment()

4) Üreteci SimPy ortamına ekleme

env.process(traffic_light(env, "Leslie St.", 15))
env.process(traffic_light(env, "Arlington Av.", 30))

5) Modeli çalıştırma

env.run(until=90)
Python ile Ayrık Olay Benzetimi

Trafik ışıkları: Model çıktıları

Konsol çıktı örneği:

Time 15 sec  |  Traffic light at Leslie St.     |  Red light!
Time 30 sec  |  Traffic light at Arlington Av.  |  Red light!
Time 30 sec  |  Traffic light at Leslie St.     |  Yellow Light!
Time 45 sec  |  Traffic light at Leslie St.     |  Green Light!
Time 60 sec  |  Traffic light at Arlington Av.  |  Yellow Light!
Time 60 sec  |  Traffic light at Leslie St.     |  Red light!
Time 75 sec  |  Traffic light at Leslie St.     |  Yellow Light!
Python ile Ayrık Olay Benzetimi

Hadi pratik yapalım!

Python ile Ayrık Olay Benzetimi

Preparing Video For Download...