# 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.
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.
Kluczowe moduły:
src/ccsim/config.py:SimulationConfigz seed, lambda_rate, num_agents itp.src/ccsim/agents.py: KlasaAgentze stanami, zdarzeniami Poissona.src/ccsim/strategies.py: DziedziczeRoutingStrategydla 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 doruns/<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:
| 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.pyz 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
Brak komentarzy.