モデルを作る:航空機の注文を生成する
SimPy の環境とリソースを作成したので、航空機の発注をシミュレートするジェネレーターとつなげましょう。航空機の注文は30件あります。
assembly_line() 関数は、航空機の各部品製造セクションに対して順番にリソース要求を行います。
以下のコードは、そのうちの1つの要求を示しています。
# 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で学ぶ離散事象シミュレーション
演習の手順
- ダミー変数
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(____)