Simulace strategi směrování v call centrech: kód a metriky
Diskrétně-časová model umožňuje porovnávat strategie rozdělování příchozích volání mezi agenty: Sequential (sekvenční procházení), Round Robin (kruhové procházení) a Longest Idle (výběr podle maximálního času nečinnosti). Analýza probíhá podle KPI (SLA, doba čekání, délka fronty) a metrik rovnoměrnosti (index Giniho, koeficient variability).
Model generuje poissonovský proud volání, simuluje stavy agentů (volný, obsazený, offline) a sbírá data pro vizualizaci distribuce zátěže. Všechny parametry jsou vyvedeny v config.py s typizací přes dataclass a podporou JSON serializace pro reprodukovatelnost.
Použití modelu ve vývoji a testování
Pro vývojáře slouží model jako pískoviště: prototypování strategi odhaluje chyby v rané fázi bez reálné zátěže.
Testeři ji využívají pro:
- Validaci simulace proti produkčním datům jako digitálního dvojníka.
- Stresové testy: návaly volání, odpojení agentů, hledání úzkých hrdel.
Klienti (ředitelé call center) provádějí what-if analýzu:
- Odhad SLA při změně strategie.
- Prognózu zátěže při najímání agentů.
- Srovnání rovnoměrnosti při různé intenzitě provozu.
Architektura projektu
Modulární struktura podle src-layout, kompatibilní s Colab a lokálním prostředím. Editable instalace přes pyproject.toml s automatickým objevováním balíčků a pytest.
Klíčové moduly:
src/ccsim/config.py:SimulationConfigse seedem, lambda_rate, num_agents a dalšími.src/ccsim/agents.py: TřídaAgentse stavy, poissonovskými událostmi.src/ccsim/strategies.py: DědicovéRoutingStrategypro rozšíření.src/ccsim/simulation.py: Diskrétní smyčka, zpracování událostí.src/ccsim/metrics.py: Gini, CV pro volání a dobu obsazenosti.src/ccsim/visualization.py: KDE distribuce, dynamika fronty.main.py: Orchestrace, ukládání doruns/<timestamp>.tests/test_strategies.py: Kontrola hraničních případů.
Spuštění v Colab: generování z notebooku, editable install, main.py. Testy přes pytest s HTML/JUnit reporty.
Parametry simulace
SimulationConfig fixuje:
| Parametr | Popis |
|-----------------------|--------------------------------|
| seed | Inicializace RNG |
| lambda_rate | Intenzita volání (vol/s) |
| num_agents | Počet agentů |
| num_calls | Celkový počet volání |
| min_call_duration, max_call_duration | Rozsah délky volání |
| agent_logout_prob, agent_login_prob | Stochastika dostupnosti |
| max_queue_size | Limit fronty |
| service_level_threshold | SLA práh (s) |
| max_simulation_steps | Limit kroků |
Příklad: lambda_rate [0.65, 0.75, 0.85] modeluje nízkou/práhová/vysokou zátěž. Koeficient variability nejlépe ukazuje rozdíly v rovnoměrnosti.
Výsledky porovnání strategií
Při lambda_rate=0.70 Sequential vede k nerovnoměrné obsazenosti (KDE grafy). Round Robin a Longest Idle jsou blíže rovnoměrnosti. Při nízké zátěži (0.65) jsou rozdíly v distribuci volání největší, při přetížení se sbíhají.
Grafy: combined_busy_times_kde.png pro dobu obsazenosti, distribuce volání podle agentů.
Co je důležité
- Model porovnává Sequential, Round Robin, Longest Idle podle KPI a rovnoměrnosti (Gini, CV).
- Flexibilní config.py s JSON pro what-if scénáře.
- Modulárnost: nové strategie přes dědičnost
RoutingStrategy. - Vizualizace dynamiky fronty a KDE distribucí zátěže.
- Testy pokrývají hraniční případy: prázdná fronta, žádní agenti.
Rozšíření modelu
Přidat:
- Nehomogenní agenty (úrovně dovedností, směny).
- Skill-based a predictive routing.
- Cykličnost provozu, opakované volání.
- Agenti-roboti, faktory únavy.
— Editorial Team
Zatím žádné komentáře.