SimPy로 이산 이벤트 모델 구축하기

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

Dr Diogo Costa

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

모델 구축 전 준비 사항

  • 동적 시스템 이해

  • 이산 이벤트 모델의 목표 정의

  • 프로세스 식별:

    • 병렬 실행
    • 순차 실행
  • 적절한 SimPy 리소스 식별 (resource, container, store)

  • 모델 아키텍처 정의:

    • 상태 변수 식별
    • 모델 워크플로
    • 제너레이터
Python으로 배우는 이산 사건 시뮬레이션

동적 시스템과 모델의 목표

동적 시스템 이해

  • 동작을 조절하는 요소는 무엇인가?
  • 포함해야 할 프로세스/이벤트는?

모델의 목표

  • 주로 시스템 최적화에 활용
  • 최적화하려는 항목은?

    • 더 많은 고객
    • 처리 시간 단축
    • 리소스 배분 최적화
  • 목표 모니터링을 위한 상태 변수

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

적절한 SimPy 리소스 식별

공유 리소스

simpy.Resource(env, capacity=4)
  • 프로세스 간 공유 리소스

예시

  • 레스토랑 테이블
  • 공장 기계
  • 극장 좌석
  • 매장 계산원

컨테이너

simpy.Container(env, capacity, 
init=initial_capacity)
  • 탱크 또는 바구니처럼 동작하는 리소스

  • 수량 추가 및 제거:

.put().get()

예시

  • 주유소 연료 재고
  • 화력 발전소의 석탄
Python으로 배우는 이산 사건 시뮬레이션

적절한 SimPy 리소스 식별

Store

simpy.Store(env, capacity=4)
  • 여러 항목을 보관하는 저장소 리소스

  • 용량 제한 없음(기본값)

  • 임의 객체 저장을 위한 용량 슬롯

  • 항목 추가 및 제거:

.put().get()

예시

  • 다양한 상품을 판매하는 매장
  • 창고
  • 작업장
  • 가정
Python으로 배우는 이산 사건 시뮬레이션

비트 연산자를 사용한 이벤트 연결

SimPy는 비트 연산자를 사용하여 두 이벤트를 연결합니다

Python 연산자 유형

  • 산술, 논리, 비교 연산자

비트 연산자

  • 정수에 대한 비트 연산
  • 두 개의 피연산자 필요
    • 예시: a & b, a >> b, a ^ b

SimPy에서

  • 비트 연산자는 조건 이벤트 생성
  • 두 이벤트/프로세스 중 하나 또는 모두를 대기

SimPy 관련 비트 연산자

  • 두 프로세스 모두 대기: __and__() 또는 &
  • 두 프로세스 중 하나 대기: __or__() 또는 |
Python으로 배우는 이산 사건 시뮬레이션

연습해 봅시다!

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

Preparing Video For Download...