close

Вход

Забыли?

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

?

Отчёт-Лаба4 (2)

код для вставкиСкачать
Министерство высшего и профессионального образования РФ
Государственное образовательное учреждение
высшего профессионального образования
Ульяновский государственный технический университет
Кафедра "Вычислительная техника"
Дисциплина "Моделирование"
Лабораторная работа №4
"Моделирование работы канала"
Выполнил:
студент гр. ЭВМд-31
Пронин А.С.
Проверил:
Куцоконь Н.С.
Ульяновск 2008
Цель работы: Изучение характеристик работы канала, моделирование его работы. Изучение влияния скорости передачи информации и загрузки канала на его пропускную способность
ЗАДАНИЕ: Для потока заявок, полученного в лабораторной работе 3, выполнить моделирование работы канала для нескольких вариантов его скорости передачи информации. Вычислить характеристики входного потока заявок (ti, li, L, pi, wi, ui), очереди заявок (li, W, U, L) работающего канала (mi, ri, hi, R, ui). Построить графики зависимости характеристик ui, ri, R, wi, ui, li, W, U, L от скорости работы канала. Считать дисциплину обслуживания потока заявок каналом бесприоритетной.
Результаты моделирования
Определяем среднее время обработки заявок того или иного типа каналом. Скорость работы каналаТип заявкиСреднее время обслуживанияДисперсия времени обслуживанияCреднеквадратичное отклонение времени обслуживания1013,14920,92362,8148925,71436,24412,498832,97390,3167110,5627712011,57460,08270,2875722,85711,561021,24940831,48700,0791780,2813853011,04970,03680,1918321,90480,6937870,83293930,99130,035190,187594010,78730,02070,1438721,42860,3902550,62470430,74350,0197940,1406935010,62980,01320,1148921,14290,2497630,49976330,59480,0126680,1125546010,52490,00920,0959120,95240,1734470,41646930,49570,0087980,0937957010,44990,006750,0821520,81630,127430,35697430,42480,0064630,0803968010,39370,005170,07190220,71430,0975640,31235230,37170,0049490,0703469010,34990,004080,0638720,63490,0770870,27764630,33040,003910,0625310010,31490,003310,0575320,57140,0624410,24988230,29740,0031670,056277
Вывод: Из результатов видно, что среднее время обработки напрямую зависит от скорости работы канала и от средней длины заявок. Время обслуживания для каждой заявки - это длина заявки, умноженная на одну и ту же величину, обратную скорости работы канала.
Исследуем зависимость времени обслуживания заявок от скорости работы канала. Для этого построим соответствующие графики:
Для 1 типа заявок:
Для 2 типа заявок:
Для 3 типа заявок:
Вывод: Из графиков, что для каждого типа заявок четко наблюдается обратно пропорциональная зависимость между временем обслуживания заявки и скоростью работы канала.
Определим интенсивность обслуживания mi = l/ui и среднее число заявок, поступающих на обслуживание li
mi = l/ui, где ui - среднее время обслуживания заявки i-го типа.
Скорость работы каналаТип заявкиИнтенсивность обслуживанияИнтенсивность поступления заявок1010,3175410,6320,1750,1430,3362590,232010,6350820,6320,3500050,1430,6724950,233010,9526530,6320,524990,1431,0087760,234011,2701640,6320,6999860,1431,344990,235011,5878060,6320,8749670,1431,6812370,236011,9051250,6321,0499790,1432,0173490,237012,2227160,6321,225040,1432,3540490,238012,5400050,6321,3999720,1432,6903420,239012,8579590,6321,5750510,1433,0266340,2310013,1756110,6321,7500880,1433,3624750,23
Как видно из таблицы, с увеличением скорости работы канала пропорционально растет интенсивность обслуживания заявок. Среднее число заявок распределено по закону распределения и не зависит от скорости работы канала.
То же и для суммарной интенсивности поступления заявок L = :
Скорость работы канала102030405060708090100Интенсивность поступления заявок0,828799
1,657582
2,486419
3,31514
4,14401
4,972453
5,801805
6,630319
7,459645
8,288174
Определим коэффициенты загрузки ri = li/mi и простоя оборудования hi = 1 - ri:
Скорость работы каналаТип заявкиКоэффициент загрузкиКоэффициент простоя1011,983996-0,98420,80,230,6839970,3160032010,9919980,00800220,3999940,60000630,342010,657993010,6613110,33868920,2666720,73332830,2279990,7720014010,4959990,50400120,2000040,79999630,1710050,8289955010,3967740,60322620,1600060,83999430,1368040,8631966010,3306870,66931320,1333360,86666430,1140110,8859897010,2834370,71656320,1142820,88571830,0977040,9022968010,2480310,75196920,1000020,89999830,0854910,9145099010,2204370,77956320,0888860,91111430,0759920,92400810010,1983870,80161320,0799960,92000430,0684020,931598
Суммарный коэффициент загрузки R =:
Скорость работы канала102030405060708090100Суммарный коэффициент загрузки3,467992
1,734002
1,155982
0,867008
0,693584
0,578034
0,495423
0,433524
0,385315
0,346785
Для большей наглядности построим графики зависимостей между исследуемыми величинами:
Как видим, с увеличением скорости работы канала уменьшается степень загруженности оборудования. Причем характер этого уменьшения достаточно сложен, и трудно определить четкую функциональную зависимость между исследуемыми величинами.
Определим характеристики входного потока заявок - средний промежуток времени между поступлением заявок i-го типа, интенсивность поступления заявок i-го типа li = 1/ti, вероятность поступления заявки i-го типа pi = li/L:
Тип заявкиПромежуток времени между поступлением заявокИнтенсивность поступления заявокВероятность поступления заявок10.14526.88890.630020.61541.62500.140030.27273.66670.2300 Очевидно, что данные характеристики не зависят от скорости работы канала и целиком определяются параметрами самого потока заявок. Интересно отметить, что между интенсивностью поступления заявок и вероятностью их поступления наблюдается определенная зависимость: чем более вероятно появление заявки определенного типа, тем выше интенсивность поступления данных заявок в систему.
Рассмотрим теперь параметры системы, не связанные напрямую с каналом:
Скорость работы каналаТип заявкиСреднее время пребывания заявки i-го типа в очереди wiСреднее время пребывания заявки i-го типа в системе uiСреднее длина очереди заявок i-го типа li = wili101167.5159170.6651105,5352139.2429144.957119,494013192.0870195.060944,1800120181.916783.491351,60752268.014370.87149,522002393.956595.443521,6130153.383654.433333,63167244.271446.17626,197996361.246462.237714,0866740139.117139.904424,64377232.400033.82864,536344.891345.634810,32550130.557131.187019,25097225.277126.42003,538794335.078335.67308,06800960124.850525.375415,65582220.528621.48102,874004328.536229.03196,56332670120.788421.238313,09669217.150017.96632,401323.877624.30255,49184880117.852618.246211,24714214.720515.43482,06087320.496220.86794,71412690115.569115.91909,808533212.831013.46591,79634317.866218.19664,109226100113.742414.05738,657712211.319311.89071,584702315.762216.05963,625306Суммарные характеристики:
W = - среднее время пребывания заявки в очереди
U = - среднее время пребывания заявки в системе
L = - среднее число заявок в системе
Скорость работы канала102030405060708090100Среднее время пребывания заявки в очереди169,209
82,73952
53,91634
39,50477
30,85778
25,09315
20,98954
18,02213
15,7141
13,86772
Среднее время пребывания заявки в системе172,677
84,47352
55,07232
40,37178
31,5514
25,67118
21,48499
18,4556
16,09941
14,21451
Среднее число заявок в системе49.648448.436647.231846.033944.842843.658442.496541.485040.484839.4957 Построим графики исследуемых зависимостей:
Из анализа графиков видно, что среднее время пребывания заявки как в очереди, так и в системе с увеличением скорости работы канала убывает. Среднее количество заявок в системе также уменьшается при большой скорости работы канала. Исходный код программы
#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,2,2,1,2,1,2,1,3,1,1,1,1,1,3,3,1,2,1,1,2,1,2,1,1,1,3,1,1,
1,1,1,1,1,1,1,1,1,3,3,1,3,3,3,1,3,1,1,3,1,2,1,1,1,1,1,1,1,
1,1,3,1,2,1,3,1,2,2,3,3,3,3,1,1,1,1,1,1,3,1,1,2,1,2,1,1,1,
1,3,3,1,1,3,3,3,1,1,2,1,1};
int len[100] = {36,33,15,37,66,29,43,28,27,38,38,27,23,19,35,27,26,91,36,35,
58,41,91,37,36,29,29,28,27,26,45,40,35,32,30,26,30,29,28,26,18,37,
25,41,35,22,34,30,36,33,50,30,29,28,28,21,40,38,36,33,31,33,30,41,
41,30,28,76,32,31,27,26,24,29,28,25,25,42,38,34,34,65,31,55,29,38,
26,25,22,25,40,35,26,23,29,28,27,99,32,32};
int time[100] = {1.03594,1.89072,2.06854,2.21003,2.3718,2.4963,2.51957,2.54668,
2.59418,2.7548,2.7628,2.91028,2.98077,3.00462,3.11121,3.30843,3.32203,
3.42077,3.44105,3.46365,3.54451,3.71789,3.7399,3.74779,3.76716,3.8857,
3.89851,3.91786,3.93183,3.94625,3.99971,4.01206,4.05922,4.11992,4.15888,
4.21209,4.32896,4.3451,4.35874,4.39124,4.43469,4.47201,4.65322,4.69261,
4.74095,4.91208,4.98774,5.05418,5.1973,5.2317,5.28893,5.2924,5.30252,
5.32508,5.48292,5.54193,5.56507,5.57795,5.59774,5.62745,5.66897,5.86693,
5.9829,6.04498,6.0455,6.17519,6.24055,6.36455,6.39452,6.42131,6.48907,
6.50972,6.53822,6.6467,6.67654,6.71305,6.71629,6.7691,6.79165,6.83945,
6.84166,6.88355,6.91859,6.91983,6.9477,7.11297,7.37959,7.40058,7.4298,
7.82232,7.92803,8.0224,8.39071,8.48719,8.81835,8.86942,8.92141,9.28924,
10.2603,10.5065}; 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("modelir4.txt", "wt");
for (int V = 5; V <= 50; V += 5) {
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();
}
2
Документ
Категория
Рефераты
Просмотров
6
Размер файла
290 Кб
Теги
лаба4, улгту, отчет
1/--страниц
Пожаловаться на содержимое документа