Курсовая работа: Имитационное моделирование системы массового обслуживания
Рассмотрим теперь обслуживание заявки в СМО. Время обслуживания заявки в системе определяется выражением , где – случайное число. В программе время обслуживания определяется с помощью функции 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; // Интенсивность потока поступления заявок
public double mu; // Интенсивность потока обслуживания заявок
public double timeStep; // Шагповремени
public double[] timeOfFinishProcessingReq; // Время окончания обслуживания заявки во всех каналах
public double[] timeInQueue; // Время пребывания СМО в состояниях с очередью
public double processingTime; // Времяработысистемы
public double totalProcessingTime; // Суммарноевремяобслуживаниязаявок
public uint requestEntryCount; // Числопоступившихзаявок
public uint declinedRequestCount; // Числоотказанныхзаявок
public uint acceptedRequestCount; // Числообслуженныхзаявок
uint queueLength; // Длина очереди //
Тип, описывающий состояния СМО