Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции заочникам формат.doc
Скачиваний:
25
Добавлен:
30.04.2015
Размер:
568.83 Кб
Скачать

4.2. Линейные конгруентные генераторы

Сегодня очень часто применяются линейные конгруентные генераторы, созданные Лемером. В них последовательность целых чисел Z1,Z2,… определяется по формуле

Zi=(aZi-1+c)(mod m)

Где m– модуль (деление по модулю означает взятие остатка от деления наm),a– множитель,с– приращение иZ0 – начальное значение являются неотрицательными целыми числами.

Очевидно, что остаток от деления всегда меньше делителя, поэтому . Чтобы получить случайные числа в интервале [0,1), примемUi=Zi/m.

Если с=0, то линейный конгруентный генератор называется мультипликативным, а приc>0 –смешанным. Мультипликативные генераторы появились раньше и использовались более интенсивно. Большинство генераторов, которые применяются сегодня, являются мультипликативными. У них не может быть полного периода, однако они более изучены и факт улучшения эффективности в связи с введением смешанных генераторов пока не доказан.

Пусть n– число битов в слове компьютера, которые действительно доступны для хранения данных. Например, если в компьютере используются 32 - битные слова, а крайний левый бит является знаковым тоn=31. Модуль стараются выбрать равнымm=2n=231. В этом случае избегают явного деление наm, которое заменяется обработкой ситуации переполнения разрядной сетки.

В качестве параметра aобычно выбирают числа вида 8k+3 или 8k+5. В этом случае для мультипликативного генератора можно получить период 2n-2, причем операция умножения заменяется сдвигом и сложением (умножение на степень двойки – это, по сути, сдвиг числа в разрядной сетке).

Например, в одном из предлагаемых в литературе генераторов a=1073741821, с=0,m=231,Z0=65539. Используются 32-разрядные числа, причем первый разряд интерпретируется как знаковый. Полный период такого генератора равен 231-2.

Потоки случайных чисел (независимые последовательности) в линейном конгруентном генераторе задаются посредством определения начального числа каждого потока. Например, если нам нужны потоки в 100000 чисел каждый, то зададим для первого потока Z0=произвольное значение, для второго потока возьмем начальное значениеZ100000, а для третьего – начальное значениеZ200000и т.д. Т.е., в качестве потоков выступают непересекающиеся смежные последовательности случайных чисел.

В системе GPSSWorldиспользуется мультипликативный конгруентный генератор с периодом 231-2. Он выдает равномерно распределенные числа в интервале [1, 2 147 483 647], которые затем нормируются и преобразуются в числа из интервала 0 – 0,999999 включительно либо в числа от 0 до 999, в зависимости от контекста использования.

Можно использовать любое количество генераторов без специального их объявления, обращаясь к стандартному числовому атрибуту (системной переменной) RNj. Т.е.,RNj– это значение генератора случайных чисел, равномерно распределенных на интервале [0,1). Номер генератораjявляется одновременно и его начальным значением (Z0). Таким образом, каждый генератор задает отдельный поток случайных чисел. Изменить начальное значение генератора в процессе его работы можно только для первых 7 генераторов (с номерами 1 ÷ 7) с помощью оператора

RMULT A,B,C,D,E,F,G

Где A,B, …,G- начальные значения генераторов 1, 2, …, 7 соответственно.

Например,RMULT,,111

Генератор номер 3 получает начальное значение 111. (остальные значения не изменяются).