Python에서 이산 사건 시뮬레이션( DES )을 위한 salabim을 도입한 후 통계 관련 기능에 대해 후속 조치를 취하고 싶습니다. 나는 오늘의 블로그 게시물에서 그렇게 합니다: Stats with salabim !
불연속 이벤트 시뮬레이션, 작업 상점 및 Python
불연속 이벤트 시뮬레이션은 SCM 분석가, 생산 계획자 및 운영 연구 분석가가 적용할 수 있는 여러 시뮬레이션 방법 중 하나입니다 . 아래 차트는 이러한 시뮬레이션 방법 의 대략적인 분류를 제공합니다 .
이산 사건 시뮬레이션은 생산 계획, 공장 설계 또는 비즈니스 프로세스 설계 및 개선과 같은 운영 및 세부 목표에 주로 적용됩니다. 순차 이벤트 및 대기열로 잘 설명되는 복잡한 시스템에 적합한 방법입니다. 다음은 시작할 때 읽을 수 있는 몇 가지 예시적인 시뮬레이션 사용 사례입니다.
- 링크 : 더 나은 계획을 위한 노천 광산 시뮬레이션
- 링크 : R에서 끓인 주차장 시뮬레이터
- 링크 : 종단 간 가금류 공급망 시뮬레이션
예를 들어 작업장은 설계 및/또는 지속적인 개선을 위해 이산 이벤트 시뮬레이션의 이점을 얻을 수 있는 시스템입니다.
salabim을 사용한 작업장 시뮬레이션 및 통계
아래 Python 코드는 salabim 을 사용하여 Python에서 작업장 시뮬레이션 모델을 구현합니다 . 이전 블로그 게시물에서 이 간단한 예를 사용했습니다. 이 경우 우리는 2대의 기계와 100개의 작업이 있는 단순화된 작업장을 모델링하고 있습니다. 작업은 모든 시스템에서 처리할 수 있지만 한 번에 하나의 시스템에서만 처리할 수 있습니다. 기계는 지정된 처리 시간(기간)으로 작업을 처리합니다. 이 경우 기계의 용량은 1입니다. 기계가 작업을 처리하면 완료된 것입니다. 이 경우 생산 일정은 어느 정도 단순화되고 무작위 작업 생성기에 의해 모델링됩니다. 작업 생성기는 작업 사이에 지정된 평균 시간을 사용하여 임의로 분산된 간격으로 새 작업을 생성합니다. 이 코드는 모델 구현 및 시뮬레이션 실행 외에도 애니메이션 통계를 구현합니다.
첫 번째 부분은 salabim을 가져오고 상수와 관련 데이터 유형(제품 클래스)을 설정합니다. 제품은 salabim 구성 요소 클래스를 확장합니다. 프로세스 메서드를 구현합니다. 이 메서드는 지정된 기간 동안 리소스 를 요청 하고 보유하는 데 사용됩니다 .
import salabim as sim
SEED = 42
MACHINES = 2 # amount of machines
INTERVAL = 3 # mean time between two jobs
DURATION = 5.0 # mean processing time of a job
JOBS = 100 # number of jobs that have to be completed
class Product(sim.Component):
def process(self):
yield self.request(machines)
print(f"{self.name()} started at time {env.now()}")
yield self.hold(DURATION)
print(f"{self.name()} completed at time {env.now()}")
다음 부분은 시뮬레이션 환경을 설정하고 리소스를 정의합니다. 부품 소스, 즉 구성 요소 생성기도 이 섹션에서 정의됩니다.
env = sim.Environment(random_seed=SEED)
machines = sim.Resource("machines", capacity=MACHINES)
sim.ComponentGenerator(Product, iat=sim.Exponential(INTERVAL), force_at=True, number=JOBS)
마지막으로 시뮬레이션 실행 및 애니메이션이 구현됩니다.
env.animate(True)
env.modelname("jobshop demonstration")
machines.claimers().animate(x=700, y=100, title="work in progress", direction="e")
machines.requesters().animate(x=200, y=100, title="work waiting", direction="e")
machines.claimers().length.animate(x=10, y=300, width=1000, height=100, vertical_scale=15, horizontal_scale=20, title="number of work in prgress")
machines.requesters().length.animate(x=10, y=500, width=1000, height=100, vertical_scale=15, horizontal_scale=20, title="number of work waiting")
env.speed(5)
env.run(100)
그 결과 애니메이션이 생성됩니다. 아래 이미지는 애니메이션의 스냅샷을 보여줍니다.
애니메이션은 진행 중인 작업과 백로그/대기 중인 작업을 보여줍니다.
관련된 컨텐츠
불연속 이벤트 시뮬레이션 및 해당 응용 프로그램 또는 R, AnyLogic, VisualComponents 및 Python과 같은 특정 구현에 관심이 있는 경우 다음 SCDA 간행물을 확인하십시오.
- 링크 : 불연속 이벤트 시뮬레이션(DES) 사용 사례
- 링크 : 이산 사건 시뮬레이션 소프트웨어 목록
- 링크 : SCM 분석가를 위한 시뮬레이션 방법
- 링크 : 이산 사건 시뮬레이션 절차 모델
- 링크 : simmer를 이용한 입고검사 시뮬레이션
- 링크 : SimPy 작업장 시뮬레이션 시각화
- 링크 : 불연속 사건 시뮬레이션을 위해 R에서 끓이기
- 링크 : AnyLogic의 크레인 야드 시뮬레이션
- 링크 : AnyLogic의 컨베이어 시뮬레이션
- 링크 : Visual Components 재무 KPI 시뮬레이션
최적화 및 시뮬레이션을 전문으로하는 산업 엔지니어 (R, Python, SQL, VBA)
Leave a Reply