salabim으로 통계 시각화(DES, Python)

Python에서 이산 사건 시뮬레이션( DES )을 위한 salabim을 도입한 후 통계 관련 기능에 대해 후속 조치를 취하고 싶습니다. 나는 오늘의 블로그 게시물에서 그렇게 합니다: Stats with salabim !

불연속 이벤트 시뮬레이션, 작업 상점 및 Python

불연속 이벤트 시뮬레이션은 SCM 분석가, 생산 계획자 및 운영 연구 분석가가 적용할 수 있는 여러 시뮬레이션 방법 중 하나입니다 . 아래 차트는 이러한 시뮬레이션 방법 의 대략적인 분류를 제공합니다 .

Python에서 이산 이벤트 시뮬레이션을 위한 salabim을 사용한 통계

이산 사건 시뮬레이션은 생산 계획, 공장 설계 또는 비즈니스 프로세스 설계 및 개선과 같은 운영 및 세부 목표에 주로 적용됩니다. 순차 이벤트 및 대기열로 잘 설명되는 복잡한 시스템에 적합한 방법입니다. 다음은 시작할 때 읽을 수 있는 몇 가지 예시적인 시뮬레이션 사용 사례입니다.

예를 들어 작업장은 설계 및/또는 지속적인 개선을 위해 이산 이벤트 시뮬레이션의 이점을 얻을 수 있는 시스템입니다.

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 간행물을 확인하십시오.

You May Also Like

Leave a Reply

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.