Zacznij terazZacznij za darmo

Zarządzanie kolejkami do kasy

W sklepie odzieżowym w godzinach szczytu robi się bardzo tłoczno – klienci często ustawiają się w kolejce do kasy. Obecnie pracuje tylko jeden kasjer i poproszono cię o przeprowadzenie analizy kosztów i korzyści, aby określić, ilu kasjerów potrzeba, by maksymalnie skrócić czas oczekiwania i zwiększyć rentowność.

Postanowiłeś zbudować model zdarzeniowy. Wiesz, że:

  • Średnio co 15 sekund w godzinach szczytu do kolejki dołącza nowy klient;
  • Klienci zazwyczaj przynoszą kilka artykułów – zwykle od 1 do 20; oraz
  • Skanowanie jednego artykułu zajmuje średnio 3 sekundy, a sama płatność trwa zazwyczaj kolejne 20 sekund.

Argument counter przechowuje zasób SimPy, a argument customer_num śledzi liczbę klientów.

Uruchom model i sprawdź, ile czasu zajmuje obsłużenie 30 klientów przy różnej liczbie kasjerów.

To ćwiczenie jest częścią kursu

Symulacja zdarzeń dyskretnych w Pythonie

Zobacz kurs

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

def customer(env, customer_num, counter):

    num_items = random.randint(1, 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, 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()
Edytuj i uruchom kod