Моделирование элементарной системы массового обслуживания
Для того чтобы получить последовательность случайных чисел с заданным законом распределения необходимо:
1 Получить равномерно- распределенные случайные числа R в интервале (0,1).
2 С помощью формул преобразования получить случайные числа с заданным законом распределения:
V = f (R).
В состав стандартных функций многих алгоритмических языков входят функции генерирования случайных чисел. Например, на языке Бейсик есть стандартная функция RND (х), генерирующая случайные числа, равномерно – распределенные в интервале (0,1).
Для каждого закона распределения есть своя формула преобразования.
Физическое описание процессов в элементарной модели сводится к следующему: в случайные моменты времени в систему поступают вызовы. Вызовы выстраиваются в очередь и обслуживаются в порядке поступления.
Предположим, что система имеет одну абсолютно надежную линию связи. Построим статистическую модель данной системы. В ней случайными величинами являются моменты поступления вызовов и время обслуживания вызовов.
Моменты времени поступления вызовов обозначим: t1, t2, . . ., tn. Эти моменты времени равны:
t1 = Z1
t2 = Z1 + Z2
t3 = Z1+Z2+Z3
.
.
.
ti = Z1+Z2+Z3+. . . + Zi
.
.
.
Zi = ti-1 – случайная величина, которая распределена по показательному закону.
Время обслуживания вызова тоже является случайной, которая подчиняется показательному закону распределения.
Введем следующие обозначения:
L1 =
- интенсивность потока поступления вызовов.L2 =
- интенсивность времени обслуживания. - интервал моделирования.F ( I ) – момент освобождения линии после обслуживания i-го вызова.
Т ( I ) – момент поступления i-го вызова.
Р ( I ) – длительность простоя линии перед обслуживанием i-го вызова.
W( I ) – время ожидания i-го вызова
S ( I ) - длительность обслуживания i-го вызова.
Z (I ) - длительность пребывания i-го вызова в системе.
D 1 – предельная длительность ожидания.
D2 - заданная длительность пребывания вызова в системе, обслуживание которого завершено.
С1 – счетчик поступающих вызовов.
С2 – счетчик числа вызовов в очереди.
С3 – счетчик числа вызовов, обслужат без ожидания.
С4 – счетчик числа вызовов, пребывавших в системе не более, чем заданное время.
С5 – общее число обслуженных вызовов.
Алгоритм моделирования элементарной системы представлен в виде схемы на рис.1.
Описание функционирования алгоритма.
Блок 1 : Вводим значения L1, L2, M, D1, D2 T (0)=0, F (0)=0
C1=C2=C3=C4=C5=0
Блок 2 : Формирование случайного числа V (I)
I=1, V (I) = - (1/L1) * LOG (1-R (I)), где
R (I) є [ 0,1]
R (I) – случайное число, сформированное генератором случайных чисел.
Блок 3 : T (I) = T (I-1) + V(I)
Блок 4 : Осуществляется проверка, не вышел ли момент T (I) за интервал моделирования. Вместо T (I) можно задаться количеством вызовов I.
Если условие выполняется, то переходим к блоку 21, а в противном случае к блоку 5.
Блок 5 : Подсчет числа поступивших вызовов: С1=С1+1.
Блок 6 : Подсчет текущего числа вызовов в очереди: С2=С2+1.
Блок 7 : Определяется длительность пребывания вызова в очереди:
W (I) = F (I-1)-T(1)
Блок 8 : Осуществляется проверка, ждет ли i-ый вызов в очереди или
обслуживание начинается немедленно.
Если W (I)<0, то вызов не ждал в очереди, а ждала линия.
При W (I) =0 вызов поступил точно в момент освобождения линии.
При выполнении условия управление передается блоку 9, иначе - блоку 12.
Блок 9 : Фиксируется отсутствие ожидания
W (I) =0
Блок 10 : Осуществляется подсчет числа вызовов, обслуженных без очереди:
С3=С3+1
Блок 11 : Подсчитывается длительность простое линии перед обслуживанием i-го вызова: P (I) = T (I) – F (I-1)
Блок 12 : Проверка, не превышает ли длительность ожидания вызова установленного нами предела D1.
Если условие не выполняется, то переходим к блоку 13, в противном случае – к блоку 14.
Блок 13 : По установленной дисциплине обслуживания вызов должен покинуть систему. Для этого вызова формируется предельная длительность ожидания, время обслуживания приравнивается к нулю; поскольку вызов покидает систему, то число вызовов в очереди уменьшаем на единицу.
Управление передается 21 блоку.
Блок 14 : В этом блоке формируется длительность обслуживания i-го вызова.
S (I) = - (1/L2) * LOG1(1-R(I))
R (I) є [0,1].
S(I) – случайная величина, распределенная по показательному закону.
Блок 15 : Подсчитывается момент освобождения линии после обслуживания i-го вызова:
F (I) = T (I) + W(I) + S (I)
Блок 16 : Подсчет числа вызовов в очереди:
С 2=С2-1, т.к. вызов обслужился.
Блок 17 : Подсчитывается длительность пребывания i-го вызова в системе:
Z (I) = W (I) + S (I)
Блок 18 : Проверка, не превышает ли время пребывания вызова заданной длительности D2.
Если условие выполняется, то переходим к блоку 19, если нет – к блоку 20.
Блок 19 : Подсчет числа вызовов, пребывавших в системе не более заданного времени:
С4=С4+1
Блок 20 : Определение общего числа обслуженных вызовов:
С5=С5+1.
Блок 21 : Подсчет сумм элементов массивов, необходимых для последующей статистической обработки. Этот блок не обязателен.
Управление передается блоку 2 с I=I+1.
Блок 22 : Статистическая обработка результатов.
Блок 23 : Печать результатов.
Статистическая обработка результатов моделирования
Выполняя работу программы несколько раз, т.е. экспериментируя с моделью можно собрать необходимую статистику.
В результате статистической обработки получаем оценки математических ожиданий, дисперсии и среднеквадратических отклонений следующих величин:
а) длительности пребывания обслуженного вызова в системе:
преб= ; sпреб = ;б) длительности пребывания вызова в очереди:
ож= ; sож = ;в) длины очереди:
= ; sL = ;г) длительности простоя линии :
; s = .Оцениваются и другие величины:
1) Вероятность обслуживания поступившего вызова: Робсл. = С5/С1;
2) Вероятность отказа: Ротк. = 1 – С5/С1;
3) Вероятность обслуживания вызова без ожидания: Рбез ож. = С3/С1 ;
4) Вероятность пребывания обслуженного вызова в системе в течение времени, не превышающего заданного: Рпреб = С4/С1.