Python으로 배우는 이산 사건 시뮬레이션
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
SimPy는 세 가지 리소스 유형을 제공합니다:
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
리소스 생성
resource_1 = simpy.Resource(env, capacity=8)
capacity=8) 설정에 사용리소스 요청
# Open resource request with resource_1.request() as request:# Make resource request yield request# Once resource is avaiable yield env.timeout(event_duration)
이전 리소스의 변형
resource_1 = simpy.PreemptiveResource(
env, capacity=1)
일부 프로세스가 다른 프로세스보다 우선순위를 가질 수 있음
예시: 수리 기사
사용법은 simpy.Resource()와 유사
DNT_CURLY_TAG_7
최고 우선순위로 리소스 요청
with resource_1.request(priority=1) as
request:
yield request
yield env.timeout(process_duration)
낮은 우선순위로 리소스 요청
with resource_1.request(priority=2) as
request:
yield request
yield env.timeout(process_duration)
균질한 벌크 자원의 생산/소비 모델링에 유용
연속형(물) 또는 이산형(사과) 가능
예시: 주유소의 연료 재고
tank_1 = simpy.Container(
env, tank_size, init=tank_size)
컨테이너에 추가/제거
yield tank_1.put(add_quantity)
yield tank_1.get(remove_quantity)
현재 용량 조회
tank_1.level
전체 용량 조회
tank_1.capacity
스토어 생성
store_1 = simpy.Store(
env, capacity=2)
simpy.Container()와 유사하나 다양한 객체 저장 가능
컨테이너의 추상적인 "양"과 대조적
yield store_1.put("item_1")
yield store_1.get()
사용 가능한 항목 목록 조회
store_1.items
스토어 용량 조회
store_1.capacity
예시
현재 상황: 계산원 1명
simpy.Resource(env, capacity=1)...
time: 23.7 min | Customer 30 > Finished
시뮬레이션 시나리오: 계산원 n명
simpy.Resource(env, capacity=2)...
time: 13.2 min | Customer 30 > Finished
simpy.Resource(env, capacity=3)...
time: 8.6 min | Customer 30 > Finished
simpy.Resource(env, capacity=4)...
time: 8.6 min | Customer 30 > Finished
Python으로 배우는 이산 사건 시뮬레이션