Restaurantmodel: Tafelbeheer en wachttijden
Stel, je wilt een restaurant openen in een populaire wijk van San Francisco. Het bepalen van het aantal tafels en de capaciteit van de keuken is cruciaal om zoveel mogelijk klanten te bedienen en tegelijk de initiële investering en operationele kosten te beperken. Een discrete-eventmodel kan helpen bij deze investeringsbeslissing door de bezettingsgraad van tafels, wachttijden van klanten en het aantal klanten dat de rij verlaat vanwege te lange wachttijden te simuleren.
Laten we eerst de generator definiëren die tafelverzoeken en klantbeslissingen om te wachten of te vertrekken op basis van wachttijden simuleert. In de volgende oefening zet je het model op, voer je het uit en analyseer je de resultaten. De tijd in het model is in minuten.
Deze oefening maakt deel uit van de cursus
Discrete Event Simulation in Python
Oefeninstructies
- Open een tafelverzoek als
reqwanneer een klant bij het restaurant aankomt. - Gebruik een bitwise-or-operator om te wachten tot er een tafel vrij is (
req) of totdat de klant geen geduld meer heeft (env.timeout(patience)). - Yield de tijd dat de tafel door de klant bezet is, gegeven door de variabele
time_at_tables.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
def customer(env, name, tables):
global customers_served, customers_quiting_waiting
arrive = env.now
# Request a table
with tables.request() as ____:
patience = random.uniform(MIN_PATIENCE, MAX_PATIENCE)
# Wait until a table is free or the customer runs out of patience
results = yield ____ | ____
wait = env.now - arrive
if req in results:
print(f"{env.now:7.4f} {name} > Waited {wait:6.3f} minutes for a table!")
time_at_tables = random.uniform(MIN_SEATING_TIME, MAX_SEATING_TIME)
# Yield the time the table is occupied by the customer
____ env.timeout(time_at_tables)
print(f"{env.now:7.4f} {name} > Finished meal :)")
costumers_served += 1
else:
print(f"{env.now:7.4f} {name} > Gave up waiting and left after waiting {wait:7.4f} minutes :(")
customers_quiting_waiting += 1