Powrót do strony głównej

Symulacja routingu call centerów w Pythonie

Model dyskretno-czasowy symuluje routing połączeń w call centerze, porównując Sequential, Round Robin i Longest Idle pod kątem KPI i metryk fairness. Projekt z modułową architekturą dla Colab zawiera config, strategie, metryki i wizualizację. Nadaje się do prototypowania, testowania i analizy what-if.

Modelujemy strategie call centerów: kod i metryki
Advertisement 728x90

# Symulacja strategii routingu w call centerach: kod i metryki

Model o dyskretnym czasie pozwala porównywać strategie rozdzielania przychodzących połączeń między agentów: Sequential (sekwencyjny przydział), Round Robin (cykliczny obchód) i Longest Idle (wybór według maksymalnego czasu bezczynności). Analiza jest prowadzona według KPI (SLA, czas oczekiwania, długość kolejki) i metryk równomierności (indeks Gini, współczynnik wariancji).

Model generuje strumień połączeń zgodny z rozkładem Poissona, modeluje stany agentów (wolny, zajęty, offline) i zbiera dane do wizualizacji rozkładu obciążenia. Wszystkie parametry są wyodrębnione w config.py z typizacją za pomocą dataclass i obsługą serializacji JSON dla powtarzalności.

Zastosowanie modelu w rozwoju i testowaniu

Dla programistów model służy jako piaskownica: prototypowanie strategii pozwala wychwycić błędy na wczesnym etapie bez rzeczywistego obciążenia.

Google AdInline article slot

Testerzy wykorzystują go do:

  • Walidacji symulacji względem danych z produkcji jako cyfrowego bliźniaka.
  • Testów obciążeniowych: skoki liczby połączeń, wyłączenia agentów, wyszukiwanie wąskich gardeł.

Klienci (kierownicy call centerów) przeprowadzają analizę what-if:

  • Ocena SLA przy zmianie strategii.
  • Prognoza obciążenia przy zatrudnianiu agentów.
  • Porównanie równomierności przy różnej intensywności ruchu.

Architektura projektu

Modułowa struktura w układzie src-layout, kompatybilna z Colab i lokalnym środowiskiem. Instalacja editable przez pyproject.toml z automatycznym wyszukiwaniem pakietów i pytest.

Google AdInline article slot

Kluczowe moduły:

  • src/ccsim/config.py: SimulationConfig z seed, lambda_rate, num_agents itp.
  • src/ccsim/agents.py: Klasa Agent ze stanami, zdarzeniami Poissona.
  • src/ccsim/strategies.py: Dziedzicze RoutingStrategy dla rozszerzeń.
  • src/ccsim/simulation.py: Dyskretna pętla, obsługa zdarzeń.
  • src/ccsim/metrics.py: Gini, CV dla połączeń i czasu obciążenia.
  • src/ccsim/visualization.py: Rozkłady KDE, dynamika kolejki.
  • main.py: Orkiestracja, zapisywanie do runs/<timestamp>.
  • tests/test_strategies.py: Testy przypadków brzegowych.

Uruchomienie w Colab: generacja z notebooka, editable install, main.py. Testy przez pytest z raportami HTML/JUnit.

Parametry symulacji

SimulationConfig definiuje:

Google AdInline article slot

| Parametr | Opis |

|----------|----------|

| seed | Inicjalizacja RNG |

| lambda_rate | Intensywność połączeń (jedn./s) |

| num_agents | Liczba agentów |

| num_calls | Całkowita liczba połączeń |

| min_call_duration, max_call_duration | Zakres czasu trwania |

| agent_logout_prob, agent_login_prob | Losowość dostępności |

| max_queue_size | Limit kolejki |

| service_level_threshold | Próg SLA (s) |

| max_simulation_steps | Limit kroków |

Przykład: lambda_rate [0.65, 0.75, 0.85] modeluje niskie/prógowe/wysokie obciążenie. Współczynnik wariancji najlepiej pokazuje różnice w równomierności.

Wyniki porównania strategii

Przy lambda_rate=0.70 Sequential daje nierównomierne obciążenie (wykresy KDE). Round Robin i Longest Idle są bliższe równomierności. Przy niskim obciążeniu (0.65) różnice w rozkładzie połączeń są największe, przy przeciążeniu zbiegają się.

Wykresy: combined_busy_times_kde.png dla czasu obciążenia, rozkłady połączeń po agentach.

Co ważne

  • Model porównuje Sequential, Round Robin, Longest Idle według KPI i równomierności (Gini, CV).
  • Elastyczny config.py z JSON dla scenariuszy what-if.
  • Modułowość: nowe strategie przez dziedziczenie RoutingStrategy.
  • Wizualizacja dynamiki kolejki i rozkładów KDE obciążenia.
  • Testy pokrywają przypadki brzegowe: pusta kolejka, brak agentów.

Rozszerzenia modelu

Dodać:

  • Niejednorodnych agentów (poziomy umiejętności, grafiki zmian).
  • Routing oparty na umiejętnościach i predykcyjny.
  • Cyklliczność ruchu, ponowne połączenia.
  • Agenci-roboty, czynniki zmęczenia.

— Editorial Team

Advertisement 728x90

Czytaj dalej