모델 만들기: 항공기 주문 생성
이제 SimPy 환경과 리소스를 만들었으니, 항공기 구매 주문을 시뮬레이션하는 생성기와 연결해 보겠습니다. 항공기 주문은 총 30건이에요.
assembly_line() 함수는 항공기 구성 요소의 각 제조 공정 구간에 대해 순차적으로 리소스를 요청합니다.
아래 코드는 그중 하나의 요청 예시를 보여줍니다.
# 리소스 step_1_fuselage 요청 열기
with step_1_fuselage.request() as slot_request_1:
request_1_time = env.now
yield slot_request_1
print(f"time: {env.now:7.4f} | Aircraft {aircraft_id:02d}
| Enters: step_1_fuselage
| Queued for {env.now-request_1_time} hours")
yield env.timeout(processing_time[processing_time_step_names[0]])
이 연습은 강의의 일부입니다
Python으로 배우는 이산 사건 시뮬레이션
연습 안내
- 더미 변수
request_i를 사용해 모든 주문 요청(total_num_orders)을 생성하는 for 루프를 만드세요. - for 루프에서 각 항공기 요청마다 새 프로세스를 만드세요. 모든 프로세스는 제너레이터
assembly_process_request를 기반으로 합니다. - 30대의 항공기가 한 번에 일괄 요청되었으므로, 요청 간 대기 시간이 없도록 코드를 완성하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
def order_aircraft(env, total_num_orders, step_1_fuselage, step_2_wings, step_3_power_plant, step_4_landing_gear):
# Generate the orders with a for-loop
____ request_i in range(total_num_orders):
assembly_process_request = assembly_line(env, request_i, step_1_fuselage, step_2_wings, step_3_power_plant, step_4_landing_gear)
# Initiate an assembly line process for each request
env.____(assembly_process_request)
# Clock-in the time between requests
yield env.timeout(____)