SimPy는 Python으로 작성된 프로세스 기반의 시뮬레이션 프레임워크입니다.
이를 통해 병렬 프로세스, 리소스 공유, 대기열 관리 등 다양한 시뮬레이션 요구사항을 효율적으로 처리할 수 있습니다.
UI 없는 라이브러리만 제공하지만, Python 과 연동하기 쉽기 때문에 원하는 시나리오를 빠르게 작성할 수 있습니다.
주요 특징은 다음과 같습니다:
•
간결하고 직관적인 코드 작성: Python의 쉬운 문법을 활용하여 복잡한 시뮬레이션을 간단히 구현할 수 있습니다.
•
이벤트 기반 프로그래밍: SimPy는 이벤트 스케줄링과 프로세스 관리를 자동으로 처리하여 사용자에게 유연성을 제공합니다.
•
오픈소스: 무료로 제공되며, 다양한 커뮤니티와 문서가 지원됩니다.
SimPy 주요 구성 요소는 다음과 같습니다.
1.
Environment
•
시뮬레이션의 전체 시간 흐름과 이벤트 관리를 담당하는 핵심 객체입니다.
•
env = simpy.Environment()와 같이 생성하며, 이를 통해 시뮬레이션 시간을 진행시킬 수 있습니다.
2.
Process
•
시뮬레이션에서 병렬로 실행되는 작업 단위를 의미합니다.
•
Python의 yield 키워드를 사용하여 실행을 중단하고 재개할 수 있습니다.
3.
Resources
•
공유 자원을 관리하기 위한 도구입니다.
•
리소스는 여러 유형으로 제공되며, 예를 들어
◦
Resource: 기본적인 리소스 관리
◦
Container: 저장 용량 관리
◦
Store: 아이템 저장 및 큐 관리
아래는 SimPy를 사용하여 간단한 은행 대기열 시스템을 모델링한 예제입니다
import simpy
def customer(env, name, counter):
print(f"{name} arrived at time {env.now}")
with counter.request() as req:
yield req
print(f"{name} started service at time {env.now}")
yield env.timeout(5) # 서비스 시간
print(f"{name} finished service at time {env.now}")
# 환경 생성
env = simpy.Environment()
# 리소스(창구) 생성
counter = simpy.Resource(env, capacity=2) # 2개의 창구
# 고객 생성 및 등록
for i in range(5):
env.process(customer(env, f"Customer {i+1}", counter))
yield env.timeout(2) # 고객 도착 간격
# 시뮬레이션 실행
env.run()
Python
복사
SimPy는 Python을 활용하여 이산사건 시뮬레이션을 손쉽게 구현할 수 있는 도구입니다.
Reference: