저는 공급망 및 제조 시뮬레이션을 위한 SimPy 예제 시리즈를 확장하고 싶었습니다. 이 기사에서는 SimPy를 사용하여 Python으로 주차장을 모델링하는 방법을 보여줍니다 . SimPy는 Python의 이산 이벤트 시뮬레이션 모델링 라이브러리입니다. 다른 SimPy 예제와 R 기반 주차장 시머 시뮬레이션 모델은 과거에 이미 이 블로그 에서 공유되었습니다 . 여기 몇 가지 예가 있어요.
- 링크 : R에서 끓이는 기능을 갖춘 주차장 시뮬레이터
- 링크 : Python의 트럭 운송 시뮬레이션 애니메이션
- 링크 : 새로운 주차 시설에 대한 Thungela 보행자 및 교통 시뮬레이션 연구
여기서 논의된 모델은 예를 들어 최소 체류 시간(냉각 공정, 경화 공정 등)을 갖춘 프로세스 버퍼 저장소 및 해당 슬롯/격실 활용과 같은 다른 유사한 시스템을 모델링하는 데에도 사용할 수 있습니다.
주차장 시뮬레이션의 이점
주차장 시뮬레이션 모델은 공급망 관리에 있어 매우 귀중한 도구로서 다양한 이점을 제공합니다. 이러한 모델은 공간 및 노동력과 같은 자원의 효율적인 할당을 촉진하여 사용을 최적화합니다. 이는 용량 계획을 지원하여 시설 확장 또는 축소에 관해 충분한 정보를 바탕으로 결정을 내릴 수 있도록 해줍니다. 교통 흐름 분석은 유통 센터 내 차량의 전반적인 이동을 향상시켜 혼잡과 대기 시간을 줄입니다. 효율적인 대기열 관리를 통해 상품의 신속한 적재 및 하역이 보장됩니다.
또한, 주차장 시뮬레이션은 유휴 시간을 최소화하고 운영 효율성을 높여 비용 절감 기회를 식별하는 데 도움이 됩니다. 다양한 공급망 구성요소에 대한 성과 측정은 벤치마킹 및 목표 설정을 지원합니다. 이러한 모델을 사용하면 “가상” 시나리오를 탐색할 수 있어 레이아웃, 인력 배치, 프로세스 변경 사항을 테스트하고 평가할 수 있습니다. 또한 주차장 운영의 병목 현상과 취약점을 식별하여 사전에 위험을 완화하는 데 도움을 줍니다.
또한 직원 교육 및 기술 개발을 위한 귀중한 도구 역할을 하며 주차장 및 적재 작업 학습을 위한 통제된 환경을 제공합니다. 지속 가능성 이니셔티브를 지원하는 주차장 시뮬레이션은 경로를 최적화하고 환경에 미치는 영향을 줄입니다. 이러한 시뮬레이션은 전략적 의사 결정을 알리는 데이터 기반 통찰력을 생성하고 지속적인 최적화를 위한 새로운 전략 테스트를 촉진하여 지속적인 개선 문화를 촉진합니다. 주차장 시뮬레이션을 공급망 관리에 통합하면 공급망의 비용 절감, 효율성 향상 및 전반적인 성능 향상을 가져올 수 있습니다.
SimPy 주차장 시뮬레이션 모델
다음은 Github에서도 사용할 수 있는 주차장 모델링을 위해 simpy를 사용하는 Python 예제입니다 . 주차장 은 정의된 용량을 가진 컨테이너로 모델링됩니다. 수용 인원은 주차장의 주차 공간 수를 모델로 합니다.
SimPy 프로세스는 자동차 도착 모델링을 위해 주차장 클래스에 구현됩니다. 이 프로세스는 정의된 수의 자동차 도착에 대해 계속됩니다. 각 차량은 무작위로 분산된 도착 간격 시간 후에 도착합니다. 그런 다음 무작위로 분산된 시간 동안 사용 가능한 슬롯을 차지합니다. 그 후 주차 슬롯이 해제됩니다.
import simpy
import random
# modeling framework
class ParkingLot:
env :simpy.Environment
capacity :int
spots :simpy.resources.container.Container
def __init__(self,
env :simpy.Environment,
capacity :int
):
""" constructor """
self.env = env
self.capacity = capacity
self.spots = simpy.resources.container.Container(env, capacity, init=capacity)
def car_arrival(self,
car_id :int
) -> None:
"""
implement simpy process;
models car arrivals in the parking lot, occupying a slot for a randomly distributed duration
"""
print(f"Car {car_id} arrives at {self.env.now}")
yield self.spots.get(1)
print(f"Car {car_id} parks at {self.env.now}")
yield self.env.timeout(random.randint(1, 5))
print(f"Car {car_id} leaves at {self.env.now}")
yield self.spots.put(1)
def main(self,
cararrivals :int,
interarrivaltime_min :int,
interarrivaltime_max :int
) -> None:
""" implements simpy process for main parking lot simulation run """
for car in range(1, cararrivals+1):
t = random.randint(interarrivaltime_min, interarrivaltime_max)
yield self.env.timeout(t)
self.env.process(self.car_arrival(car))
# setup model
env = simpy.Environment()
parking_lot = ParkingLot(env, capacity= 10)
# setup simulation run itself
env.process(parking_lot.main(cararrivals= 10, interarrivaltime_min= 1, interarrivaltime_max= 5))
# run the model
env.run()
10개의 주차 공간이 있는 주차장 에 대해 10대의 자동차 도착에 대해 이 모델을 실행하면 다음과 같은 출력이 생성됩니다.
2호차는 4시에 도착
4시에 주차 2대
1차는 2시에 도착
자동차 1대 2에 주차
1차는 3시에 출발
3호차는 7시에 도착
7시에 주차 3대
4호차는 8시에 도착
8시에 주차 4대
2차는 9시에 출발
5호차는 9시에 도착한다
9시에는 주차 5대
4차는 10시에 출발
6호차는 11시에 도착
11시에 주차 6대
3호차는 12시에 출발
7호차는 12시에 도착
12시에 주차 7대
5호차는 13시에 출발
6번 차량은 13시에 출발합니다.
8번 차량은 16시에 도착합니다.
16시에 주차 8대
7번 차량은 17시에 출발합니다.
8번 차량은 17시에 출발합니다.
9호차는 20시에 도착
20시에 주차 9대
10번 차량은 22시에 도착합니다.
22시에 주차 10대
10번 차는 24시에 출발합니다.
9호차는 25시에 출발
다가오는 튜토리얼에서는 사용자 정의 통계를 이 시뮬레이션 모델 에 통합하는 방법 과 마지막으로 애니메이션을 적용하는 방법을 보여 드리겠습니다 .
SimPy 주차장 시뮬레이션 모델링에 대한 결론
이 기사에서는 Python에서 SimPy를 사용하여 주차장 에 대한 간단한 기본 모델을 개발했습니다 . 향후 튜토리얼에서 이 모델을 사용하여 시간 경과에 따른 차량 도착 프로세스 및 주차장 활용도 를 분석 하고 시간 경과에 따른 슬롯 활용도에 애니메이션을 적용하겠습니다. 더욱 세부적으로 모델을 구체화하고 주차장 구역과 이동 거리 최소화 전략을 구현하겠습니다 .
SimPy 및 이산 이벤트 시뮬레이션에 대해 일반적으로 자세히 알아보려면 다음 SCDA 블로그 게시물 및 기여를 연구하는 것이 좋습니다.
- 링크 : 바지선 운송 SimPy 시뮬레이션
- 링크 : 조립 라인 시뮬레이션 및 라인 밸런싱
- 링크 : 엔드투엔드 가금류 공급망 시뮬레이션
최적화 및 시뮬레이션을 전문으로하는 산업 엔지니어 (R, Python, SQL, VBA)
Leave a Reply