Теория массового обслуживания

Решение задачи "отказа" работы одного терминала компьютерной сети аналитическим методом. Решение методом Монте-Карло, написание кода программы на языке Си. Расчет границ доверительного интервала: количество попыток подключений к компьютеру за 10 опытов.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 30.05.2013
Размер файла 187,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Министерство связи и массовых коммуникаций

Сибирский Государственный Университет

Телекоммуникаций и Информатики

Кафедра ПМиК

Контрольная работа

по дисциплине «Теория массового обслуживания»

Вариант 13

Выполнил: студент гр. ВМ-76:

Потапов Д.,

Проверила: Разинкина Т.Э.

Новосибирск, 2009

Постановка задачи

компьютерная сеть доверительный интервал

Текст 1

В учреждении используется вычислительная сеть, состоящая из головного компьютера и соединенных с ним терминалов (работающих в режиме «on-line»). Одновременно компьютер может обслуживать запросы от 3-х терминалов (если три терминала уже заняты, то запрос от другого терминала не обрабатывается, поступает «отказ»). Перед реконструкцией сети решили провести статистическое исследование. Для этого в течение нескольких суток специальная программа фиксировала продолжительность работы каждого терминала и число включений терминала в сутки. Были получены следующие данные по продолжительности включений терминала в сутки: см. Таблицу 2 и по числу обращений к терминалам в час: см. Таблицу 1. Необходимо оценить вероятность «отказа» для одного терминала.

Таблица 1 (число обращений к терминалам в час)

1 тер.

4

5

4

1

5

5

5

3

5

3

9

7

7

3

2 тер.

4

10

6

5

7

4

5

5

8

8

8

11

8

4

3 тер.

9

14

6

12

8

11

18

17

7

15

16

7

16

15

4 тер.

11

8

9

13

15

13

7

8

3

9

12

8

5

10

5 тер.

8

7

8

9

7

9

7

7

9

18

6

3

8

7

Таблица 2 (продолжительности работы терминалов в часах)

1 тер.

0,39

0,09

0,60

1,07

0,72

2,20

1,84

2,50

4,54

0,40

2 тер.

1,14

0,10

1,87

0,46

0,15

3,08

0,14

1,44

0,64

1,40

3 тер.

0,59

3,29

0,22

0,76

0,64

0,95

0,20

0,41

0,60

0,86

4 тер.

0,47

3,99

1,66

2,28

1,48

0,91

0,17

1,33

0,89

0,45

5 тер.

0,26

0,21

0,70

0,66

0,07

1,02

1,05

1,14

0,40

0,10

Решение задачи аналитическим методом

Вычислительная сеть представляет собой систему массового обслуживания с отказами и ограниченным числом требований. Введём следующие состояния системы:

0 - компьютер может обслуживать 3 терминала

1 - компьютер обслуживает 1 терминал и может ещё обслужить 2 терминала

2 - компьютер обслуживает 2 терминала и может ещё облужить 1 терминал

3 - компьютер обслуживает 3 терминала

Граф данной системы выглядит следующим образом:

Размещено на http://www.allbest.ru/

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

У нас имеется два потока событий: с одной стороны, поток заявок на подключение терминалов к компьютеру, с другой - поток завершения обслуживания терминалов Число наступлений события за время t - случайная величина, подчиняющаяся распределению Пуассона с параметром за единицу времени. Методом максимального правдоподобия была получена оценка для параметра этого распределения: .

Обозначим данные Таблицы 1 через (i - номер строки, j - номер столбца). Найдём оценки интенсивности подключения к компьютеру для каждого терминала по формуле:

Эти данные будем использовать при решении методом Монте-Карло. Для аналитического решения усредним эти значения:

Мы знаем, что время между наступлениями соседних событий в простейшем потоке - экспоненциально-распределённая случайная величина, и оценкой параметра такого распределения будет: .

Обозначим данные Таблицы 2 через (i - номер строки, j - номер столбца). Найдём интенсивности завершения обслуживания для каждого терминала по формуле:

Для аналитического решения усредним эти значения:

Чтобы найти вероятность отказа при подключении терминала к компьютеру в системе из 5ти терминалов (система_1), рассмотрим систему, состоящую из 3х терминалов (система_2). Если система_2 находится в состоянии 3 (компьютер не может обслуживать терминалы), то попытка подключиться ещё одного терминала к компьютеру обречена на неудачу. Следовательно, вероятность нахождения системы_2 в состоянии 3 и будет искомой вероятностью отказа для системы_1. Т.о. нам надо найти вероятность нахождения в состоянии 3 для системы_2, граф которой изображён на рисунке:

Размещено на http://www.allbest.ru/

Т.к. у такой системы конечное число состояний, предельные вероятности всегда существуют и могут быть найдены по формулам:

Подставим наши данные:

Ответ: вероятность отказа для одного терминала равна 0,842.

Решение методом Монте-Карло

Исходный код программы на языке Си

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

#include <math.h>

#define EXPERIMENTS 10 /* число опытов */

#define T 10 /* интервал наблюдения - 10 часов */

#define dt 0.001 /* шаг дискретизации */

#define R 5 /* количество терминалов */

#define C1 14 /* количество столбцов в первой таблице */

#define C2 10 /* количество столбцов во второй таблице */

#define MAX_R 3 /* максимальное число обслуживаемых терминалов */

const int Table1[R][C1] = { /* число обращений к терминалам в час */

{4, 5, 4, 1, 5, 5, 5, 3, 5, 3, 9, 7, 7, 3},

{4, 10, 6, 5, 7, 4, 5, 5, 8, 8, 8, 11, 8, 4},

{9, 14, 6, 12, 8, 11, 18, 17, 7, 15, 16, 7, 16, 15},

{11, 8, 9, 13, 15, 13, 7, 8, 3, 9, 12, 8, 5, 10},

{8, 7, 8, 9, 7, 9, 7, 7, 9, 18, 6, 3, 8, 7}

};

const float Table2[R][C2] = { /* продолжительность работы терминалов в часах */

{0.39, 0.09, 0.60, 1.07, 0.72, 2.20, 1.84, 2.50, 4.54, 0.40},

{1.14, 0.10, 1.87, 0.46, 0.15, 3.08, 0.14, 1.44, 0.64, 1.40},

{0.59, 3.29, 0.22, 0.76, 0.64, 0.95, 0.20, 0.41, 0.60, 0.86},

{0.47, 3.99, 1.66, 2.28, 1.48, 0.91, 0.17, 1.33, 0.89, 0.45},

{0.26, 0.21, 0.70, 0.66, 0.07, 1.02, 1.05, 1.14, 0.40, 0.10}

};

float l[R], m[R]; /* интенсивности */

/* ------------------------------------------------------------------------------ */

void intensities() /* расчёт интенсивностей */

{

float sum1, sum2;

int i, j;

printf("- - - - - - - интенсивности - - - - - - - - -\n");

printf(" терминал | подключение | обслуживание \n");

for (i = 0; i < R; i++) {

sum1 = 0; sum2 = 0;

for (j = 0; j < C1; j++) sum1 += Table1[i][j];

for (j = 0; j < C2; j++) sum2 += Table2[i][j];

l[i] = sum1 / C1;

m[i] = C2 / sum2;

printf(" %8d | %11.3f | %12.3f\n", i+1, l[i], m[i]);

}

printf("\n");

}

void experiment(int *n, int *k)

{

int i, j;

int attempt_connect = 0, attempt_false = 0; /* счётчики подключений и отказов */

int prev_data[R], cur_data[R]; /* предыдущий и текущий столбцы */

int unit_amount; /* число единиц в столбце */

float time, x; /* текущее время и x - случайное число */

/* в начальный момент времени все терминалы свободны */

for (i = 0; i < R; i++) prev_data[i] = 0;

for (time = 0; time < T; time += dt) { /*пока текущее время меньше исследуемого интервала*/

for (i = 0; i < R; i++) { /* заполняем текущий столбец */

x = (float)rand()/RAND_MAX;

if (prev_data[i] == 0) { /* терминал не обслуживается */

if (x <= dt*l[i]) { /* если терминал хочет подключиться к компьютеру */

attempt_connect++;

unit_amount = 0;

/* считаем количество едтиниц в текущем столбце */

for (j = i-1; j >= 0; j--)

if (cur_data[j]) unit_amount++;

/* считаем количество единиц в предыдущем столбце */

for (j = i+1; j < R; j++)

if (prev_data[j]) unit_amount++;

if (unit_amount >= MAX_R) { /* если компьютер уже занят */

attempt_false++;

cur_data[i] = 0;

} else

cur_data[i] = 1;

} else /* терминал не хочет подключаться */

cur_data[i] = 0;

} else { /* терминал ещё обслуживается */

if (x <= dt*m[i]) /* терминал заканчивает обслуживание */

cur_data[i] = 0;

else /* терминал продолжает обслуживаться */

cur_data[i] = 1;

}

}

/* переписываем столбцы следующего шага */

for (i = 0; i < R; i++)

prev_data[i] = cur_data[i];

}

*n = attempt_connect;

*k = attempt_false;

}

int main()

{

int i, n, k, sum_n = 0, sum_k = 0;

float P;

srand(time(NULL));

intensities();

printf("- - - - - опыты - - - - - -\n");

printf(" № | n | k \n");

for (i = 0; i < EXPERIMENTS; i++) {

experiment(&n, &k);

printf(" %3d | %5d | %5d\n", i+1, n, k);

sum_n += n; sum_k += k;

}

printf(" ИТОГО: | %5d | %5d\n\n", sum_n, sum_k);

P = (float)sum_k/sum_n;

printf("Вероятность отказа: %.3f\n", P);

printf("Границы доверительного интервала: ( %.3f ; %.3f )\n",

P - 2.575 * sqrt(P * (1 - P) / sum_n),

P + 2.575 * sqrt(P * (1 - P) / sum_n));

return 0;

}

Результат работы программы

- - - - - - - интенсивности - - - - - - - - -

терминал | подключение | обслуживание

1 | 4.714 | 0.697

2 | 6.643 | 0.960

3 | 12.214 | 1.174

4 | 9.357 | 0.734

5 | 8.071 | 1.783

- - - - - опыты - - - - - -

№ | n | k

1 | 179 | 153

2 | 168 | 141

3 | 186 | 159

4 | 145 | 123

5 | 177 | 150

6 | 148 | 108

7 | 191 | 157

8 | 152 | 125

9 | 198 | 167

10 | 183 | 151

ИТОГО: | 1727 | 1434

Вероятность отказа: 0.830

Границы доверительного интервала: ( 0.807 ; 0.854 )

Построение доверительного интервала

Программа в ходе моделирования получила необходимые данные для расчёта границ доверительного интервала, а именно: количество попыток подключений к компьютеру за 10 опытов, количество полученных отказов , результирующую вероятность отказа , вычисленную по формуле:

Доверительный интервал задаётся формулой:

Квантиль нормального распределения

Находим границы доверительного интервала:

Размещено на Allbest.ru

...

Подобные документы

  • Решение нелинейных уравнений методом простых итераций и аналитическим, простым и модифицированным методом Ньютона. Программы на языке программирования Паскаль и С для вычислений по вариантам в порядке указанных методов. Изменение параметров задачи.

    лабораторная работа [191,0 K], добавлен 24.06.2008

  • Решение задачи линейного программирования графическим методом, его проверка в MS Excel. Анализ внутренней структуры решения задачи в программе. Оптимизация плана производства. Решение задачи симплекс-методом. Многоканальная система массового обслуживания.

    контрольная работа [2,0 M], добавлен 02.05.2012

  • Математическая постановка транспортной задачи открытой модели методом потенциалов при известных показателях запаса груза поставщика и потребности потребителя; ее решение ручным способом и с помощью компьютерной программы, написанной в среде Delphi.

    курсовая работа [167,2 K], добавлен 16.01.2011

  • Графическое решение задач. Составление математической модели. Определение максимального значения целевой функции. Решение симплексным методом с искусственным базисом канонической задачи линейного программирования. Проверка оптимальности решения.

    контрольная работа [191,1 K], добавлен 05.04.2016

  • Решение нелинейного уравнения шаговым методом, методом половинного деления, методом Ньютона и простой итерации с помощью программы Mathcad. Разбиение промежутка на число n интервалов. Условия сходимости корня. Составление программы для решения на С++.

    лабораторная работа [207,5 K], добавлен 10.05.2012

  • Численные методы решения нелинейных уравнений, используемых в прикладных задачах. Составление логической схемы алгоритма, таблицы индентификаторов и программы нахождения корня уравнения методом дихотомии и методом Ньютона. Ввод программы в компьютер.

    курсовая работа [220,0 K], добавлен 19.12.2009

  • Преобразование матрицы системы линейных алгебраических уравнений (СЛАУ) с помощью алгоритма Гаусса. Решение задачи методом простой итерации. Создание блок-схемы и текста программы для решения СЛАУ, реализованной на языке программирования Turbo Pascal.

    курсовая работа [1,2 M], добавлен 15.06.2013

  • Решение систем алгебраических линейных уравнений методом Гаусса. Вычисление обратной матрицы и определителя. Декомпозиция задачи. Схема взаимодействия интерфейсных форм. Описание процедур и функций. Тестирование разработанного программного продукта.

    курсовая работа [1,1 M], добавлен 05.06.2012

  • Создание параллельной программы на языке программирования высокого уровня С с расширением MPI и аналогичной программы на OpenMP для решения двумерного уравнения Пуассона итерационным методом Зейделя. Блок-схема алгоритма, анализ работы программы.

    контрольная работа [62,9 K], добавлен 06.01.2013

  • Этапы численного решения нелинейных уравнений заданного вида: отделение (изоляция, локализация) корней уравнения аналитическим или графическим способами, уточнение конкретного выделенного корня методом касательных (Ньютона). Решение в системе MathCad.

    курсовая работа [271,6 K], добавлен 22.08.2012

  • Отделение корней методом простых интеграций. Дифференцирование и аппроксимация зависимостей методом наименьших квадратов. Решение нелинейного уравнения вида f(x)=0 методом Ньютона. Решение системы линейных уравнений методом Зейделя и методом итераций.

    курсовая работа [990,8 K], добавлен 23.10.2011

  • Разработка программы на языке С++ для решения дифференциального уравнения Лапласа в прямоугольной области методом сеток. Численное решение задачи Дирихле для уравнения Лапласа, построение сетки и итерационного процесса. Листинг и результат программы.

    курсовая работа [307,5 K], добавлен 30.04.2012

  • Функционирование систем массового обслуживания с разными типами заявок. Построение математической модели, постановка задачи оптимизации среднего времени ожидания. Решение задачи оптимизации системы. Разработка программного кода для оптимизации системы.

    дипломная работа [581,7 K], добавлен 27.10.2017

  • Методы решения задач параметрической оптимизации. Решение однокритериальных задач с параметром в целевой функции и в ограничениях. Решение многокритериальной задачи методом свертки критериев, методом главного критерия, методом последовательных уступок.

    курсовая работа [1,5 M], добавлен 14.07.2012

  • Некоторые сведения теории вероятностей. Математическое ожидание, дисперсия. Точность оценки, доверительная вероятность. Сущность метода Монте-Карло. Генераторы случайных чисел. Вычисление кратных интегралов. Описание пользовательского интерфейса.

    курсовая работа [301,5 K], добавлен 08.11.2013

  • Постановка и решение дискретных оптимизационных задач методом дискретного программирования и методом ветвей и границ на примере классической задачи коммивояжера. Этапы построения алгоритма ветвей и границ и его эффективность, построение дерева графов.

    курсовая работа [195,5 K], добавлен 08.11.2009

  • Целевая функция. Многоугольник решений. Решение задачи графическим методом. Линейное программирование. Составление симплекс–таблиц. Система ограничений. Система уравнений. Метод потенциалов. Опорное решение методом наименьших затрат. Матрица оценок.

    контрольная работа [487,6 K], добавлен 29.09.2008

  • Идея численного интегрирования. Создание программы, вычисляющей определенный интеграл методом трапеций. Листинг программы, результаты работы. Проверка в среде Mathcad. Зависимость точности вычисления от количества отрезков разбиения, расчет погрешности.

    отчет по практике [106,8 K], добавлен 28.04.2013

  • Решение задачи линейного программирования симплекс-методом: постановка задачи, построение экономико-математической модели. Решение транспортной задачи методом потенциалов: построение исходного опорного плана, определение его оптимального значения.

    контрольная работа [118,5 K], добавлен 11.04.2012

  • Метод Гаусса как прямой метод нахождения решений для систем системы линейных уравнений маленькой и средней размерности с помощью компьютерной техники. Редактор кода и исходный код основной программы в Delphi, блок-схема и графическое решение задачи.

    контрольная работа [460,8 K], добавлен 15.06.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.