Gestire le code alla cassa
Un negozio di abbigliamento diventa molto affollato nelle ore di punta, quando spesso si crea la coda per pagare. Al momento c’è una sola cassa e ti è stato chiesto di fare un’analisi costi-benefici per capire quante casse servono per ridurre al minimo i tempi di attesa e aumentare la redditività.
Hai deciso di costruire un modello a eventi discreti. Sai che:
- In media, durante le ore di punta un nuovo cliente si mette in coda ogni 15 secondi;
- I clienti di solito hanno più articoli, in genere tra 1 e 20; e
- Servono in media 3 secondi per passare un articolo alla cassa e il pagamento richiede in genere altri 20 secondi.
L’argomento counter contiene la risorsa SimPy e l’argomento customer_num traccia il numero di clienti.
Eseguiamo il modello e calcoliamo quanto tempo serve per servire 30 clienti con un numero diverso di casse.
Questo esercizio fa parte del corso
Simulazione a eventi discreti in Python
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
def customer(env, customer_num, counter):
num_items = random.randint(1.0, 20)
print(f"Time: {env.now:7.4f} sec | Customer {customer_num:02d} > Joining the queue with {num_items:02d} items!")
# Open the resource counter request
with counter.____() as request:
yield request
print(f"Time: {env.now:7.4f} sec | Customer {customer_num:02d} > Got to cashier!")
time_counter = TIME_PAY + random.randint(1.0, 20) * TIME_SCAN_PER_ITEM
# Yield the processing time
yield env.____(time_counter)
print(f"Time: {env.now:7.4f} sec | Customer {customer_num:02d} > Finished ")
env = simpy.Environment()
# Create resource
counter = simpy.Resource(env, capacity=____)
env.process(source(env, NEW_CUSTOMERS, INTERVAL_CUSTOMERS, counter))
env.run()