close

Вход

Забыли?

вход по аккаунту

?

Отчет - 4 mod

код для вставкиСкачать
УлГТУ
кафедра "Вычислительная техника"
дисциплина "Моделирование"
Отчёт
по лабораторной работе № 4
" Моделирование системы обслуживания с одним прибором "
Выполнил студент гр. ИВТВМбд-31
____________ Дроздов Е.С
(подпись) Дата защиты _______________
Присутствовали ____ студентов
гр. __________
Принял преподаватель
________________________ Куцоконь Н. С. (подпись) На абонентские пункты А1...Аn поступают заявки N типов (номер типа заявки соответствует её приоритету). В соответствии со своим типом (приоритету 1>2>...N) заявки от абонентов передаются ПО, если он занят, то они образуют очередь. ПО как обслуживающее устройство в системе имеет следующие характеристики ( для каждого типа заявок ):
vi - среднее время обслуживания заявки i-го типа
(vi)" - второй начальный момент времени обслуживания Di - дисперсия времени обслуживания oi - среднеквадратичное отклонение времени обслуживания mi = i / vi - интенсивность обслуживания lmi - среднее число заявок , поступающих на обслуживание poi = lmi / mi - коэффициент загрузки оборудования заявками i-го типа
ni = i - poi - коэффициент простоя ( суммарные характеристики )
R = сумма_по_числу_заявок (poi) - коэффициент загрузки Lm = сумма_по_числу_заявок ( lmi ) - интенсивность поступления заявок Поток заявок характеризуется следующими величинами :
ti - средний промежуток времени между поступлением заявок i-го типа
lmi = i / ti - интенсивность поступления заявок i-го типа pi = lm / Lm - вероятность поступления заявки i-го типа wi - среднее время пребывания заявки i-го типа в очереди
ui - среднее время пребывания заявки в системе li - средняя длина очереди заявок i-го типа li=lmi*wi
W = сумма_по_числу_заявок ( pi * wi ) - среднее время пребывания заявки в очереди
U = сумма_по_числу_заявок (pi*ui) - среднее время пребывания заявки в системе
L = сумма_по_числу_заявок (lmi*ui) - среднее число заявок в системе
Задание:
Для потока заявок, полученного в лабораторной работе 3 , выполнить моделирование работы одноприборной системы обслуживания . Вычислить характеристики входного потока заявок ( ti , lmi , Lm , pi , wi , ui ), очереди заявок (li , W , U , L ) работающего устройства ( vi , mi , pi , ni , R ) . Построить графики зависимости характеристик poi , R , wi , ui , li , W , U , L от vi .
Результаты моделирования:
Скорость работы каналаТип заявкиСреднее время обслуживания viДисперсия времени обслуживания DiCреднеквадратичное отклонение времени обслуживания oi1012.16960.19450.441022.16670.29560.543732.21110.28430.53322011.08480.04860.220521.08330.07390.271831.10560.07110.26663010.72320.02160.147020.72220.03280.181230.73700.03160.17774010.54240.01220.110320.54170.01850.135930.55280.01780.13335010.43390.00780.088220.43330.01180.108730.44220.01140.10666010.36160.00540.073520.36110.00820.090630.36850.00790.08897010.30990.00400.063020.30950.00600.077730.31590.00580.07628010.27120.00300.055120.27080.00460.068030.27640.00440.06679010.24110.00240.049020.24070.00360.060430.24570.00350.059210010.21700.00190.044120.21670.00300.054430.22110.00280.0533
По полученным результатам видно, что с увеличением скорости среднее время задержки сокращается.
Исследуем зависимость времени обслуживания заявок от скорости работы. Для этого построим соответствующие графики:
Для 1 типа заявок:
Среднее время обслуживания:Дисперсия времени обслуживания:
Среднеквадратичное отклонение времени обслуживания:
Для 2 типа заявок:
Среднее время обслуживания:Дисперсия времени обслуживания:
Среднеквадратичное отклонение времени обслуживания:
Для 3 типа заявок:
Среднее время обслуживания:Дисперсия времени обслуживания:
Среднеквадратичное отклонение времени обслуживания:
Вывод: Из графиков, что для каждого типа заявок четко наблюдается обратно пропорциональная зависимость между временем обслуживания заявки и скоростью работы канала.
Определим среднее число заявок, поступающих на обслуживаниет и интенсивность обслуживания сообщения i - того типа по следующей формуле: mi = i / vi
где vi - среднее время обслуживания заявки i-того типа.
Результаты расчетов:
Из таблицы можно видеть, что интенсивность обслуживания заявок каждого типа растет прямо пропорционально росту скорости работы канала. Среднее число заявок задано законом распределения и поэтому не зависит от скорости работы канала.
Найдем суммарную интенсивность поступления заявок для каждой скорости работы канала по следующей формуле:
Lm = сумма_по_числу_заявок ( lmi )
Скорость работы канала102030405060708090100Интенсивность поступления заявок Lm1,37472,74944,12415,49886,87368,24839,623010,997712,372413,7471
Определим коэффициенты загрузки и простоя оборудования по следующим формулам:
poi = lmi / mi
ni = i - poi
где lmi - среднее число заявок, поступающих на обслуживание; mi - интенсивность обслуживания
Результаты расчетов:
Вычислим суммарный коэффициент загрузки оборудования по следующей формуле:
R = сумма_по_числу_заявок (poi)
Скорость работы канала102030405060708090100Суммарный коэффициент загрузки R1,00001,00001,00000,99910,99450,99000,88000,77080,68590,6177
Для большей наглядности построим график зависимости между исследуемыми величинами:
Как видим, с увеличением скорости работы канала уменьшается степень загруженности оборудования, правда незначительно. Причем характер этого уменьшения достаточно сложен, и трудно определить четкую функциональную зависимость между исследуемыми величинами. Так как время обработки заявок зависит от длины заявки, а она является случайной величиной, то и исследуемая зависимость имеет случайный характер. Однако в любом случае сохраняется тенденция к уменьшению степени загруженности оборудования заявками при увеличении скорость работы канала.
Очевидно, что простаивание оборудования нежелательно, и коэффициент загрузки необходимо делать как можно больше.
Определим характеристики входного потока заявок:
- средний промежуток времени между поступлением заявок i-го типа: Где t2 - последнее и t1 - первое время появления заявки; x - количество заявок i-того типа:
- интенсивность поступления заявок i-го типа: lmi = i / ti - вероятность поступления заявки i-го типа: pi = lm / Lm
Тип заявкиПромежуток времени между поступлением заявок tiИнтенсивность поступления заявок lmiВероятность поступления заявок pi10.43592.29410.7900214.50000.06900.030032.05880.48570.1800
Из таблицы видно, что чем больше вероятность поступления заявок, тем больше интенсивность и тем меньше средний промежуток времени между поступлением заявок данного типа. Причем очевидно, что данные характеристики не зависят от скорости работы канала.
Рассмотрим теперь параметры системы, не связанные напрямую с каналом:
Вычислим следующие параметры:
- Среднее время пребывания заявки i-того типа в очереди wi
- Среднее время пребывания заявки i-того типа в системе ui
- Средняя длина очереди заявок i-того типа, как произведение среднего времени пребывания заявки в очереди на интенсивность поступления заявки i-того типа li = lmi*wi
Результаты занесем в таблицу:
Скорость работы каналаТип заявкиСреднее время пребывания заявки i-го типа в очереди wiСреднее время пребывания заявки i-го типа в системе ui Среднее длина очереди заявок i-го типа li10193.617795.787333.9724289.033391.20001.2269385.977888.18897.108920138.024139.108927.5967236.183337.26670.9972334.933336.03895.776830119.492820.216021.2209218.566719.28890.7676317.918518.65564.444640110.276610.819014.903229.808310.35000.540239.458310.01113.12535014.90485.33878.850624.71335.14670.323034.53334.97561.86396011.32361.68522.853121.31671.67780.107831.25001.61850.61397010.32640.63630.729620.37620.68570.031930.30790.62380.15688010.26340.53470.589620.32500.59580.027630.24650.52290.12579010.22860.46960.512020.28890.52960.024630.21850.46420.111510010.20570.42270.461120.26000.47670.022130.19670.41780.1005
Определим суммарные характеристики:
W = сумма_по_числу_заявок ( pi * wi ) - среднее время пребывания заявки в очереди
U = сумма_по_числу_заявок (pi * ui) - среднее время пребывания заявки в системе
L = сумма_по_числу_заявок (lmi * ui) - среднее число заявок в системе
Скорость работы канала102030405060708090100Среднее время пребывания заявки в очереди92.105037.412519.181710.11534.83221.31020.32460.26220.22860.2057Среднее время пребывания заявки в системе94.282038.501019.907310.65955.26761.67300.63560.53440.47040.4234Среднее число заявок в системе43.308235.370727.433219.567712.03204.56481.79831.51381.33401.2015
Построим графики исследуемых зависимостей:
Среднее время пребывания заявки в очереди Среднее время пребывания заявки в системе
Среднее число заявок в системе
В результате моделирования канала было установлено, и это видно из анализа графиков, что при увеличении скорости передачи информации коэффициент загрузки канала уменьшается, уменьшается среднее время пребывания в системе и в очереди заявки i-того типа. Cреднее время обслуживания сообщения также уменьшается. Прочие вышеуказанные характеристики также уменьшаются при увеличении скорости. Вывод: увеличение скорости работы канала разгружает нагрузку системы и увеличивает полную скорость обработки данных. Пропускная способность канала возрастает с увеличением скорости канала.
Например, представим маршрутку с одной дверью: подъезжает к остановке, останавливается... Каналом является дверь маршрутки, она обладает пропускной способностью ~0,75 чел/с. Люди вокруг нее выстраиваются в кучу, которую можно представить как 4 очереди: наибольший приоритет - у очереди напротив самой двери; наименьший - у крайних очередей. Каждая очередь состоит из отдельных людей (заявок), каждый из которых обладает отдельным приоритетом (по принадлежности к очереди).
Исходный код программы:
#include <stdio.h>
#include <conio.h>
#include <math.h>
struct Msg {
int type;
int len;
double time;
} msg;
struct Demand {
int type;
int len;
double inSystem;
double outQueue;
double outSystem;
};
const int N = 100;
const int N_TYPE = 3;
Demand DemandArray[N];
void loadArray() {
int type[100] = {1,3,1,1,1,3,1,1,1,1,2,1,1,1,1,1,1,1,3,3,1,3,1,3,1,1,3,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,3,3,1,3,3,3,1,1,3,1,
1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,3,1,1,1,1,1,1,1,3,3,1,1,1,
1,1,1,1,1,2,1,1,1,1,1,1,3};
int len[100] = {19,19,23,21,22,21,19,31,23,22,26,21,30,33,24,26,26,16,31,15,
29,26,22,16,15,20,29,22,22,18,20,20,23,22,23,21,20,13,23,23,27,21,
12,14,25,27,27,17,13,17,32,27,22,17,16,21,31,22,23,19,20,20,24,22,
24,22,20,16,24,24,29,22,15,16,25,28,28,18,16,18,13,28,23,18,17,21,
13,23,23,19,21,21,25,23,24,22,21,17,25,24};
int time[100] = {0.3195,0.6660,1.0364,1.3548,1.6713,1.9933,2.3382,2.7467,
3.0650,3.4551,3.7830,4.1308,4.4500,4.7740,5.1596,5.5878,5.9160,6.2358,
6.6493,7.0774,7.5001,7.8364,8.1558,8.5640,8.8823,9.2292,9.5632,
9.9525,10.3077,10.6261,10.9486,11.3059,11.6907,12.0107,12.3331,
12.6546,12.9907,13.4179,13.7373,14.1441,14.4788,14.8172,15.1355,
15.4648,15.8667,16.2262,16.5494,16.8677,17.3004,17.6599,18.0229,
18.3680,18.6902,19.1172,19.4364,19.7741,20.1164,20.5224,20.8671,
21.1859,21.5131,21.8830,22.2840,22.6073,22.9345,23.2601,23.5892,
23.9493,24.2715,24.6969,25.0400,25.3709,25.6901,26.0265,26.4464,
26.7947,27.1146,27.4333,27.7902,28.1386,28.4899,28.8455,29.1724,
29.5327,29.8546,30.1849,30.5374,30.9618,31.2977,31.6187,31.9523,
32.3366,32.7556,33.0840,33.4176,33.7492,34.0730,34.4218,34.7486,
35.1099}; for (int i = 0; i < N; i++) {
//fread(&msg, sizeof(Msg), 1, fin);
DemandArray[i].type = type[i];
DemandArray[i].len = len[i];
DemandArray[i].inSystem = time[i];
DemandArray[i].outQueue = 0;
DemandArray[i].outSystem = 0;
}
//fclose(fin);
}
void treatment(FILE * fout, int V) {
double v[N_TYPE], D[N_TYPE], sigma[N_TYPE];
double mu[N_TYPE], lambda1[N_TYPE];
double ro[N_TYPE], eta[N_TYPE];
double R, Lambda;
double r[N_TYPE], lambda2[N_TYPE], p[N_TYPE];
double w[N_TYPE], u[N_TYPE], l[N_TYPE];
double W, U, L;
double array[N];
int numMsg[N_TYPE];
int i;
for (i = 0; i < N_TYPE; i++) {
v[i] = D[i] = sigma[i] = mu[i] = lambda1[i] = ro[i] = eta[i] = r[i] = 0;
lambda2[i] = p[i] = w[i] = u[i] = l[i] = 0;
numMsg[i] = 0;
}
R = Lambda = W = U = L = 0;
for (i = 0; i < 100; i++)
numMsg[DemandArray[i].type - 1]++;
for (i = 0; i < 100; i++)
array[i] = DemandArray[i].outSystem - DemandArray[i].outQueue;
for (i = 0; i < 100; i++)
v[DemandArray[i].type - 1] += array[i];
for (i = 0; i < N_TYPE; i++)
v[i] /= numMsg[i];
for (i = 0; i < 100; i++)
D[DemandArray[i].type - 1] += array[i] * array[i];
for (i = 0; i < N_TYPE; i++) {
D[i] /= numMsg[i];
D[i] -= v[i] * v[i];
}
for (i = 0; i < N_TYPE; i++)
sigma[i] = sqrt(D[i]);
for (i = 0; i < N_TYPE; i++)
mu[i] = 1.0 / v[i];
double totalTime = DemandArray[99].outSystem;
for (i = 0; i < N_TYPE; i++)
lambda1[i] = 1.0 * numMsg[i] / totalTime;
for (i = 0; i < N_TYPE; i++)
ro[i] = lambda1[i] / mu[i];
for (i = 0; i < N_TYPE; i++)
eta[i] = 1.0 - ro[i];
for (i = 0; i < N_TYPE; i++)
R += ro[i];
for (i = 0; i < N_TYPE; i++)
Lambda += lambda1[i];
for (i = 0; i < N_TYPE; i++) {
int j = 0;
while ((DemandArray[j].type - 1) != i) j++;
double start = DemandArray[j].inSystem;
j = 99;
while ((DemandArray[j].type - 1) != i) j--;
double end = DemandArray[j].inSystem;
r[i] = (end - start) / (numMsg[i] - 1);
}
for (i = 0; i < N_TYPE; i++)
lambda2[i] = 1.0 / r[i];
for (i = 0; i < N_TYPE; i++)
p[i] = lambda1[i] / Lambda;
for (i = 0; i < 100; i++)
array[i] = DemandArray[i].outQueue - DemandArray[i].inSystem;
for (i = 0; i < 100; i++)
w[DemandArray[i].type - 1] += array[i];
for (i = 0; i < N_TYPE; i++)
w[i] /= numMsg[i];
for (i = 0; i < 100; i++)
array[i] = DemandArray[i].outSystem - DemandArray[i].inSystem;
for (i = 0; i < 100; i++)
u[DemandArray[i].type - 1] += array[i];
for (i = 0; i < N_TYPE; i++)
u[i] /= numMsg[i];
for (i = 0; i < N_TYPE; i++)
l[i] = w[i] * lambda1[i];
for (i = 0; i < N_TYPE; i++)
W += p[i] * w[i];
for (i = 0; i < N_TYPE; i++)
U += p[i] * u[i];
for (i = 0; i < N_TYPE; i++)
L += lambda1[i] * u[i];
fprintf(fout, "======================================================\n");
fprintf(fout, "Скорость работы канала равна %d\n", V);
fprintf(fout, "Среднее время обслуживания заявки i-го типа:\n");
for (i = 0; i < N_TYPE; i++)
fprintf(fout, "%6.4f\t%6.4f\t%6.4f\n", v[i], D[i], sigma[i]);
fprintf(fout, "\n\n");
fprintf(fout, "Интенсивность обслуживания:\n");
for (i = 0; i < N_TYPE; i++)
fprintf(fout, "%6.4f\n", mu[i]);
fprintf(fout, "\n\n");
fprintf(fout, "Среднее число заявок i-го типа, поступающих во время работы системы:\n");
for (i = 0; i < N_TYPE; i++)
fprintf(fout, "%6.4f\n", lambda1[i]);
fprintf(fout, "\n\n");
fprintf(fout, "Коэффициенты загрузки и простоя:\n");
for (i = 0; i < N_TYPE; i++)
fprintf(fout, "%6.4f\t%6.4f\n", ro[i], eta[i]);
fprintf(fout, "\n\n");
fprintf(fout, "Коэффициент загрузки и интенсивность:\n");
fprintf(fout, "%6.4f\t%6.4f\n", R, Lambda);
fprintf(fout, "\n\n");
fprintf(fout, "Ср. промежутки времени, интенсивность поступления и вероятность поступления:\n");
for (i = 0; i < N_TYPE; i++)
fprintf(fout, "%6.4f\t%6.4f\t%6.4f\n", r[i], lambda2[i], p[i]);
fprintf(fout, "\n\n");
fprintf(fout, "Время пребывания заявки в очереди, системе, длина очереди (i-го типа заявок):\n");
for (i = 0; i < N_TYPE; i++)
fprintf(fout, "%6.4f\t%6.4f\t%6.4f\n", w[i], u[i], l[i]);
fprintf(fout, "\n\n");
fprintf(fout, "Время пребывания заявки в очереди, системе, длина очереди:\n");
fprintf(fout, "%6.4f\t%6.4f\t%6.4f\n", W, U, L);
fprintf(fout, "\n\n");
}
void main() {
//clrscr();
FILE * fout = fopen("modelir.txt", "wt");
for (int V = 10; V <= 100; V += 10) {
int i;
loadArray();
double curTime = 0;
for (i = 0; i < 100; i++) {
if (DemandArray[i].inSystem > curTime)
curTime = DemandArray[i].inSystem;
DemandArray[i].outQueue = curTime;
curTime += 1.0 * DemandArray[i].len / V;
DemandArray[i].outSystem = curTime;
}
treatment(fout, V);
}
fclose(fout);
printf("Test done!");
if (getch() == 0) getch();
}
Документ
Категория
Рефераты
Просмотров
29
Размер файла
388 Кб
Теги
mod, отчет
1/--страниц
Пожаловаться на содержимое документа