![]() |
|
|
Реферат: Моделирование ЭВМ
0 t 5 vihod3.dat Вывод: 1) С увеличением числа сдвигов характеристики чисел улучшаются. 2) Из приведенных 3-ех файлов самые качественные числа находятся в файле vihod3.dat , т. к. числа в последовательности достаточно независимы. Но в то же время нет согласованности по обеим критериям. 3.4.1.2. Программный способ При программном способе псевдослучайные числа нам необходимо сформировать методом умножения. Суть метода: выбирается два n - разрядных числа X1 и X2. X1><0, X2><0. Затем X1 умножаем на X2 и получаем некоторое значение Y , у которого 2n - разрядов: Y=X1*X2. Из 2n - разрядного Y выбираем n - разрядное Х1 и Х2 и вновь полученные Х1, Х2 умножаем друг на друга. Далее все повторяется до тех пор пока не будет сформировано необходимое количество чисел. Программа формирования ГСК на основе метода умножения приведена в Приложении № 2. Полученные числа записываются в файл vi_gpsc1.dat и анализируются с помощью программы analize. Определение числовых характеристик
Аппроксимация статистического распределения теоретической функцией
Проверка соответствия чисел последовательности требуемому распределению дает следующие результаты: Критерий Хи-Квадрат: Х2=12.9 С доверительной вероятностью 0.166 можно утверждать о согласованности теоретических и статистических данных. Критерий Колмогорова: Максимальная разность max| F(x)-F*(x) | = 0.0885 С доверительной вероятностью 0.999 можно утверждать о согласованности теоретических и статистических данных. Определение характеристик корреляции r(t)
5 Рис. 3. График изменения коэфф. корреляции Вывод: Полученная по методу умножения последовательность СЧ, имеющих равномерный закон распределения удовлетворяет предъявленным требованиям по качеству и может быть использован в задачах моделирования, т. к.: 1) есть согласованность по критерию Колмогорова 2) числа не зависят друг от друга, о чем говорит график (Рис. 3.) 3.4.1.3. Выбор генератора РРПСЧ Эффективность статистического моделирования и достоверность полученных результатов находятся в прямой зависимости от качества используемых в модели случайных последовательностей. Под качеством здесь понимается соответствие чисел последовательности заданной функции распределения (плотности распределения) и ее параметрам: М.О. и т.д.; независимость чисел последовательности друг от друга, т.е. отсутствие автокорреляции в последовательности случайных чисел. Выберем генератор РРПСЧ, который используется для генерации времени между поступлениями заявок от пользователей. Последовательность чисел, полученных аппаратным способом и хранящихся в файле vihod3.dat не совсем удовлетворяет предъявленным требованиям по качеству, т.к. нет согласия по критериям теоретических и статистических данных. В пункте 3.4.1.2. мы делая вывод уже говорили о том, что генератор РРПСЧ сформированный программным способом (по методу умножения) можно использовать в задачах моделирования, но для простоты будем использовать встроенную функцию random( ), простую в программировании и имеющую хорошие характеристики. 3.4.2. Моделирование случайных воздействий, имеющих неравномерное распределение Для стохастической модели требуются числа распределенные по нормальному закону и по экспоненциальному закону. Напишем функции формирования чисел по требуемому закону распределения. Эти числа запишем в файл. Оценим качество полученных последовательностей ПСЧ, пользуясь автоматизированной системой analize. Проанализируем результаты исследования и сделаем вывод о качестве каждой последовательности и о возможности их использования в стохастической модели. Сведения о непрерывных случайных величинах
Исследование последовательности нормально распределенных ПСЧ. (Программа в приложении № 3)
Определение числовых характеристик
Аппроксимация стат. распределения теоретической функцией.
Проверка соответствия чисел последовательности требуемому распределению дает следующие результаты: Критерий Хи-Квадрат: Х2=0.0000813 С доверительной вероятностью 0.999 можно утверждать о согласованности теоретических и статистических данных. Критерий Колмогорова: Максимальная разность max| F(x)-F*(x) | = 0.0823 С доверительной вероятностью 0.999 можно утверждать о согласованности теоретических и статистических данных. Определение характеристик корреляции
5 Рис. 4. График изменения коэффициента корреляции. Вывод: Полученная последовательность ПСЧ, имеющая нормальный закон распределения, удовлетворяет предъявленным требованиям по качеству и может быть использована в задачах моделирования, т. к. - числовые характеристики имеют незначительное отклонение от теоретических значений, - по критериям согласия получены удовлетворительные значения доверительных вероятностей, - числа последовательности достаточно независимы, о чем свидетельствует график (Рис. 4.) Последовательности ПСЧ для 2-го и 3-го пользователей генерируются аналогично, с той лишь разницей, что мат. ожидание у них 17 и 18 соответственно. Исследование последовательности экспоненциально распределенных ПСЧ (Программа в приложении № 3) Определение числовых характеристик
Аппроксимация стат. распределения теоретической функцией
Проверка соответствия чисел последовательности требуемому закону распределения дает следующие результаты: Критерий Хи-Квадрат: Значение Х2=2310 С доверительной вероятностью 0.999 можно утверждать о согласованности теоретических и статистических данных. Критерий Колмогорова: Максимальная разность max| F(x)-F*(x) | = 0.023 С доверительной вероятностью 0.91 можно утверждать о согласованности теоретических и статистических данных.
Определение характеристик корреляции
5 Рис. 5. График изменения коэффициента корреляции. Вывод: Полученная последовательность ПСЧ, имеющих экспоненциальный закон распределения, удовлетворяет предъявленным требованиям по качеству и может быть использована в задачах моделирования, т. к. - числовые характеристики имеют незначительное отклонение от теоретических значений, - по критериям согласия получены удовлетворительные значения доверительных вероятностей, - числа последовательности достаточно независимы, о чем свидетельствует график (Рис. 5.) 3.5. Описание моделирующей программы для стохастической модели Преобразуем ранее созданную детерминированную модель вычислительной системы в стохастическую модель. Для этого потребуются следующие изменения детерминированной программы: - вставим программный генератор РРПСЧ - встроенную функцию random( ) возвращающую РРПСЧ в интервале (0,1) - для определения времени между приходами пользователей. - файл norm-1.dat , имеющий нормальный закон распределения с m=16 , D=2 для определения времени подготовки задания на 1-ой сетевой машине. - файл norm-2.dat , имеющий нормальный закон распределения с m=17 , D=2 для определения времени подготовки задания на 2-ой сетевой машине. - файл norm-3.dat , имеющий нормальный закон распределения с m=18 , D=2 для определения времени подготовки задания на 3-ей сетевой машине. - файл expon.dat , имеющий экспоненциальный закон распределения с m=0.8 для определения времени выполнения задания на ЭВМ. - уберем функции ввода с клавиатуры которые использовались для ввода параметров системы. Стохастическая моделирующая программа приведена в Приложении № 4. 4. Получение и интерпретация результатов моделирования Значения выходных характеристик, полученные при прогонках модели с различными случайными воздействиями.
Вывод: Усредненные значения выходной характеристики подтверждают данные детерминированной модели т.к. с введением вероятности прихода второго пользователя равной 0.1 в детерминированную модель теоретическое значение процента выполненных заданий поступивших от второго пользователя становится равным 10 % .
Литература 1. Разработка САПР. № 9 В.М. Черненький. Имитационное моделирование. 2. Лекции по курсу “Моделирование”. 3. Б. Страуструп. Язык программирования С++. 4. Шрайбер Г.Д. Моделирование на GPSS. 5. Е.И. Козелл. от Си к С++. Приложение № 1 // ЗАДАНИЕ 15. Детерминированная модель системы. #include<stdio.h> #include<conio.h> const emb=1; //единица машинного времени main() { int tp=100; //интервал между приходами пользователей int tgz1=160; //время подготовки задания 1-ым пользователем int tgz2=170; //время подготовки задания 2-ым пользователем int tgz3=180; //время подготовки задания 3-им пользователем int tm=8; //время выполнения задания на ЭВМ int k=500; //количество промоделированных на ЭВМ заданий int t=0; //время char nz=0; //наличие заявки на входе системы char cikl=0; //цикл прихода заявок char pz1=0; //подготовка задания на сетевой машине 1 char pz2=0; //подготовка задания на сетевой машине 1 char pz3=0; //подготовка задания на сетевой машине 1 char znw=0; //наличие заявки на выполнение задания char wz=0; //выполнение задания на ЭВМ char ocher[50]; //очередь char n=0; //индекс свободного элемента в очереди int w2=0; //количество вып. заданий от 2-го пользователя int ztgz1,ztgz2,ztgz3,ztm,zk; //перем.для запоминания параметров системы printf("Введите интервал между приходами пользователей "); scanf("%d",&tp); printf("Введите время подготовки задания 1-ым пользователем "); scanf("%d",&tgz1); ztgz1=tgz1; printf("Введите время подготовки задания 2-ым пользователем "); scanf("%d",&tgz2); ztgz2=tgz2; printf("Введите время подготовки задания 3-ым пользователем "); scanf("%d",&tgz3); ztgz3=tgz3; printf("Введите время выполнения задания на ЭВМ "); scanf("%d",&tm); ztm=tm; printf("Введите количество промоделированных на ЭВМ заданий "); scanf("%d",&k); zk=k; //----------- моделирующий цикл ----------------------------------- while (k!=0) { t=t+emb; //появление пользователя if (t%tp==0) switch (cikl) { case 0: nz=1; cikl=1; break; case 1: nz=2; cikl=2; break; case 2: nz=3; cikl=3; break; case 3: nz=1; cikl=0; }
//начало подготовки задания switch (nz) { case 1: pz1=1; nz=0; break; case 2: pz2=1; nz=0; break; case 3: pz3=1; nz=0; } Приложение № 1 (продолжение) //подготовка задания if (pz1==1) if (tgz1==0) {pz1=0; znw=1; tgz1=ztgz1;} else tgz1=tgz1-emb; if (pz2==1) if (tgz2==0) {pz2=0; znw=2; tgz2=ztgz2;} else tgz2=tgz2-emb; if (pz3==1) if (tgz3==0) {pz3=0; znw=3; tgz3=ztgz3;} else tgz3=tgz3-emb; // запрос на выполнение if (n!=0 && wz==0) { wz=ocher[n-1]; n--; } //если очередь не пуста а ЭВМ свобода // то выпол. заявку из очереди if (znw!=0) //если имеется заявка на выполнение if (wz==0) { wz=znw; znw=0; } //если ЭВМ не занята else //если ЭВМ занята, то ставим заявку в очередь { if (n>=50) { printf("\nПереполнение очереди!\n"); return 0; } else { ocher[n]=znw; znw=0; n++; } } //выполнение задания на ЭВМ switch (wz) { case 1: if (tm==0) {wz=0; k--; tm=ztm; } else tm=tm-emb; break; case 2: if (tm==0) {wz=0; k--; w2++; tm=ztm; } else tm=tm-emb; break; case 3: if (tm==0) {wz=0; k--; tm=ztm; } else tm=tm-emb; } } printf("\nПроцент вып. заданий, поступ. от 2-го польз.=%d%",100*w2/zk); } Приложение № 2 //Генерирование равномерно распределенных случайных величин #include<stdio.h> long x=7533; //псевдослучайное число long Rnd(long x) // процедура формирования очередного псевдослучайного числа { int l=5169; long k=65536; return (l*x)%k; } void main() { FILE *fout; //выходной файл случайных величин int i; //параметр цикла fout=fopen("vi_gpsc1.dat","w"); for(i=1; i<=1000; i++) fprintf(fout,"%f ",float((x=Rnd(x)))/65536); fclose(fout); } Приложение № 3 uses crt; var f1,f2,f3,f4:text; i:integer; x,z1,z2,y1,y2,a,y3,y4,y5,y6:real; procedure norm1(var x1,x2:real); begin z1:=random; z2:=random; x1:=sqrt(-2*ln(z1))*cos(2*pi*z2); x2:=sqrt(-2*ln(z1))*sin(2*pi*z2); x1:=sqrt(2)*x1+16; x2:=sqrt(2)*x2+16; end; procedure norm2(var x1,x2:real); begin z1:=random; z2:=random; x1:=sqrt(-2*ln(z1))*cos(2*pi*z2); x2:=sqrt(-2*ln(z1))*sin(2*pi*z2); x1:=sqrt(2)*x1+17; x2:=sqrt(2)*x2+17; end; procedure norm3(var x1,x2:real); begin z1:=random; z2:=random; x1:=sqrt(-2*ln(z1))*cos(2*pi*z2); x2:=sqrt(-2*ln(z1))*sin(2*pi*z2); x1:=sqrt(2)*x1+18; x2:=sqrt(2)*x2+18; end; procedure expon (a:real ; var x: real); begin z1:=random; x:=-(1/a)*ln(z1); x:=sqrt(1/sqr(a))*x+0.8; end; Begin clrscr; assign(f1,'d:\tp\norm-1.dat'); rewrite(f1); assign(f3,'d:\tp\norm-2.dat'); rewrite(f3); assign(f4,'d:\tp\norm-3.dat'); rewrite(f4); writeln(' Нормальный закон:'); for i:=1 to 500 do begin norm1(y1,y2); write(f1,y1,' ');write(f1,y2,' '); norm2(y3,y4); write(f3,y3,' ');write(f3,y4,' '); norm3(y5,y6); write(f4,y5,' ');write(f4,y6,' '); Приложение № 3 (продолжение) end; close (f1); close (f3); close (f4); assign(f2,'d:\tp\exp.dat'); rewrite(f2); writeln('Экспоненциальный закон '); writeln('Введите параметр a: '); readln(a); for i:=1 to 500 do begin expon(a,x);write(f2,x,' '); end; close(f2); End. Приложение № 4 //стохастическая модель системы #include<stdio.h> #include<conio.h> const emb=1; //единица машинного времени FILE *ravn, *norm1, *norm2, *norm3, *exp; float a; int ravnom() { fscanf(ravn,"%f ",&a); return int(a*5); } int normal1() { fscanf(norm1,"%f ",&a); return int(a*10); } int normal2() { fscanf(norm2,"%f ",&a); return int(a*10); } int normal3() { fscanf(norm3,"%f ",&a); return int(a*10); } int expon() { fscanf(exp,"%f ",&a); return int(a*10); } //------------------------- основная программа ---------------------- main() { int tp=100; //интервал между приходами пользователей int tgz1=160; //время подготовки задания 1-ым пользователем int tgz2=170; //время подготовки задания 2-ым пользователем int tgz3=180; //время подготовки задания 3-им пользователем int tm=8; //время выполнения задания на ЭВМ int k=500; //количество промоделированных на ЭВМ заданий int t=0; //время char nz=0; //наличие заявки на входе системы char cikl=0; //цикл прихода заявок char pz1=0; //подготовка задания на сетевой машине 1 char pz2=0; //подготовка задания на сетевой машине 1 char pz3=0; //подготовка задания на сетевой машине 1 char znw=0; //наличие заявки на выполнение задания char wz=0; //выполнение задания на ЭВМ char ocher[50]; //очередь char n=0; //индекс свободного элемента в очереди int w2=0; //количество вып. заданий от 2-го пользователя ravn=fopen("ravnomer.dat","r"); norm1=fopen("norm1.dat","r"); norm2=fopen("norm2.dat","r"); norm3=fopen("norm3.dat","r"); exp=fopen("exp.dat","r"); tgz1=normal1(); Приложение № 4 (продолжение) tgz2=normal2(); tgz3=normal3(); tm=expon(); tp=10+ravnom(); //----------- моделирующий цикл ----------------------------------- while (k!=0) { t=t+emb; //появление пользователя if (t%tp==0) { tp=10+ravnom(); fscanf(ravn,"%f ",&a); if (a<0.4) nz=1; if (a>0.4 && a<0.5) nz=2; if (a>0.5) nz=3; } //начало подготовки задания switch (nz) { case 1: pz1=1; nz=0; break; case 2: pz2=1; nz=0; break; case 3: pz3=1; nz=0; } //подготовка задания if (pz1==1) if (tgz1==0) {pz1=0; znw=1; tgz1=normal1();} else tgz1=tgz1-emb; if (pz2==1) if (tgz2==0) {pz2=0; znw=2; tgz2=normal2();} else tgz2=tgz2-emb; if (pz3==1) if (tgz3==0) {pz3=0; znw=3; tgz3=normal3();} else tgz3=tgz3-emb; // запрос на выполнение if (n!=0 && wz==0) { wz=ocher[n-1]; n--; } //если очередь не пуста а ЭВМ свобода // то выпол. заявку из очереди if (znw!=0) //если имеется заявка на выполнение if (wz==0) { wz=znw; znw=0; } //если ЭВМ не занята else //если ЭВМ занята, то ставим заявку в очередь { if (n>=50) { printf("\nПереполнение очереди!\n"); return 0; } else { ocher[n]=znw; znw=0; n++; } } //выполнение задания на ЭВМ switch (wz) { case 1: if (tm==0) {wz=0; k--; tm=expon(); } else tm=tm-emb; break; case 2: if (tm==0) {wz=0; k--; w2++; tm=expon(); } else tm=tm-emb; break; case 3: if (tm==0) {wz=0; k--; tm=expon(); } else tm=tm-emb; } } printf("\nПроцент вып. заданий, поступ. от 2-го польз.=%d%",100*w2/500); fclose(ravn); fclose(norm1); fclose(norm2); fclose(norm3); fclose(exp); } |
Страницы: 1, 2
![]() |
||
НОВОСТИ | ![]() |
![]() |
||
ВХОД | ![]() |
|
Рефераты бесплатно, реферат бесплатно, курсовые работы, реферат, доклады, рефераты, рефераты скачать, рефераты на тему, сочинения, курсовые, дипломы, научные работы и многое другое. |
||
При использовании материалов - ссылка на сайт обязательна. |