Python으로 배우는 이산 사건 시뮬레이션
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

표준 Python 기반의 프로세스형 이산 사건 시뮬레이션 프레임워크
프로세스와 이벤트를 정의하기 위해 제네레이터 함수 사용(툴박스 선수과정에서 다룸)
확장 가능:
일반 함수
def mygenerator():
return 10
return은 값을 반환하고 함수 실행을 종료합니다.함수 실행:
10
제네레이터 함수
def mygenerator():
yield 20
yield 12
yield는 값을 반환하고 내부 상태를 유지한 채 실행을 일시 중지합니다.제네레이터 실행:
20
12
1) SimPy 환경 생성
env = simpy.Environment()
2) 제네레이터 함수를 SimPy 환경에 추가
env.process()
3) 모델 실행
env.run()
4) 시뮬레이션에서 시간 경과시키기
env.timeout()
5) 현재 시뮬레이션 시간 확인
env.now
1) SimPy 패키지 임포트
import simpy
2) 프로세스를 포함하는 제네레이터 함수 작성
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 시뮬레이션 환경 생성
env = simpy.Environment()
4) 제네레이터를 SimPy 환경에 추가
env.process(traffic_light(env, "Leslie St.", 15))
env.process(traffic_light(env, "Arlington Av.", 30))
5) 모델 실행
env.run(until=90)
콘솔 모델 출력:
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으로 배우는 이산 사건 시뮬레이션