Построение модели: генерация заказов на воздушные суда
Среда SimPy и ресурсы созданы — теперь свяжем их с генератором, который моделирует заказы на покупку воздушных судов. Всего предусмотрено 30 заказов.
Функция assembly_line() последовательно запрашивает ресурсы для различных секций производства компонентов воздушного судна.
Пример одного такого запроса приведён ниже.
# Open the resource step_1_fuselage request
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
Инструкции к упражнению
- Создайте цикл
for, который перебирает все заказы (total_num_orders), используя вспомогательную переменнуюrequest_i. - Внутри цикла создавайте новый процесс для каждого заказа на воздушное судно; все процессы основаны на генераторе
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(____)