Modellierung einer Tankstelle: Python-Generatoren
Angenommen, ein Kunde möchte eine Tankstelle bauen, und du wurdest gebeten, ein diskretes Ereignismodell zu erstellen, um die optimale Anzahl der Zapfsäulen und die Größe des gemeinsamen Kraftstofftanks zu bestimmen, der von den Zapfsäulen genutzt wird. Dieses Modell erfordert die Simulation der an der Tankstelle ankommenden Autos sowie der Ressourcen der Station: die Zapfsäulen und den Kraftstofftank. In dieser Übung konzentrieren wir uns auf die folgenden zwei Schritte:
Schritt 1: Erstelle einen Generator, der die Ankunft der Autos an der Tankstelle, das Anfordern einer Zapfsäule und das Auffüllen der Autotanks simuliert.
Schritt 2: Erstelle einen Generator, der den Füllstand des Tanks prüft und bei Bedarf einen Nachfülltank anfordert. Außerdem muss das Verhalten des Nachfülltanks modelliert werden.
In der nächsten Übung erstellst du die SimPy-Umgebung, fügst Prozesse und Ressourcen hinzu und führst Simulationen aus.
Die Anzahl der Zapfsäulen ist begrenzt und wird mit einer SimPy-Ressource simuliert, die in der Variablen gas_station_pumps gespeichert ist.
Diese Übung ist Teil des Kurses
Diskrete-Ereignis-Simulation mit Python
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
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.")