Теория массового обслуживания
Решение задачи "отказа" работы одного терминала компьютерной сети аналитическим методом. Решение методом Монте-Карло, написание кода программы на языке Си. Расчет границ доверительного интервала: количество попыток подключений к компьютеру за 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Создание параллельной программы на языке программирования высокого уровня С с расширением MPI и аналогичной программы на OpenMP для решения двумерного уравнения Пуассона итерационным методом Зейделя. Блок-схема алгоритма, анализ работы программы.
контрольная работа [62,9 K], добавлен 06.01.2013Решение систем алгебраических линейных уравнений методом Гаусса. Вычисление обратной матрицы и определителя. Декомпозиция задачи. Схема взаимодействия интерфейсных форм. Описание процедур и функций. Тестирование разработанного программного продукта.
курсовая работа [1,1 M], добавлен 05.06.2012Отделение корней методом простых интеграций. Дифференцирование и аппроксимация зависимостей методом наименьших квадратов. Решение нелинейного уравнения вида f(x)=0 методом Ньютона. Решение системы линейных уравнений методом Зейделя и методом итераций.
курсовая работа [990,8 K], добавлен 23.10.2011Этапы численного решения нелинейных уравнений заданного вида: отделение (изоляция, локализация) корней уравнения аналитическим или графическим способами, уточнение конкретного выделенного корня методом касательных (Ньютона). Решение в системе MathCad.
курсовая работа [271,6 K], добавлен 22.08.2012Разработка программы на языке С++ для решения дифференциального уравнения Лапласа в прямоугольной области методом сеток. Численное решение задачи Дирихле для уравнения Лапласа, построение сетки и итерационного процесса. Листинг и результат программы.
курсовая работа [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