Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ККР-2013 (Моделирование).docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
127.41 Кб
Скачать
  1. Построение имитационной модели

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

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

Биномиальное распределение в теории вероятностей – распределение количества «успехов» в последовательности из независимых случайных экспериментов, таких что вероятность «успеха» в каждом из них равна .

Пусть – конечная последовательность независимых случайных величин с распределением

.

Построим случайную величину :

Тогда - число единиц (успехов) в последовательности , имеет биноминальное распределение с степенями свободы и вероятностью «успеха» . Это записывается как .

Если большое, а – фиксированное число, то , где – распределение Пуассона с параметром .

Экспоненциальное распределение может быть получено из непрерывного равномерного распределения методом обратного преобразования. Пусть , тогда

Алгоритм работы программы следующий:

Генератор случайных чисел выдает транзакты согласно распределению по закону Пуассона. Далее по экспоненциальному закону распределения происходит присвоение поступившему транзакту времени его обслуживания.

Далее происходит проверка на принадлежность обслуживания требования в одной из касс и постановка его в очередь, что, в свою очередь, дает возможность рассчитывать требуемые параметры.

Программа моделирования реализована в интегрированной среде разработки Microsoft Visual Studio 2008 в виде консольного приложения, текст которой приведен в приложении.

Результат работы программы представлен на рис. 1.

Рис. 1. Результаты работы имитационной модели

Заключение

В результате выполнения контрольно-курсовой работы было рассмотрено имитационное моделирование, которое является распространенным методом исследования на всех этапах создания и функционирования сложной системы. В результате была создана программа, моделирующая работу многоканальной системы массового обслуживания с ожиданием. Также были определены основные характеристики данной системы.

Список литературы

1. Пасько, Николай Иванович. Статистическое моделирование процессов и систем: учеб. пособие для вузов / Н.И. Пасько, А.Н. Иноземцев, С.Г. Зайков; ТулГУ .— Тула: Изд-во ТулГУ, 2008 .— 112 с.

2. Советов, Б.Я. Моделирование систем: учебник для вузов / Б.Я. Советов, С.А. Яковлев.— 4-е изд., стер. — М.: Высш. шк., 2005.— 342 с.

Приложение Листинг файла Programm.Cs

using System;

using System.Collections.Generic;

using System.Text;

namespace Model_kassa

{

class Program

{

static void Main(string[] args)

{

bool

isBusy1 = false,

isBusy2 = false,

isBusy3 = false;

int

time1 = 0, //время обработки заявки на 1 кассе

time2 = 0,

time3 = 0;

int avrQueue = 0; //сумма(заявок в очереди в каждый момент времени)

int avrWork = 0;

int avrTimeQueue = 0; //время пребывания в очереди вcех заявок

int timeQueueN = 0; //сколько этих заявок

int maxTime = 0; //макс. время в очереди

List<int> queue = new List<int>();

for (int i = 0; i < 80; i++)

{

int N = RandPuas();

N = 60 / N;

for (int n = 0; n < 60; n++)

{

if (n % N == 0)

queue.Add(0);

if (!isBusy1)

{

if (queue.Count > 0)

{

time1 = RandEx();

isBusy1 = true;

avrTimeQueue += queue[0];

timeQueueN++;

if (queue[0] > maxTime)

maxTime = queue[0];

queue.RemoveAt(0);

}

}

else

{

avrWork++;

time1--;

if (time1 <= 0)

{

isBusy1 = false;

}

}

if (!isBusy2)

{

if (queue.Count > 0)

{

time2 = RandEx();

isBusy2 = true;

avrTimeQueue += queue[0];

timeQueueN++;

if (queue[0] > maxTime)

maxTime = queue[0];

queue.RemoveAt(0);

}

}

else

{

avrWork++;

time2--;

if (time2 <= 0)

{

isBusy2 = false;

}

}

if (!isBusy3)

{

if (queue.Count > 0)

{

time3 = RandEx();

isBusy3 = true;

avrTimeQueue += queue[0];

timeQueueN++;

if (queue[0] > maxTime)

maxTime = queue[0];

queue.RemoveAt(0);

}

}

else

{

avrWork++;

time3--;

if (time3 <= 0)

{

isBusy3 = false;

}

}

avrQueue += queue.Count;//+=заявок в очереди в каждый момент времени

for (int p = 0; p < queue.Count; p++)

{

queue[p]++;

}

}

}

int avrN = 80 * 60;

Console.WriteLine("Cреднее число требований в очереди на обслуживание: {0}", (float)avrQueue / avrN);

Console.WriteLine("Cреднее число требований, находящихся в системе: {0}", (float)avrQueue / avrN + (float)avrWork / avrN);

Console.WriteLine("Коэффициент использования каналов обслуживания: {0}", ((float)avrWork / avrN) / 3);

Console.WriteLine("Коэффициент простоя обслуживающих каналов: {0}", 1 - ((float)avrWork / avrN) / 3);

Console.WriteLine("Среднее число занятых каналов обслуживания: {0}", (float)avrWork / avrN);

Console.WriteLine("Среднее время ожидания обслуживания: {0}", (float)avrTimeQueue / timeQueueN);

Console.WriteLine("Максимальное время ожидания в очереди: {0}", maxTime);

Console.Read();

}

static int RandPuas()

{

int ave = 10, s = 0;

for (int i = 0; i < 1000; i++)

{

if ((1000 * _rnd.NextDouble()) < ave)

s++;

}

return s;

}

static int RandEx()

{

double lambda = 0.16667;

double ri = _rnd.NextDouble();

return (int)((-1.0 / lambda) * Math.Log(1.0 - ri, Math.E));

}

static Random _rnd = new Random();

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]