Model restaurace: správa stolů a čekacích dob
Představ si, že chceš otevřít restauraci v populární čtvrti San Francisca. Správné nastavení počtu stolů a kapacity kuchyně je klíčové pro obsloužení co největšího počtu zákazníků při minimalizaci počátečních investic a provozních nákladů. Diskrétně-událostní model ti může při tomto rozhodování pomoci – simuluje obsazenost stolů, čekací doby zákazníků a počet těch, kteří frontu opustí kvůli příliš dlouhému čekání.
Nejprve definujeme generátor, který simuluje žádosti o stůl a rozhodování zákazníků – zda počkat, nebo odejít – na základě čekacích dob. V příštím cvičení model sestavíš, spustíš a analyzuješ výsledky. Čas v modelu je v minutách.
Toto cvičení je součástí kurzu
Diskrétní simulace událostí v Pythonu
Pokyny k cvičení
- Při příchodu zákazníka do restaurace otevři žádost o stůl jako
req. - Použij operátor bitwise-or k čekání, dokud se neuvolní stůl (
req) nebo dokud zákazníkovi nevyprší trpělivost (env.timeout(patience)). - Yield dobu, po kterou zákazník stůl zabírá – tuto hodnotu udává proměnná
time_at_tables.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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