Оценка качества работы генератора случайных чисел

Анализ генераторов случайных чисел в системах программирования на языках 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.