Очереди клиентов в отделении банка, колл-центре или службе поддержки описываются системами массового обслуживания (СМО). Для простейших СМО с пуассоновским потоком и экспоненциальным временем обслуживания существуют аналитические формулы, но при других законах распределения они дают значительные ошибки [1]. Поэтому для проверки расчётов и анализа более сложных случаев применяют имитационное моделирование, при котором работа системы воспроизводится по событиям, а результаты сравнивают с аналитическими решениями типовых СМО [2, 3]. Цель работы состоит в том, чтобы реализовать такую модель на Python, проверить её по формуле Эрланга и оценить, как число каналов влияет на время ожидания.
Рассматривается система M / M / c : заявки поступают с интенсивностью λ = 0,9 в минуту, обслуживаются c одинаковыми операторами со средним временем 4 минуты (μ = 0,25 в минуту), очередь неограниченная и обслуживается в порядке поступления. Нагрузка ρ = λ/( c μ) должна быть меньше единицы, при c = 4 она равна 0,90. Среднее время ожидания по формуле Эрланга C вычисляется как W q = P ож /( c μ − λ), где вероятность ожидания P ож = B /( S + B ), B = a c /( c !(1 − ρ)), S равна сумме a k / k ! по k от 0 до c − 1, а a = λ/μ = 3,6.
Модель написана на Python без специальных библиотек: моменты поступления заявок задаются накопленной суммой экспоненциальных интервалов, а для выбора освободившегося канала используется очередь с приоритетом (модуль heapq). Для каждой заявки время начала обслуживания равно большему из момента прихода и момента освобождения ближайшего канала. В одном прогоне обработано 100 000 заявок, первые 5000 отброшены как период разогрева. Для каждого значения c выполнено 20 прогонов с разными начальными значениями генератора, результаты усреднены, приведён 95-процентный доверительный интервал.
Таблица 1
Сравнение имитации с формулой Эрланга C (λ = 0,9 мин⁻¹, μ = 0,25 мин⁻¹)
|
Операторов c |
Загрузка ρ |
Wq теор., мин |
Wq имит., мин |
P(ожид. > 0) теор. / имит. |
Ожидание > 5 мин, % |
|
4 |
0,90 |
7,88 |
7,73 ± 0,26 |
0,79 / 0,78 |
47,3 |
|
5 |
0,72 |
1,17 |
1,18 ± 0,03 |
0,41 / 0,41 |
7,2 |
|
6 |
0,60 |
0,33 |
0,33 ± 0,003 |
0,20 / 0,20 |
0,9 |
|
7 |
0,51 |
0,10 |
0,10 ± 0,002 |
0,09 / 0,09 |
0,1 |
|
8 |
0,45 |
0,031 |
0,031 ± 0,001 |
0,03 / 0,03 |
0,01 |
Результаты приведены в таблице 1. Имитация воспроизводит аналитические значения: для c = 5 среднее ожидание равно 1,18 мин против 1,17 мин по формуле, вероятность ожидания 0,41 против 0,41, а загрузка операторов в имитации 0,72 против 0,72. Для c = 4 расхождение среднего ожидания составило 1,9 %, при большей нагрузке оценка менее устойчива, и доверительный интервал здесь самый широкий (± 0,26 мин).
Рис. 1. Среднее время ожидания (а), доля ожиданий дольше 5 минут и загрузка операторов (б)
Влияние числа каналов нелинейно (рисунок 1). Добавление пятого оператора снижает среднее ожидание с 7,7 до 1,2 мин, то есть в 6,6 раза, а доля клиентов, ждущих дольше 5 минут, падает с 47 до 7 %. Шестой оператор уменьшает ожидание ещё в 3,6 раза, до 0,33 мин, причём загрузка падает до 60 %. Дальнейшие добавления дают всё меньший выигрыш в минутах, но заметно снижают загрузку. Выбор числа операторов поэтому определяется допустимой долей долгих ожиданий и стоимостью простоя, а не только средним временем.
Результаты удобно использовать для выбора числа операторов по заданному требованию. Для рассматриваемого потока значение a = 3,6, поэтому условие ρ < 1 выполняется только при c ≥ 4. Если требование сформулировано как «не более 5 % клиентов ждут дольше 5 минут», то при c = 5 оно не выполняется (7,2 %), а при c = 6 выполняется (0,9 %), при этом загрузка операторов остаётся 60 %. Если же важнее загрузка, то пять операторов дают 72 % при среднем ожидании чуть более минуты.
Дополнительно проверено, как закон обслуживания влияет на результат при c = 5 и том же среднем времени 4 минуты. При постоянном времени обслуживания среднее ожидание составило 0,62 мин, при экспоненциальном 1,17 мин, а при логнормальном с коэффициентом вариации 1,5 уже 1,65 мин. Разброс времени обслуживания увеличивает очередь при той же загрузке, поэтому при коэффициенте вариации больше единицы формула Эрланга занижает ожидание, что согласуется с выводом работы [1] о погрешности экспоненциальных приближений.
Ограничения модели: поток заявок принят пуассоновским и постоянным в течение времени, операторы одинаковы, клиенты не уходят из очереди и нет приоритетов. В реальных системах интенсивность меняется в течение дня, поэтому модель следует рассматривать для отдельных периодов. Полученные закономерности подтверждают, что имитационное моделирование на Python даёт корректные результаты для простой СМО и позволяет менять её условия без новых формул.
Литература:
- Рыжиков Ю. И., Уланов А. В. Опыт расчета сложных систем массового обслуживания // Информационно-управляющие системы. 2009. № 2. С. 56–62.
- Моисеев А. Н., Синяков М. В. Разработка объектно-ориентированной модели системы имитационного моделирования процессов массового обслуживания // Вестник Томского государственного университета. Управление, вычислительная техника и информатика. 2010. № 1 (10). С. 90–93.
- Журавлев А. М., Медведев Н. В., Быков А. Ю. Использование межплатформенной библиотеки функций языка Си++ для реализации имитационных моделей типовых систем массового обслуживания // Вестник МГТУ им. Н. Э. Баумана. Серия Приборостроение. 2008. № 4. С. 3–14.

