Линейный конгруэнтный метод




Содержание

Эмпирические критерии проверки случайных последовательностей. Критерий частот, серий, интервалов, разбиений, перестановок, монотонности, конфликтов

Линейный конгруэнтный метод

Основные критерии проверки случайных наблюдений

Эмпирические критерии

Критерий серий

Покер-критерий (критерий разбиений)

Критерий перестановок

Критерий монотонности

Критерий конфликтов


Эмпирические критерии проверки случайных последовательностей. Критерий частот, серий, интервалов, разбиений, перестановок, монотонности, конфликтов

 

Числа, которые выбираются случайным образом, находят множество полезных применений: моделирование.

Это позволяет сделать модели похожими на реальные явления; выборочный метод. Часто невозможно исследовать все варианты, но случайная выборка обеспечивает понимание того, что можно назвать "типичным поведением"; численный анализ.

Для решения сложных задач численного анализа была разработана техника, использующая случайные числа; компьютерное программирование. Случайные числа являются хорошим источником данных для тестирования эффективности компьютерных алгоритмов; принятие решений; эстетика; развлечения.

Равномерным распределением на конечном множестве чисел называется такое распределение, при котором любое из возможных чисел имеет одинаковую вероятность появления. Если не задано определенное распределение на конечном множестве чисел, то принято считать его равномерным [3]. Джон фон Нейман первым предложил в 1946 г. идею возвести в квадрат случайное число и выделить из него средние цифры. Например, необходимо получить новое десятизначное число по числу 5772156649. Возводим имеющееся число в квадрат и выделяем средние 10 цифр:

 

.

 

Новым сгенерированным числом будет число 7923805949. Эта последовательность не случайна, она кажется такой. Последовательности, генерируемые детерминистическим путем, таким как этот, называются псевдослучайными или квазислучайными.

Метод середины квадратов фактически является сравнительно бедным источником случайных чисел. Опасность состоит в коротком цикле (периоде) повторяющихся элементов. Рассмотрим методы генерирования последовательности случайных дробей [3], т.е. случайных действительных чисел Un, равномерно распределенных между нулем и единицей. Будем генерировать целое число Хn между нулем и некоторым числом U, тогда дробь при m >= U

 

Un = Хn / m

будет принадлежать [0,1]. Обычно m выбирают равным размеру компьютерного слова. Обозначим m = be, где b - основание системы счисления, используемой ЭВМ, а e - число разрядов машины. Поэтому Хn можно по традиции рассматривать как целое число, занимающее все компьютерное слово с точкой в правом конце слова, а Un - как содержимое того же слова с точкой в левом конце слова.

Линейный конгруэнтный метод

 

Выберем четыре числа [3]:

m - модуль, m > 0;

a - множитель, 0 £ a < m;

c - приращение, 0 £ с < m;

Х0 - начальное значение, 0 £ Х0 < m.

Последовательность случайных чисел n} можно получить, полагая

Хn+1 = (a Хn + c) mod m, n ³ 0, (4.1)

 

где mod - операция взятия остатка от деления. Последовательность (4.1) называется линейной конгруэнтной последовательностью. Например, для m = 10 и Х0 = a = c = 7 получим последовательность 7, 6, 9, 0, 7, 6, 9, 0, 7…

В примере отражен факт, что конгруэнтная последовательность всегда образует петли, т.е. обязательно существует цикл, повторяющийся бесконечное число раз. Это свойство является общим для всех последовательностей вида Xn+1 = f (Xn), где f - функция, преобразующая конечное множество само в себя. Повторяющиеся циклы называют периодами. Задача генерации случайных последовательностей состоит в использовании относительно длинного периода, что связано с выбором довольно большого m, так как период не может иметь больше m элементов. Другой фактор - скорость генерирования. При выборе множителя а следует принимать во внимание выводы следующей теоремы.

Пример. Для m = 120 назначить а и построить последовательность случайных чисел в интервале [0,1].

Решение. Выберем с = 7, a = 5, тогда при x0 = 1 получим следующие числа: X1= 12, X2 = 67, X3= 102, … Далее генерируем u0 = 1/120, u1 = 12/120, u2 = 67/120, u3 = 102/120, …

В связи с довольно простым получением случайных чисел возникает такая общепринятая ошибочная идея - достаточно взять хороший генератор случайных чисел и немного его модифицировать для того, чтобы получить "еще более случайную" последовательность. Часто это не так. Например, известно, что формула (4.1) позволяет получить более или менее хорошие случайные числа. Может ли последовательность, полученная из

Xn+1= ((a Xn) mod (m + 1) + c) mod m

 

быть еще более случайной? Ответ: новая последовательность является менее случайной с большей долей вероятности, т.е. мы попадаем в область генераторов типа Xn+1= f (Xn) с выбранной произвольно функцией f. Доказано, что такие последовательности, ведут себя хуже, чем последовательности, полученные при использовании более регулярных функций (4.1).

Отметим, что период линейной конгруэнтной последовательности довольно длинный; когда m приблизительно равно длине слова компьютера, обычно получаются периоды порядка 109 или больше, а в типичных вычислениях используется лишь малая часть всей последовательности.

Рассмотрим аддитивный генератор, предложенный Дж.Ж. Митчелом и Д.Ф. Муром:

Xn= (Xn-24 + Xn-55) mod m, n ³ 55, (4.2)

 

где m - четное число, числа 24 и 55 - специальные числа, выбранные для того, чтобы определить такую последовательность, младшие значащие двоичные разряды (Xnmod 2) которой имеют длину периода 255 - 1.

Алгоритм В. (Аддитивный генератор чисел). В ячейки памяти Y [1], Y [2], …, Y [55] записано множество значений X54, X53, …, X0 соответственно; в начале полагают j = 24, k = 55.

При реализации этого алгоритма на выходе последовательно получаем числа X55, X56, …

В1. [Суммирование] (Если на выходе мы оказываемся в точке Xn, то

Y [j] = Xn-24, а Y [k] = Xn-55.

Y [k] (Y [k] + Y [j]) mod 2e.

 

В2. [Продвижение] Уменьшим j и k на 1. Если j = 0, то присвоим j 24, иначе, если k = 0, присвоить k 55.

Числа 24 и 55 в выражении (4.2) называются запаздыванием, а числа Xn, определенные в (4.2) - последовательностью Фибоначчи с запаздыванием.

Возможно построить достаточно хороший генератор случайных чисел, используя всевозможные линейные комбинации Xn-1, …, Xn-k для малых k. В этом случае наилучший результат получается, когда модуль m является большим простым числом; например, m - наибольшее простое число, которое можно записать одним компьютерным словом.

Формула для генерации может быть выбрана такой:

Xn= (a1 Xn-1 + … + ak Xn-k) mod p (4.3)

 

с периодом pk - 1. Здесь X0, X1, …, Xk-1 могут быть выбраны произвольно, но не равные нулю одновременно.

Обратимся к процессу генерирования случайных чисел "0" и "1" по формуле (4.3). Зададим произвольно ненулевое двоичное слово (1 0 1 1), то есть X1 = 1, X 2 = 0, X3 = 1, X4 = 1; k = 4; p = 2. Зададим произвольно коэффициенты а1, а2, а3, а4 двоичным словом (0 0 1 1), то есть а1 = 0, а2 = 0, а3 = 1, а4 = 1. Перепишем (4.3) с учетом введенных величин, получим:

Xn= (a1 ×Xn-1 + a2 ×Xn-2 + a3 ×Xn-3 + a4 × Xn-4) mod 2

Xn= (0 ×Xn-1 + 0 ×Xn-2 + 1 ×Xn-3 + 1 × Xn-4) mod 2

Xn = (Xn-3 + Xn-4) mod 2.

Откуда следует, что

X5= (X2 + X1) mod 2 = 1.6= (X3 + X2) mod 2 = 1; X7= (X4 + X3) mod 2 = 0;8= (X5 + X4) mod 2 = 0; X9= (X6 + X5) mod 2 = 0;10= (X7 + X6) mod 2 = 1; X11= (X8 + X7) mod 2 = 0;12= (X9 + X8) mod 2 = 0; … и т.д.

 

Сгенерированные числа (коды) имеют значения:

(начальное число); 1100; 0100; 1101; 0111; 1000; 1001 …

Период, т.е. число шагов, через которое начинается повтор, равняется 24 - 1 = 15.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-03-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: