Работая в диалоговом режиме с ПВМ мы определяем структуру генератора, т. е. некоторую исходную информацию: разрядность регистра сдвига ГПСЧ, вид ОС, количество и номера подключенных в цепь ОС разрядов регистра, количество генерируемых чисел и др.
Полученные числа записываются в файл и анализируются (строится гистограмма) с помощью программы analize.
Для генерации чисел мы выбрали 3 различные структуры ГПСЧ:
1) Файл vihod1.dat
Разрядность: 50
Обратная связь: 30
Количество чисел: 1000
Разрядность числа: 25
Число сдвигов: 2
2) Файл vihod2.dat
Число сдвигов: 3
3) Файл vihod3.dat
Разрядность: 70
Обратная связь: 35
Число сдвигов: 6
Проверим качество чисел в файлах программой analize.
Построим гистограммы:
vihod1.dat
vihod2.dat
vihod3.dat
Проверка соответствия чисел в последовательностях требуемому распределению дает следующие результаты: теоретические и статистические данные во всех 3-х файлах по критериям Колмогорова и Х2 не согласуются.
Определение числовых характеристик
|№ |Характеристика |vihod1.dat |vihod2.dat |vihod3.dat | | 1|наименьшее значение | 0.02 | 0.005 | 0.00059 | | 2|наибольшее значение | 0.96 | 0.996 | 0.999 | | 3|Мат. ожидание | 0.39 | 0.51 | 0.49 | | 4|Дисперсия | 0.078 | 0.086 | 0.085 | | 5|Среднеквадратич.отклон. | 0.279 | 0.294 | 0.292 | | 6|Эксцесс | -1.92 | -1.024 | -1.12 |
Определение характеристик корреляции
?(?) ?(?)
1 1
0 ? 0
?
5
vihod1.dat vihod2.dat
?(?)
1
0 ?
Вывод:
1) С увеличением числа сдвигов характеристики чисел улучшаются.
2) Из приведенных 3-ех файлов самые качественные числа находятся в файле vihod3.dat , т. к. числа в последовательности достаточно независимы. Но в то же время нет согласованности по обеим критериям.
3.4.1.2. Программный способ
При программном способе псевдослучайные числа нам необходимо сформировать методом умножения.
Суть метода: выбирается два n - разрядных числа X1 и X2. X1> 0 | | |? > 0 | | |Числовые | m | 1/? | |m характеристики |? |1/? | |D | | | |Алгоритм получения | ______ | 1 | |случайной величины |xi=?-2 ln z1 cos2? z2 |xi=- ---- ln zi | | |xi+1=?-2 ln z1 cos2? |? | | |z2 | | | |( m=0; D=1 ) | | |Область значений | | | |случайной величины | | |
Исследование последовательности нормально распределенных ПСЧ.
(Программа в приложении № 3)
| | |Теоретическое|Статистическое | |№ |Характеристика | | | | | |значение |значение | | 1|Мин.знач.совокупности | 11 | 12.31 | | 2|Макс.знач.совокуп-ти | 24 | 25.23 | | 3|Мат. ожидание | 16 | 16.02 | | 4|Дисперсия | 2 | 2.07 | | 5|Сред.квадр.отклонение | 1 | 1.439 | | 6|Коэфф.ассиметрии | 0 | 0.35 | | 7|Эксцесс | 0 | 2.716 |
Аппроксимация стат. распределения теоретической функцией.
Проверка соответствия чисел последовательности требуемому распределению дает следующие результаты:
Критерий Хи-Квадрат:
Х2=0.0000813
С доверительной вероятностью 0.999 можно утверждать о согласованности теоретических и статистических данных.
Критерий Колмогорова:
Максимальная разность max| F(x)-F*(x) | = 0.0823
Рис. 4. График изменения коэффициента корреляции.
Полученная последовательность ПСЧ, имеющая нормальный закон распределения, удовлетворяет предъявленным требованиям по качеству и может быть использована в задачах моделирования, т. к. - числовые характеристики имеют незначительное отклонение от теоретических значений, - по критериям согласия получены удовлетворительные значения доверительных вероятностей, - числа последовательности достаточно независимы, о чем свидетельствует график (Рис. 4.)
Последовательности ПСЧ для 2-го и 3-го пользователей генерируются аналогично, с той лишь разницей, что мат. ожидание у них 17 и 18 соответственно.
Исследование последовательности экспоненциально распределенных ПСЧ
| | |Теоретическое|Статистическое| |№ |Характеристика | | | | | |значение |значение | | 1|Мин.знач.совокупности | 0.5 | 0.8 | | 2|Макс.знач.совокуп-ти | 3.5 | 2.358 | | 3|Мат. ожидание | 0.8 | 1.06 | | 4|Дисперсия | 0.08 | 0.066 | | 5|Сред.квадр.отклонение | 0.5 | 0.2575 | | 6|Коэфф.ассиметрии | 0 | 1.682 | | 7|Эксцесс | 0 | 1.097 |
Аппроксимация стат. распределения теоретической функцией
Проверка соответствия чисел последовательности требуемому закону распределения дает следующие результаты:
Значение Х2=2310
Максимальная разность max| F(x)-F*(x) | = 0.023
С доверительной вероятностью 0.91 можно утверждать о согласованности теоретических и статистических данных.
Рис. 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. Получение и интерпретация результатов моделирования
Значения выходных характеристик, полученные при прогонках модели с различными случайными воздействиями.
| № |% выполненных заданий,| |прогона|поступ. от 2-го | | |пользователя | | 1 | 9 % | | 2 | 9 % | | 3 | 9 % | | 4 | 9 % | | 5 | 9 % | | 6 | 9 % | | 7 | 9 % | | 8 | 9 % | | 9 | 9 % | | 10 | 9 % | |сред.зн| 9 % | |. | |
Усредненные значения выходной характеристики подтверждают данные детерминированной модели т.к. с введением вероятности прихода второго пользователя равной 0.1 в детерминированную модель теоретическое значение процента выполненных заданий поступивших от второго пользователя становится равным 10 % .
Литература
1. Разработка САПР. № 9
В.М. Черненький. Имитационное моделирование.
2. Лекции по курсу “Моделирование”.
3. Б. Страуструп. Язык программирования С++.
4. Шрайбер Г.Д. Моделирование на GPSS.
5. Е.И. Козелл. от Си к С++.
Приложение № 1
// ЗАДАНИЕ 15. Детерминированная модель системы. #include #include
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
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=50) { printf("nПереполнение очереди!n"); return 0; } else { ocher[n]=znw; znw=0; n++; }
{ 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