
- •Генераторы случайных чисел Случайные числа
- •История создания генератора случайных чисел
- •Классификация генераторов случайных чисел
- •Физические датчики случайных воздействий
- •Программный способ получения псевдослучайной последовательности
- •Алгоритмы получения псевдослучайных чисел Метод серединных квадратов
- •Метод серединных произведений
- •Метод перемешивания
- •Линейный конгруэнтный метод
- •М ультипликативный метод
- •Cмешанный метод
- •Статистические тесты генераторов случайных и псевдослучайных чисел Применение
- •Пакет статистических тестов nist
- •Частотный блочный тест
- •Тест на последовательность одинаковых битов
- •Тест на самую длинную последовательность единиц в блоке
- •Тест рангов бинарных матриц
- •Спектральный тест
- •Тест на совпадение неперекрывающихся шаблонов
- •Тест на совпадение перекрывающихся шаблонов
- •Универсальный статистический тест Маурера
- •Тест на линейную сложность
- •Тест кумулятивных сумм
- •Тест на произвольные отклонения
- •Другой тест на произвольные отклонения
Программный способ получения псевдослучайной последовательности
Наибольшее применение
в практике моделирования на ЭВМ для
генерации последовательностей
псевдослучайных чисел получили алгоритмы
вида:
представляющие собой рекуррентные
соотношения первого порядка, для которых
начальное число x0
и постоянные параметры заданы.
Хороший арифметический генератор случайных чисел должен обладать следующими свойствами.
1. Получаемые числа должны быть равномерно распределены в интервале [0,1] и не должны иметь корреляции друг с другом, в противном случае результаты моделирования могут оказаться полностью недействительными.
2. Чтобы генератор можно было использовать на практике, он должен обладать быстродействием и не требовать больших затрат памяти.
3. Генератор должен обеспечивать возможность точно воспроизводить заданный поток случайных чисел.
4. В генераторе должен быть предусмотрен простой способ получения отдельных потоков случайных чисел. Поток — это просто часть последовательности случайных чисел, производимых генератором, очередной поток начинается в том месте, где заканчивается предыдущий.
Алгоритмы получения псевдослучайных чисел Метод серединных квадратов
Одной из исторически первых процедур получения псевдослучайных чисел была процедура, получившая название серединных квадратов, был предложен фон Нейманом и Метрополисом в 1940-х годах.
Алгоритм получения последовательности случайных чисел методом серединных квадратов сводится к следующему:
П
усть
имеется 2n -
разрядное число, меньше 1:
в
озведем
его в квадрат:
а
затем возьмем средние 2n
разрядов:
которые и будут очередным числом.
Недостатком этого метода является наличие корреляции между числами последовательности, а в ряде случаев случайность вообще может отсутствовать.
Метод срединных квадратов вовсе не является случайным, то есть непредсказуемым (это наиболее существенный его недостаток). На самом деле, если мы знаем одно число, следующее число является полностью предопределенным, поскольку правило его получения неизменно. Фактически, когда задается x0, предопределяется вся последовательность чисел xi. Это замечание касается всех арифметических генераторов.
Метод серединных произведений
Число R0 умножается на R1, из полученного результата R2 извлекается середина R2* (это очередное случайное число) и умножается на R1. По этой схеме вычисляются все последующие случайные числа.
Метод перемешивания
Идея метода состоит в следующем. Пусть в ячейке хранится начальное число R0. Циклически сдвигая содержимое ячейки влево на 1/4 длины ячейки, получаем новое число R0*. Точно так же, циклически сдвигая содержимое ячейки R0 вправо на 1/4 длины ячейки, получаем второе число R0**. Сумма чисел R0* и R0** дает новое случайное число R1. Далее R1 заносится в R0, и вся последовательность операций повторяется.
Линейный конгруэнтный метод
Самый сложнопроизносимый и самый простой для понимания, и, одновременно, самый быстрый. Случайное число вычисляется по формуле:
ri + 1 = mod(k · ri + b, M).
M — модуль (0 < M);
k — множитель (0 ≤ k < M);
b — приращение (0 ≤ b < M);
r0 — начальное значение (0 ≤ r0 < M).
Вся хитрость в правильном подборе параметров M, k b r0
Например, генератор случайных чисел формируемых на основе чисел:
M = 231 – 1 k = 1 220 703 125 b = 7 r0 = 7
будет выдавать случайные неповторяющиеся числа с периодом, равным 7 миллионам.