ガソリンスタンドのモデリング:Python ジェネレーター
あるクライアントがガソリンスタンドの建設を検討しており、最適な給油ポンプの台数と、各ポンプが共有する燃料タンクの容量を決めるための離散事象モデルの作成を依頼されています。このモデルでは、ガソリンスタンドに到着する車の流れと、ポンプおよび燃料タンクといったスタンドのリソースをシミュレーションします。この演習では、次の2つのステップに取り組みます。
ステップ 1: 車がガソリンスタンドに到着し、ポンプを要求して、車のタンクに給油するまでをシミュレートするジェネレーターを作成します。
ステップ 2: タンクの残量を確認し、必要に応じて補給タンクを呼び出すジェネレーターを作成します。また、補給タンクの挙動もモデル化します。
次の演習では、SimPy の環境を作成し、プロセスとリソースを追加して、シミュレーションを実行します。
給油ポンプの台数には上限があり、SimPy のリソースで表現されています。これは変数 gas_station_pumps に格納されています。
この演習はコースの一部です
Pythonで学ぶ離散事象シミュレーション
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
def car(name, env, gas_station_pumps, gas_station_tank):
fuel_tank_level = random.randint(*FUEL_TANK_LEVEL)
print(f"{name} arriving at gas station at {env.now}")
# Request pump
with gas_station_pumps.____() as req:
start_time = env.now
# Yield the pump request
____ req
liters_required = FUEL_TANK_SIZE - fuel_tank_level
# Remove liters_required from the tank
yield gas_station_tank.___(liters_required)
yield env.timeout(liters_required / REFUELING_SPEED)
print(f"{name} finished refueling in {env.now - start_time} seconds.")