Python ile Ayrık Olay Benzetimi
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

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:
Normal Fonksiyon
def mygenerator():
return 10
return bir değer döndürür ve fonksiyonun yürütülmesini sonlandırırFonksiyonu ç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
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
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!")
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)
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