Оценка качества работы генератора случайных чисел
Анализ генераторов случайных чисел в системах программирования на языках C# и Visual Basic. Рассмотрение основных способов оценки качества работы генератора случайных чисел. Особенности моделирования систем со случайным характером функционирования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 10.05.2021 |
Размер файла | 3,9 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Минобрнауки России
Федеральное государственное бюджетное образовательное учреждение высшего образования "Тверской государственный технический университет"
(ТвГТУ)
Кафедра ЭВМ
Оценка качества работы генератора случайных чисел
Татаренко С.М. - студентка 3-го курса
Принял - Абу-Абед Фарес Надимович
Цели работы
При моделировании систем со случайным характером функционирования используются средства вычислительной техники. При этом источником случайности является генератор случайных чисел, встроенный в соответствующую среду программирования. Эти генераторы вырабатывают случайные значения на отрезке от 0 до 1. Как следствие, качество моделирования будет зависеть от качества работы генератора случайных чисел, и степени равномерности распределения значений.
При выполнении данной лабораторной работы необходимо рассмотреть генераторы случайных чисел в выбранных системах программирования (C# и VBA), оценить качество их работы и сравнить их. Рассчитать значение , где max{Ni} - максимальное количество вхождений в отрезок, min{Ni} - минимальное количество вхождений в отрезок, N - количество обращений к ГСЧ. Следует выяснить, как отношение д зависит от N - количества проводимых опытов и от M - основания генератора случайных чисел.
генератор программирование язык
Результаты выполнения программы в языковой среде С#
Сочетания при N = 1000
· M = 1000
Максимальное количество итераций 115, минимальное - 89; д = 0,26.
генератор программирование язык
Рис. 1 - Результаты работы программы при N = 1000, M = 1000
· M = 5000
Максимальное количество итераций 121, минимальное - 88; д = 0,33.
Рис. 2 - Результаты работы программы при N = 1000, M = 5000
· M = 10 000
Максимальное количество итераций 115, минимальное - 77; д = 0,38.
Рис. 3 - Результат работы программы при N = 1000, M = 10 000
Сочетания при N = 5000 M = 1000
Максимальное количество итераций 523, минимальное - 442; д = 0,162.
Рис. 4 - Результат работы программы при N = 1000, M = 10 000 M = 5000
Максимальное количество итераций 539, минимальное - 468; д = 0,142.
Рис. 5 - Результат работы программы при N = 5000, M = 5000
· M = 10 000
Максимальное количество итераций 526, минимальное - 469; д = 0,114.
Рис. 6 - Результат работы программы при N = 5000, M = 10 000
Сочетания при N = 10 000
· M = 1000
Максимальное количество итераций 1054, минимальное - 924; д = 0,13.
Рис. 7 - Результат работы программы при N = 10 000, M = 1000
· M = 5000
Максимальное количество итераций 1051, минимальное - 960; д = 0,091.
Рис. 8 - Результат работы программы при N = 10 000, M = 5000
· M = 10 000. Максимальное количество итераций 1053, минимальное - 956; д = 0,097.
Рис. 9 - Результат работы программы при N = 10 000, M = 10 000
Сводные графики
Рис. 10 - Графики при N = const
Рис. 11 - Графики при M = const
Код программы
static void Main(string[] args)
{
//Заполнение параметров ГСЧ
Console.WriteLine("Введите количество обращений к ГСЧ (N)");
int N = int.Parse(Console.ReadLine());
Console.WriteLine("Введите основание ГСЧ (M)");
int M = int.Parse(Console.ReadLine());
int[] enums = new int[10]; //Создание массива счётчиков
Random rnd = new Random(); //Объявление переменной рандомайзера
for (int i=0; i<N; i++) //Прогон N раз
{
double r = rnd.Next(M); //Получение случайного числа от 0 до M
double x = r / M;
if (0 <= x && x <= 0.1) //Проверка попадания в отрезки
{
enums[0]++;
}
else if (0.1 < x && x <= 0.2)
{
enums[1]++;
}
else if (0.2 < x && x <= 0.3)
{
enums[2]++;
}
else if (0.3 < x && x <= 0.4)
{
enums[3]++;
}
else if (0.4 < x && x <= 0.5)
{
enums[4]++;
}
else if (0.5 < x && x <= 0.6)
{
enums[5]++;
}
else if (0.6 < x && x <= 0.7)
{
enums[6]++;
}
else if (0.7 < x && x <= 0.8)
{
enums[7]++;
}
else if (0.8 < x && x <= 0.9)
{
enums[8]++;
}
else if (0.9 < x && x <= 1)
{
enums[9]++;
}
}
//Вывод результатов
Console.WriteLine("\ndelta=({0}-{1})/{2}={3}\n", Max(enums), Min(enums), N/10, (Max(enums)-Min(enums))/(N/10));
Console.Write("[0, 0.1] :");
Input(enums[0], N);
Console.Write("(0.1, 0.2]:");
Input(enums[1], N);
Console.Write("(0.2, 0.3]:");
Input(enums[2], N);
Console.Write("(0.3, 0.4]:");
Input(enums[3], N);
Console.Write("(0.4, 0.5]:");
Input(enums[4], N);
Console.Write("(0.5, 0.6]:");
Input(enums[5], N);
Console.Write("(0.6, 0.7]:");
Input(enums[6], N);
Console.Write("(0.7, 0.8]:");
Input(enums[7], N);
Console.Write("(0.8, 0.9]:");
Input(enums[8], N);
Console.Write("(0.9, 1] :");
Input(enums[9], N);
Console.ReadKey();
}
//Функция нахождения максимума в массиве
static double Max (int[] Arr)
{
int max = int.MinValue;
for (int i=0; i<Arr.Length; i++)
{
if (Arr[i] > max)
max = Arr[i];
}
return max;
}
//Функция нахождения минимума в массиве
static double Min (int[]Arr)
{
int min = int.MaxValue;
for(int i=0; i<Arr.Length; i++)
{
if (Arr[i] < min)
min = Arr[i];
}
return min;
}
//Функция вывода графического представления результатов
static void Input (int count, int N)
{
for (int i=0; i<((count*100)/N); i++)
{
Console.Write("|");
}
for (int i=0; i<100-((count * 100) / N); i++)
{
Console.Write(".");
}
Console.Write(count+"\n");
}
Результаты выполнения программы в языковой среде VBA
Сочетания при N = 1000
· М = 1000
Максимальное количество итераций 117, минимальное - 86; д = 0,31.
Рис. 12 - Результат выполнения программы при N = 1000, M = 1000
· M = 5000
Максимальное количество итераций 111, минимальное - 75; д = 0,36.
Рис. 13 - Результат выполнения программы при N = 1000, M = 5000
· M = 10 000
Максимальное количество итераций 115, минимальное - 72; д = 0,43.
Рис. 14 - Результат выполнения программы при N = 1000, M = 10 000
Сочетания при N = 5000
· M = 1000
Максимальное количество итераций 552, минимальное - 358; д = 0,334.
Рис. 15 - Результат выполнения программы при N = 5000, M = 1000
· M = 5000
Максимальное количество итераций 566, минимальное - 372; д = 0,388.
Рис. 16 - Результат выполнения программы при N = 5000, M = 5000
· M = 10 000
Максимальное количество итераций 556, минимальное - 407; д = 0,298.
Рис. 17 - Результат выполнения программы при N = 5000, M = 10 000
Сочетания при N = 10 000
· M = 1000
Максимальное количество итераций 1125, минимальное - 768; д = 0,357.
Рис. 18 - Результат выполнения программы при N = 10 000, M = 1000
· M = 5000. Максимальное количество итераций 1128, минимальное - 809; д = 0,319.
Рис. 19 - Результат выполнения программы при N = 10 000, M = 5000
· M = 10 000
Максимальное количество итераций 1096, минимальное - 901; д = 0,195.
Рис. 20 - Результат выполнения программы при N = 10 000, M = 10 000
Сводные графики
Рис. 21 - Графики при N = const
Рис. 22 - Графики при M = const
Код программы
Public Sub ModDisSys1()
Cells(1, 1) = "Введите количество обращений к ГСЧ"
Cells(2, 1) = "N ="
Cells(3, 1) = "Введите основание ГСЧ"
Cells(4, 1) = "M ="
'Задание начальных параметров ГСЧ
Dim N As Integer, M As Double
N = Cells(2, 2)
M = Cells(4, 2)
'Создание массива счётчиков
Dim Enums(9) As Integer
For i = 0 To N
Randomize 'Инициализация генератора случайных чисел значением, возвращаемым системным таймером
Dim R As Double, X As Double
R = (M + 1) * Rnd 'Генерация рандомного числа от 0 до M
X = R / M
'Проверка на попадание в отрезки
If 0 <= X And X <= 0.1 Then
Enums(0) = Enums(0) + 1
End If
If 0.1 < X And X <= 0.2 Then
Enums(1) = Enums(1) + 1
End If
If 0.2 < X And X <= 0.3 Then
Enums(2) = Enums(2) + 1
End If
If 0.3 < X And X <= 0.4 Then
Enums(3) = Enums(3) + 1
End If
If 0.4 < X And X <= 0.5 Then
Enums(4) = Enums(4) + 1
End If
If 0.5 < X And X <= 0.6 Then
Enums(5) = Enums(5) + 1
End If
If 0.6 < X And X <= 0.7 Then
Enums(6) = Enums(6) + 1
End If
If 0.7 < X And X <= 0.8 Then
Enums(7) = Enums(7) + 1
End If
If 0.8 < X And X <= 0.9 Then
Enums(8) = Enums(8) + 1
End If
If 0.9 < X And X <= 1 Then
Enums(9) = Enums(9) + 1
End If
Next i
'Вывод значений
Cells(6, 1) = "[0, 0.1]:"
Cells(6, 2) = Enums(0)
Cells(7, 1) = "(0.1, 0.2]:"
Cells(7, 2) = Enums(1)
Cells(8, 1) = "(0.2, 0.3]:"
Cells(8, 2) = Enums(2)
Cells(9, 1) = "(0.3, 0.4]:"
Cells(9, 2) = Enums(3)
Cells(10, 1) = "(0.4, 0.5]:"
Cells(10, 2) = Enums(4)
Cells(11, 1) = "(0.5, 0.6]:"
Cells(11, 2) = Enums(5)
Cells(12, 1) = "(0.6, 0.7]:"
Cells(12, 2) = Enums(6)
Cells(13, 1) = "(0.7, 0.8]:"
Cells(13, 2) = Enums(7)
Cells(14, 1) = "(0.8, 0.9]:"
Cells(14, 2) = Enums(8)
Cells(15, 1) = "(0.9, 1]:"
Cells(15, 2) = Enums(9)
'Вывод максимального, минимального значений, значения дельта
Cells(6, 3) = "max="
Cells(6, 4) = Application.Max(Range("B6:B15"))
Cells(7, 3) = "min="
Cells(7, 4) = Application.Min(Range("B6:B15"))
Cells(9, 3) = "delta="
Cells(9, 4) = (Application.Max(Range("B6:B15")) - Application.Min(Range("B6:B15"))) / (N / 10)
End Sub
Выводы
генератор программирование язык
В результате выполнения данной лабораторной работы были рассмотрены генераторы случайных чисел в системах программирования на языках C# и Visual Basic.
Отношение д, которое выражает относительную погрешность, зависит как от N, количества итераций, так и от M, основания генератора случайных чисел. В результате работы программы и построения сводных графиков были получены наглядные результаты.
В программе, написанной на языке C#, при постоянном значении N = 1000 значение отношения д росло с увеличением основания ГСЧ. При N = 5000 и N = 10 000 отношение д уменьшалось и было значительно ниже значений, полученных в первой серии опытов.
При постоянных значениях M картина была похожая, за исключением того, что и при M = 1000 отношение д уменьшалось с увеличением значения N. Причём графики направлены вниз довольно круто. Таким образом можно сделать вывод, что ГСЧ в языковой среде C# генерирует тем более равномерно равноудалённые числа, чем больше количество опытов и основание ГСЧ.
В программе, написанной на языке Visual Basic тенденция похожая. При постоянном значении N = 1000 значение отношение д увеличивается с увеличением значения M. При остальных сочетаниях M и N значение д уменьшалось, однако, в отличие от предыдущей программы, было не намного меньше первой серии опытов.
При M = const графики довольно похожи на предыдущие. Разброс значений небольшой, графики практически прямые. Таким образом генератор случайных чисел в среде VBA так же, как и ГСЧ в среде C#, генерирует более равномерное распределение с увеличением значений N и M, однако, судя по графикам, значение отношения д меняется незначительно.
Генератор, представленный в системе программирования на языке C# показал намного лучшие результаты. Значение отношения д колебалось от 0,091 до 0,38, что является относительно небольшим показателем ошибки. В то же время генератор, использованный в среде VBA показал результаты куда хуже при прочих равных условиях. Значение д колебалось от 0,195 до 0,43, что на порядок больше ГСЧ C#. Таким образом можно сделать вывод, что качество работы генератора случайных чисел зависит не только от количества опытов и основания, но так же и от среды, в которой написана программа.
Размещено на Allbest.ru
...Подобные документы
Анализ способов построения генераторов случайных чисел для криптографических задач. Анализ генератора случайных чисел на основе магнитометров. Анализ статистических свойств двоичных последовательностей, полученных путем квантования данных магнитометра.
дипломная работа [2,5 M], добавлен 06.05.2018Способы получения случайных чисел в программировании и их использование для решения ряда задач. Принцип действия и тестирование работы генератора случайных чисел в Borland C++, его преимущества. Генерация одномерной и двумерной случайной величины.
лабораторная работа [105,4 K], добавлен 06.07.2009Структура и функции генератора случайных чисел. Методы предельного уменьшения ошибки второго рода. Усиление шумового сигнала. Его дискретизация по времени и аналого-цифровое преобразование. Формирование случайной последовательности и ее корреляция.
курсовая работа [299,4 K], добавлен 11.12.2014Характеристика вероятностного алгоритма и особенности его использования. Принцип работы и назначение генератора случайных чисел, сущность псевдослучайных чисел. Рассмотрение и реализация метода середины квадрата, разработка алгоритма и его кодирование.
курсовая работа [50,3 K], добавлен 18.09.2009Написание программы для генерации случайных чисел, в которой реализуются возможности генерации абсолютно случайных чисел. Приложение на языке С/С++. Описание узла, содержащего данные; функций и методов работы; чтения данных из памяти и вывода их на экран.
курсовая работа [172,4 K], добавлен 23.05.2012Проверка работоспособности, оценка качества, надежности функционирования и определение статистических параметров вычислительных устройств. Особенности построения программной модели системы обработки информации, содержащей мультиплексный канал и ЭВМ.
курсовая работа [1,1 M], добавлен 30.10.2013Проектирование датчика случайных чисел, пригодного для моделирования случайной последовательности с заданным законом распределения. Методы моделирования. Разработка алгоритма и программы датчика. Исследование свойств выработанной им последовательности.
лабораторная работа [124,2 K], добавлен 15.06.2010Формирование устойчивой последовательности псевдослучайных чисел с использованием метода "середины квадрата". Разработка программы для определения среднего значения чисел, среднего значения квадратов чисел и дисперсии для последовательности из 20 чисел.
лабораторная работа [1,4 M], добавлен 21.01.2015Применение случайных чисел в моделировании, выборке, численном анализе, программировании и принятии решений. Понятие равномерного распределения вероятности. Способы получения последовательности. Правила выбора модуля. Критерий Колмогорова-Смирнова.
курсовая работа [1,3 M], добавлен 17.03.2011Применение метода имитационного моделирования с использованием генератора случайных чисел для расчета статистически достоверных переменных. Создание программы на языке GPSS. Результаты моделирования диспетчерского пункта по управлению транспортом.
курсовая работа [399,9 K], добавлен 28.02.2013Основные элементы системы массового обслуживания, ее модель, принципы и задачи работы. Выбор входных распределений. Построение генераторов случайных чисел. Логика работы программы, планирование эксперимента. Результаты моделирования и рекомендации.
курсовая работа [2,5 M], добавлен 05.11.2009Выбор и оценка входных распределений. Построение генераторов случайных чисел. Анализ полученных результатов. Логика работы и особенности разработки программы. Составление блок-схем, пользовательского интерфейса. Стратегия и тактика планирования.
курсовая работа [1,5 M], добавлен 24.06.2013Основные подходы при создании Windows приложений. Изучение навыков работы с 2D графикой в Windows приложениях. Методы генерации псевдослучайных чисел. Разработка игры "Сапер" с расположением мин на основе нескольких методов генерации случайных чисел.
курсовая работа [63,2 K], добавлен 18.02.2009Моделирование работы генератора случайных двоичных чисел с ограниченной последовательностью 0 и 1, подчиняющегося равномерному закону распределения, заданному с помощью модели Гильберта. Представление программного решения задачи средствами языка С++.
лабораторная работа [857,7 K], добавлен 05.06.2011Исследование разрешающей способности сканирующего туннельного микроскопа при сканировании исследуемой поверхности острием иглы конусообразной формы. Листинг программы и построение СТМ-профилограмм нанообъектов. Тестирование генератора случайных чисел.
курсовая работа [634,0 K], добавлен 12.01.2014Программы линейной структуры. Составление программы, которая по заданному номеру и значению соответствующего элемента вычисляет значение всех остальных элементов треугольника. Формулирование одномерного массива с помощью генератора случайных чисел.
отчет по практике [1,2 M], добавлен 01.12.2012Программа для формирования и просмотра команды для олимпиады по программированию. Генератор случайных чисел в Borland C++, методы их получения. Линейный конгруэнтный метод. Метод Фибоначчи, вихря Мерсенна. Тестирование псевдослучайных последовательностей.
курсовая работа [93,5 K], добавлен 27.09.2014Программирование микро ЭВМ на МП БИС КР580ИК80. Арифметические команды. Представление чисел в различных системах счисления и отображение их на дисплее. Сложение массива однобайтных чисел. Вычитание одинаковых чисел. Сложение двух десятичных чисел.
лабораторная работа [263,8 K], добавлен 03.03.2009Преобразование чисел из естественной формы в нормализованную. Алгоритм нормализации числа. Способы кодирования чисел и действия над ними. Особенности прямого, дополнительного, смещенного и обратного кода. Понятие вещественных чисел, их представление.
презентация [42,6 K], добавлен 14.06.2011Фильтр Калмана как эффективный рекурсивный метод, оценивающий вектор состояния динамической системы, используя ряд неполных и зашумленных измерений. Сравнительная характеристика алгоритмов компьютерного моделирования случайных последовательностей.
дипломная работа [1,9 M], добавлен 17.06.2017