การจำลองเหตุการณ์แบบไม่ต่อเนื่องด้วย Python
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

เฟรมเวิร์กจำลองเหตุการณ์แบบไม่ต่อเนื่อง (discrete-event simulation) ที่ใช้ Python มาตรฐาน
ใช้ generator function เพื่อกำหนดกระบวนการและเหตุการณ์ (ศึกษาในคอร์สพื้นฐาน Toolbox)
รองรับการขยายขนาด (Scalable):
ฟังก์ชันทั่วไป (Normal Function)
def mygenerator():
return 10
return คืนค่าและสิ้นสุดการทำงานของฟังก์ชันผลลัพธ์เมื่อเรียกใช้ฟังก์ชัน:
10
Generator Function
def mygenerator():
yield 20
yield 12
yield คืนค่าและหยุดพักการทำงานชั่วคราวโดยยังคงสถานะภายในไว้ผลลัพธ์เมื่อเรียกใช้ generator:
20
12
1) สร้าง SimPy Environment
env = simpy.Environment()
2) เพิ่ม Generator Function เข้า SimPy Environment
env.process()
3) รันโมเดล
env.run()
4) ให้เวลาผ่านไปในการจำลอง
env.timeout()
5) ดึงเวลาปัจจุบันของการจำลอง
env.now
1) นำเข้าแพ็กเกจ SimPy
import simpy
2) สร้าง generator function ที่ประกอบด้วยกระบวนการต่าง ๆ
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 environment
env = simpy.Environment()
4) เพิ่ม generator เข้า SimPy environment
env.process(traffic_light(env, "Leslie St.", 15))
env.process(traffic_light(env, "Arlington Av.", 30))
5) รันโมเดล
env.run(until=90)
ผลลัพธ์ของโมเดลใน Console:
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