Смекни!
smekni.com

Имитационное моделирование системы массового обслуживания (стр. 4 из 5)

Т.к. в стационарном состоянии производные по времени равны 0, то уравнения для финальных вероятностей получаются из уравнений Колмогорова путем приравнивания правых частей 0. Запишем уравнения для финальных вероятностей для нашей СМО.


Решим данную систему линейных уравнений с помощью программного пакета Maple 11 (см. Приложение 1).

Получим финальные вероятности системы:

Сравнение вероятностей, полученных из системы уравнений Колмогорова при

, с финальными вероятностями показывает, что ошибки
равны:

Т.е. достаточно малы. Это подтверждает правильность полученных результатов.

2.3 Расчет показатели эффективности системы по финальным вероятностям

Найдем показатели эффективности системы массового обслуживания.

Сначала вычислим приведенную интенсивность потока заявок:

1) Вероятность отказав обслуживании заявки, т.е. вероятность того, что заявка покидает систему не обслуженной.В нашем случае заявке отказывается в обслуживании, если все 2 канала заняты, и очередь максимально заполнена (т.е. 4 человек в очереди), это соответствует состоянию системы S6. Т.к. вероятность прихода системы в состояние S6 равна Р6, то

2) Относительная пропускная способность – это средняя доля поступивших заявок, обслуживаемых системой.

3) Абсолютная пропускная способность– это среднее число заявок, обслуживаемых в единицу времени.

4) Средняя длина очереди, т.е. среднее число заявок в очереди, равна сумме произведений числа заявок в очереди на вероятность соответствующего состояния.

5) Среднее время пребывания заявки в очередиопределяется формулой Литтла:

6) Среднее число занятых каналовопределяется следующим образом:

3. Имитационное моделирование СМО

3.1 Алгоритм метода имитационного моделирования СМО (пошаговый подход)

Рассмотрим двухканальную систему массового обслуживания (n = 2) с максимальной длиной очереди равной шести (m = 4). В СМО поступает простейший поток заявок со средней интенсивностью λ = 4,8 и показательным законом распределения времени между поступлением заявок. Поток обслуживаемых в системе заявок является простейшим со средней интенсивностью μ = 2 и показательным законом распределения временем обслуживания.

Для имитации СМО воспользуемся одним из методов статистического моделирования – имитационным моделированием. Будем использовать пошаговый подход. Суть этого подхода в том, что состояния системы рассматриваются в последующие моменты времени, шаг между которыми является достаточно малым, чтобы за его время произошло не более одного события.

Выберем шаг по времени (

). Он должен быть много меньше среднего времени поступления заявки (
) и среднего времени ее обслуживания (
), т.е.

, где (3.1.1)

Исходя из условия (3.1.1) определим шаг по времени

.

Время поступления заявки в СМО и время ее обслуживания являются случайными величинами. Поэтому, при имитационном моделировании СМО их вычисление производится с помощью случайных чисел.

Рассмотрим поступление заявки в СМО. Вероятность того, что на интервале

в СМО поступит заявка, равна:
. Сгенерируем случайное число
, и, если
, то будем считать, что заявка на данном шаге в систему поступила, если
, то не поступила.

В программе это осуществляет isRequested(). Интервал времени

примем постоянным и равным 0,0001, тогда отношение
будет равно 10000. Если заявка поступила, то она принимает значение «истина», в противном случае значение «ложь».

bool isRequested()

{

double r = R. NextDouble();

if (r < (timeStep * lambda))

{return true;}

return false;

}

Рассмотрим теперь обслуживание заявки в СМО. Время обслуживания заявки в системе определяется выражением

, где
– случайное число. В программе время обслуживания определяется с помощью функции GetServiceTime().

double GetServiceTime()

{

double r = R. NextDouble();

return (-1/mu*Math. Log (1-r, Math.E));

}

Алгоритм метода имитационного моделирования можно сформулировать следующим образом. Время работы СМО (Т) разбивается на шаги по времени dt, на каждом из них выполняется ряд действий. Вначале определяются состояния системы (занятость каналов, длина очереди), затем, с помощью функции isRequested(), определяется, поступила ли на данном шаге заявка или нет.

Если поступила, и, при этом имеются свободные каналы, то с помощью функции GetServiceTime() генерируем время обработки заявки и ставим ее на обслуживание. Если все каналы заняты, а длина очереди меньше 4, то помещаем заявку в очередь, если же длина очереди равна 4, то заявке будет отказано в обслуживании.

В случае, когда на данном шаге заявка не поступала, а канал обслуживания освободился, проверяем, есть ли очередь. Если есть, то из очереди заявку ставим на обслуживание в свободный канал. После проделанных операций время обслуживания для занятых каналов уменьшаем на величину шага dt.

По истечении времени Т, т.е., после моделирования работы СМО, вычисляются показатели эффективности работы системы и результаты выводятся на экран.

3.2 Блок-схема программы

Блок-схема программы, реализующей описанный алгоритм, приведена на рис. 5.


Рис. 5. Блок-схема программы

Распишем некоторые блоки более подробно.

Блок 1. Задание начальных значений параметров.

Random R; // Генератор случайных чисел

public uint maxQueueLength; // Максимальная длина очереди

public uint channelCount; // Число каналов в системе

public double lambda; // Интенсивность потока поступления заявок