close

Вход

Забыли?

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

?

Lab4 (2)

код для вставкиСкачать
 Ульяновский государственный технический университет
Факультет информационных систем и технологий
Кафедра "Вычислительная техника"
Дисциплина "Моделирование"
Лабораторная работа № 4
Моделирование работы канала Выполнил: ст. гр. ЭВМд - 32
Балакин Д.А.
Проверил: Куцоконь Н.С.
Ульяновск 2006 г.
Цель работы. Изучение характеристик работы канала, моделирование его работы. Изучение влияния скорости передачи информации и загрузки канала на его пропускную способность.
ЗАДАНИЕ 1 Для потока заявок, полученного в лабораторной работе 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 от скорости работы канала. Считать дисциплину обслуживания потока заявок каналом бесприоритетной.
ЗАДАНИЕ 2 Выполнить моделирование работы канала и вычисление его характеристик для дисциплины обслуживания, определяемой матрицей приоритетов варианта задания.
Результаты моделирования.
Сначала определим среднее время обработки заявок того или иного типа каналом. Очевидно, что эта величина должна напрямую зависеть от скорости работы канала и от средней длины заявок. Результаты сведем в таблицу:
Скорость работы каналаТип заявки12310Среднее время обслуживания10.269210.810.1806Дисперсия времени обслуживания1.05210.361.0702Ст. откл. времени обслуживания1.02570.61.034520Среднее время обслуживания5.13465.45.0903Дисперсия времени обслуживания0.2630.090.2675Ст. откл. времени обслуживания0.51290.30.517230Среднее время обслуживания3.42313.63.3935Дисперсия времени обслуживания0.11690.040.1189Ст. откл. времени обслуживания0.34190.20.344840Среднее время обслуживания2.56732.72.5451Дисперсия времени обслуживания0.06580.02250.0669Ст. откл. времени обслуживания0.25640.150.258650Среднее время обслуживания2.05382.162.0361Дисперсия времени обслуживания0.04210.01440.0428Ст. откл. времени обслуживания0.20510.120.206960Среднее время обслуживания1.71151.81.6968Дисперсия времени обслуживания0.02920.010.0297Ст. откл. времени обслуживания0.1710.10.172470Среднее время обслуживания1.4671.54291.4544Дисперсия времени обслуживания0.02150.00730.0218Ст. откл. времени обслуживания0.14650.08570.147880Среднее время обслуживания1.28371.351.2726Дисперсия времени обслуживания0.01640.00560.0167Ст. откл. времени обслуживания0.12820.0750.0129390Среднее время обслуживания1.4111.21.1312Дисперсия времени обслуживания0.0130.00440.0132Ст. откл. времени обслуживания0.1140.06670.1149100Среднее время обслуживания1.02691.081.0181Дисперсия времени обслуживания0.01050.00360.0107Ст. откл. времени обслуживания0.10260.060.1034 Близость значений средних времен обслуживания разных типов заявок для каждого значения скорости работы канала объясняется тем, что близки между собой средние значения длин заявок (как следует из лабораторной работы №3). Так как по сути дела время обслуживания для каждой заявки - это просто длина заявки, умноженная на одну и ту же величину, обратную скорости работы канала, то сохраняются соотношения, справедливые для длин заявок.
Исследуем зависимость времени обслуживания заявок от скорости работы канала. Для этого построим соответствующие графики:
Определим интенсивность обслуживания, а также среднюю интенсивность поступления заявок в расчете на все время работы системы:
Скорость работы каналаТип заявкиИнтенсивность обслуживанияИнтенсивность поступления заявок1010.09740.023120.09260.001830.09820.0642010.19480.042320.18520.003330.019650.11713010.29210.058420.27780.004530.29470.16164010.38950.070620.37040.005430.39290.19565010.48690.071120.4630.005530.49110.19686010.58430.071120.55560.005530.58940.1977010.68160.071220.64810.005530.68760.19718010.7790.071220.74070.005530.78580.78589010.87640.071220.83330.005530.8840.197310010.97380.071320.92590.005530.98230.1973 Как видно из таблицы, с увеличением скорости работы канала растет интенсивность обслуживания заявок. Средняя число заявок также растет. Так как количество заявок определенного типа для данного потока определяется только законом распределения заявок и в нашей задаче является величиной постоянной. Однако с увеличением скорости работы канала уменьшается общее время работы системы, что и приводит к увеличению средней числу поступления заявок.
Определим коэффициенты загрузки ri = li/mi и простоя оборудования hi = 1 - ri, суммарный коэффициент загрузки R = и суммарную интенсивность поступления заявок L = :
Скорость работы каналаТип заявкиКоэффициент загрузкиКоэффициент простояСуммарный коэффициент загрузкиИнтенсивность поступления заявок1010,23720,76280,90740,088820,01920,980830,65110,34892010,51710,78290,83050,162620,01760,982430,59590,40413010,19980,80020,76430,224420,01620,983830,54840,45164010,18130,81870,69380,271620,01470,985330,49780,50225010,1460,8540,55860,273420,01180,988230,40080,59926010,12180,87820,46590,273620,00990,990130,33430,66577010,10140,89560,39960,273820,00840,991630,28670,71338010,09140,90860,34980,273920,00740,992630,2510,7499010,08130,91870,3110,27420,00660,993430,22320,776810010,07320,92680,280,274120,00590,994130,20090,7991 Построим графики коэффициента загрузки каждого из 3 типов и суммарного коэффициента загрузки, зависящие от скорости работы канала.
Как видим, с увеличением скорости работы канала уменьшается степень загруженности оборудования, правда незначительно. Так как время обработки заявок зависит от длины заявки, а она является случайной величиной, то и исследуемая зависимость имеет случайный характер. Однако в любом случае происходит уменьшение степени загруженности оборудования заявками при увеличении скорость работы канала.
Очевидно, что простаивание оборудования нежелательно, и коэффициент загрузки необходимо делать как можно больше.
Рассмотрим параметры системы и суммарные характеристики W, U, L.
Скорость работы каналаТип заявкиСреднее время пребывания заявки i-го типа в очереди wiСреднее время пребывания заявки i-го типа в системе uiСреднее длина очереди заявок i-го типа li = wiiСреднее время пребывания заявки в очереди WСреднее время пребывания заявки в системе UСреднее число заявок в системе L101341,1007351,377,8773387,8616398,077635,358286,032696,83260,15283413,1317423,312226,4205201117,3623122,49694,9613133,3006138,408622,5037231,432636,83260,10223141,8858146,976116,609730143,553546,97652,541549,209952,615311,8090214,003317,60330,0629352,230555,62408,44034018,705211,27250,61489,379411,93343,241525,88668,58660,032039,719912,65101,90105013,21255,26640,22843,26415,30731,451021,07353,23350,005933,34365,37980,6582 Вывод: Из анализа графиков видно, что среднее время пребывания заявки, как в очереди, так и в системе с увеличением скорости работы канала убывает. Среднее количество заявок в системе также уменьшается при большой скорости работы канала. Начиная со скорости канала 50 сим./с среднее время пребывания заявки i-го типа в очереди и системе практически не меняется.
Отметим также, что при скорости 40 заявок/с оборудование загружено почти полностью; дальнейшее увеличение скорости приводит к значительному уменьшению значения коэффициента загрузки.
Из всего выше сказанного можно сделать вывод, что для данной системы наиболее выгодной скоростью работы канала является скорость примерно 50 символов/с. По-видимому, при данном законе поступления заявок в систему это значение скорости работы канала и будет оптимальным.
Характеристики входного потока заявок, очереди заявок и работающего канала, скорость работы канала V = 50сим./с
Характеристика/Тип сообщения123Характеристики входного потока заявокi - средний промежуток времени между поступлением заявок i-го типа10,319687,08534,9303i - интенсивность поступления заявок i-го типа0,09690,01150,2028 - интенсивность поступления заявок0,2975pi - вероятность поступления заявки i-го типа0,310,020,67wi -среднее время пребывания заявки i-го типа в очереди3,7742,59344,036ui - среднее время пребывания заявки в системе5,78174,57340,0154Характеристики очереди заявокli - средняя длина очереди заявок i-го типа0,34810,01540,8045W-среднее время пребывания заявки в очереди3,9256U- среднее время пребывания заявки в системе5,9647L - среднее число заявок в системе1,7746Характеристики работающего каналаi - интенсивность обслуживания0,49810,50510,4866I - коэффициент загрузки оборудования заявками i-го типа0,18520,01180,4096i - коэффициент простоя0,81480,98820,5904R - коэффициент загрузки0,6066I - среднее время обслуживания заявки i-го типа2,00771,98002,0549 Исходный код программы:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <dos.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 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, "Skorost' raboti kanala ravna %d\n", V);
fprintf(fout, "Srednee vremya obslughivaniz zayavki i-go tipa:\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, "Intensivnost' obslughivaniya:\n");
for (i = 0; i < N_TYPE; i++)
fprintf(fout, "%6.4f\n", mu[i]);
fprintf(fout, "\n\n");
fprintf(fout, "Srednee chislo zayavok i-go tipa postupayushix vo"
" vremya obslughivaniya:\n");
for (i = 0; i < N_TYPE; i++)
fprintf(fout, "%6.4f\n", lambda1[i]);
fprintf(fout, "\n\n");
fprintf(fout, "koeffizient zagruzki i prostoya:\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, "koeffizient zagruzki i intensivnosti:\n");
fprintf(fout, "%6.4f\t%6.4f\n", R, Lambda);
fprintf(fout, "\n\n");
fprintf(fout, "Sr. prom. vremeni, intensivnosti postupleniya"
" i veroyatnosti postupleniya:\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, "t probyivaniya zayavki v ocheredi, sisteme,"
" lkbyf ocheredi i-go tipa zayavki:\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, "t zayavki v ocheredi, sisteme, sr.chislo zayavok v sisteme:\n");
fprintf(fout, "%6.4f\t%6.4f\t%6.4f\n", W, U, L);
fprintf(fout, "\n\n");
}
//***************************************************
void saveParam(FILE *fout,int V) {
double tp[N];
DemandArray[0].outQueue = DemandArray[0].inSystem;
DemandArray[0].outSystem = DemandArray[0].inSystem + (double)DemandArray[0].len/V;
tp[0] = DemandArray[0].outQueue - DemandArray[0].inSystem;
for (int i = 1; i < N; i++) {
int p = DemandArray[i - 1].outSystem - DemandArray[i].inSystem;
if (p >= 0) {
DemandArray[i].outQueue = DemandArray[i - 1].outSystem + 1;
} else {
DemandArray[i].outQueue = DemandArray[i].inSystem;
}
DemandArray[i].outSystem = DemandArray[i].outQueue +
(double)DemandArray[i].len / V;
tp[i] = DemandArray[i].outQueue - DemandArray[i].inSystem;
}
treatment(fout, V);
}
//***************************************************
void interval(FILE *f, int V) {
FILE *fout2 = fopen("out2.txt", "wt");
saveParam(fout2,V);
fclose(fout2);
double tp[N];
DemandArray[0].outQueue = DemandArray[0].inSystem;
DemandArray[0].outSystem = DemandArray[0].inSystem + (double)DemandArray[0].len/V;
tp[0] = DemandArray[0].outQueue - DemandArray[0].inSystem;
for (int i = 1; i < N; i++) {
int p = DemandArray[i - 1].outSystem - DemandArray[i].inSystem;
if (p >= 0) {
DemandArray[i].outQueue = DemandArray[i - 1].outSystem + 1;
} else {
DemandArray[i].outQueue = DemandArray[i].inSystem;
}
DemandArray[i].outSystem = DemandArray[i].outQueue +
(double)DemandArray[i].len / V;
tp[i] = DemandArray[i].outQueue - DemandArray[i].inSystem;
}
fprintf(f, " Type Dlina Vxod nachalo Konez Prostoi\n");
for (i = 0; i < N; i++) {
fprintf(f, "%5d\t%5d\t%10.4f\t%10.4f\t%10.4f\t%10.4f\n",
DemandArray[i].type,DemandArray[i].len,DemandArray[i].inSystem,
DemandArray[i].outQueue,DemandArray[i].outSystem, tp[i]);
}
}
int main() {
FILE *f = fopen("time.txt", "wt");
FILE *fout = fopen("out.txt", "wt");
if(f == NULL) {
printf("asd");
return 0;
}
clrscr();
struct time t;
gettime(&t);
xprev = t.ti_hund;
randomPuasson p;
int type;
int coun = 0;
int adres;
double s = 0;
for(int i = 0; i < N; i++, coun++) {
double interval;
interval = getRandVeibl();
s += interval;
DemandArray[i].inSystem = s;
if (getTime() == 1) {
i--;
continue;
}
DemandArray[i].outQueue = 0;
DemandArray[i].outSystem = 0;
DemandArray[i].type = getTypeRequest();
type = getTypeRequest();
int length;
switch(type) {
case 1:
adres = getFirstAdres();
DemandArray[i].len = getLengthFor1_3();
break;
case 2:
adres = getSecondAdres();
DemandArray[i].len = getLengthFor2();
break;
default:
adres = getFirdAdres();
DemandArray[i].len = getLengthFor1_3();
break;
}
}
for (int V = 10; V <= 100; V += 10) {
saveParam(fout, V);
}
V = 50;
interval(f, V);
fclose(fout);
fclose(f);
getch();
return 0;
}
3
2
Документ
Категория
Рефераты
Просмотров
17
Размер файла
270 Кб
Теги
lab4, улгту
1/--страниц
Пожаловаться на содержимое документа