SimPy 패키지 소개

Python으로 배우는 이산 사건 시뮬레이션

Dr Diogo Costa

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

SimPy란?

SimPy 패키지 로고: Python용 이산 사건 시뮬레이션

  • 표준 Python 기반의 프로세스형 이산 사건 시뮬레이션 프레임워크

  • 프로세스와 이벤트를 정의하기 위해 제네레이터 함수 사용(툴박스 선수과정에서 다룸)

  • 확장 가능:

    • 모델은 여러 제네레이터를 포함할 수 있음
    • 각 제네레이터는 여러 프로세스를 포함할 수 있음
    • 프로세스는 순차 또는 병렬 실행 가능
Python으로 배우는 이산 사건 시뮬레이션

일반 함수 vs. 제네레이터 함수

일반 함수

def mygenerator():
    return 10
  • return은 값을 반환하고 함수 실행을 종료합니다.

함수 실행:

10

제네레이터 함수

def mygenerator():
    yield 20
    yield 12
  • yield는 값을 반환하고 내부 상태를 유지한 채 실행을 일시 중지합니다.

제네레이터 실행:

20
12
Python으로 배우는 이산 사건 시뮬레이션

주요 SimPy 메서드 요약

1) SimPy 환경 생성

env = simpy.Environment()

2) 제네레이터 함수를 SimPy 환경에 추가

env.process()

3) 모델 실행

env.run()

4) 시뮬레이션에서 시간 경과시키기

env.timeout()

5) 현재 시뮬레이션 시간 확인

env.now
Python으로 배우는 이산 사건 시뮬레이션

신호등: SimPy 모델 구축

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!")
Python으로 배우는 이산 사건 시뮬레이션

신호등: SimPy 모델 구축

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)
Python으로 배우는 이산 사건 시뮬레이션

신호등: 모델 출력

콘솔 모델 출력:

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으로 배우는 이산 사건 시뮬레이션

연습해 봅시다!

Python으로 배우는 이산 사건 시뮬레이션

Preparing Video For Download...