Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методы Монте-Карло для параллельных вычислений. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Глава 2. Генераторы псевдослучайных чисел
2.1. О генераторах псевдослучайных чисел
Решение задач методом Монте-Карло существенным образом по­лагается на умение строить последовательности случайных чисел. По­лучить настоящую случайную последовательность возможно, если на­блюдать какую-нибудь реальную физическую систему известного рода. Например, можно регистрировать моменты попадания радиоактивных частиц в счетчик. В процессе работы компьютера также существует множество событий, связанных, например, с нажатиями клавиш на кла­виатуре или движениями мыши. Некоторые операционные системы со­бирают такого рода информацию и организуют выдачу последователь­ности случайных байт. Современные физические датчики случайных чисел используют разнообразные источники случайности в микро- и макромире, такие как дробовой шум, термальный шум, фотоэлектри­ческий шум, атмосферный радиошум. Например, нерегулярности кван­товых явлений возможно измерять, усиливать и затем переводить из аналоговой в дискретную (оцифрованную) форму с помощью микро­схем и включать такие физические датчики случайных чисел в виде отдельных подключаемых устройств или цепей микропроцессора. Та­кого рода случайные числовые последовательности могут быть исполь­зованы, например, для нужд криптографии. Недостатком является их потенциальная невоспроизводимость, что плохо для отладки и тестиро­вания программ.
Для применений важно иметь последовательность независимых
равномерно распределенных в интервале (0, 1) случайных величин U0,
U1, . . . , Un, . . . . Независимость и равномерное распределение озна-
чают следующее: для целого n > 0 и произвольных подынтервалов ∆0, ∆1, . . . интервала (0, 1) имеет место равенство
P({U0∈ ∆0, U1∈ ∆1, . . . , Un∈ ∆n}) = |∆0| · |∆1|··· |∆n|.
В вычислительной практике пользуются специальными неслучайными последовательностями. Такие детерминированные последовательности {Xn; n = 0, 1, . . .} обладают следующим интуитивно понятным свой- ством: знание некоторого начального отрезка X0, X1, . . . , Xnпоследо­вательности не дает очевидного предсказания следующих членов X
X
, . . . последовательности. Как правило, эти последовательности
n+2
n+1
образуются по некоторым функциональным закономерностям (вычис-
21
,
лительным алгоритмам) вида
X
= f(Xn), n = 0, 1, . . .
n+1
или
X
= f(X
n+k
где числа X0или X0, X1, . . . , X
n+k−1
, X
, . . . , Xn), n = 0, 1, . . . ,
n+k−2
заданы.
k−1
Рассмотрим один пример получения «нерегулярной» числовой последовательности [8]. Пусть α — некоторое число из интервала (0, 1), и образуем последовательность по формуле:
Xn= {nα}.
Здесь {·} — дробная часть стоящего в скобках числа. Г. Вейлем бы­ла доказана замечательная теорема о том, что для иррационального α так определенная последовательность чисел равномерно распределена на (0, 1). Под равномерной распределенностью понимается следующее: для любых величин y1и y2, 0 6 y1< y26 1,
1
lim
n→∞
× N({i: y16 Xi6 y2; i = 1, 2, . . . , n})= y2− y1,
n
где N(·) обозначает мощность конечного множества, указанного в скоб­ках. Например, при α =√2 первые 20 чисел последовательности будут (читать по строкам):
0,41421356 0,82842712 0,24264069 0,65685425 0,07106781 0,48528137 0,89949494 0,31370850 0,72792206 0,14213562 0,55634919 0,97056275 0,38477631 0,79898987 0,21320344 0,62741700 0,04163056 0,45584412 0,87005769 0,28427125
На рис. 2.1 представлено частотное распределение первых 100 чисел при α =√2. Видно хорошее согласие с равномерным распределением. Строгая количественная мера согласия генерируемой числовой последо­вательности с выбранным законом распределения приводится во многих работах по датчикам случайных чисел, например, в монографии [22].
Кроме одномерных распределений следует изучить совместные распределения стоящих рядом членов последовательности. Если сосед­ние члены последовательности «независимы», то точки с координатами
(X
, Xn), n = 0, 1, . . . должны быть равномерно рассеяны внут-
n+1
ри единичного квадрата. Однако рис. 2.2 показывает, что существует
22
Гистограмма относительных частот
частота
0
0,02
0,04
0,06
0,08
0,1
0,12
x
0 0,2 0,4 0,6 0,8 1
Рис. 2.1. Гистограмма чисел X0, X1, . . . , X99при α =√2
стремление точек выстраиваться вдоль двух отрезков. Мы видим, что о статистической независимости соседних членов последовательности говорить невозможно. Таким образом, статистический анализ рассмат­риваемой последовательности {Xn; n = 0, 1, . . .} отвергает ее как кандидата в псевдослучайные последовательности.
Наряду со статистическим обследованием предлагаемого функ­ционального преобразования полезно провести и теоретический анализ. Он выявит, что генератор, основанный на этом принципе, обладает дву­мя существенными недостатками. Во-первых, соседние члены последо­вательности не являются статистически независимыми. Заметим, что
(
X
n+1
α + X
=
n
Xn+ α − 1 при Xn> 1 − α.
при Xn6 1 − α,
Таким образом, величины Xnи X
функционально зависимы. На
n+1
рис. 2.2 точки располагаются на прямых
Рассмотрим случайные величины Y и Z, удовлетворяющие функцио­нальному соотношению
y = x + (√2 −1), y = x +√2.
(
α + Y при Y 6 1 −α,
Z =
α − 1 + Y при Y > 1 −α,
23
0.0 0.2 0.4 0.6 0.8 1.0
0.0 0.2 0.4 0.6 0.8 1.0
X[n+1]
X[n]
Рис. 2.2. Совместное выборочное распределение точек {(X = 0, 1, . . . , 49}
, Xn); n =
n+1
и предположим, что Y равномерно распределен в интервале (0, 1). То­гда Z также имеет равномерное распределение в интервале (0, 1). Мож­но считать, что пара (Xn, X
) является выборочной реализацией для
n+1
(Y , Z). Вычислим ковариацию между Y и Z:
cov(Y , Z ) = MY −
Ковариация не обращается в нуль, если α не есть недостаток в том, что при вычислении на компьютере вещественные числа представляются неточно и в определенный момент последова­тельность может выродиться. Действительно, для больших значений n представления с плавающей точкой для nα и (n + 1)α не различаются, либо различаются несколькими младшими битами. Тогда члены после-

1
Z −
2
1
Z
+
y(y + α − 1) dy −
1−α
24
1−α
Z
1
=
2
y(y + α)dy+
0
1 4
1
±
12
−
1
2√3
1
α(1 −α).
2
. Второй же
=
1 2
довательности будут принимать только значения вида 0, 0,5, 0,25, и т. д.
Отметим, что в настоящее время уже предложено большое число критериев оценки качества генераторов случайных чисел [12, 22, 41]. Выяснение положительных и отрицательных свойств конкретных гене­раторов — актуальная тема для новых исследований. Поэтому в после­дующих разделах мы уделяем внимание в основном реализации алго­ритмов при параллельных вычислениях.
2.2. Линейный конгруэнтный генератор
В линейном конгруэнтном генераторе последовательность псев­дослучайных чисел образуется по закону
X
= aXn+ c mod m, (2.1)
n+1
где модуль m, множитель a, приращение c и начальное значение X0— целые числа, удовлетворяющие условиям 0 6 a < m, 0 6 c < m, 0 6 6 X0< m. Задавая различные начальные значения X0, мы будем полу- чать различные последовательности. Выбор модуля m чаще всего опре­деляется разрядностью целых чисел.
Частным случаем линейного конгруэнтного генератора является мультипликативный конгруэнтный генератор, определяемый соотно­шением (2.1) при c = 0.
При a = 1 генерируемая соотношением (2.1) последовательность имеет вид Xn= (X0+ cn) mod m и, очевидно, плохо подходит на роль «псевдослучайной».
Поскольку величина Xn, определяемая по формуле (2.1), может принимать только конечное число значений, а значение Xnзависит только от значения X
, последовательность {Xn; n = 0, 1, . . .} с
n−1
необходимостью периодическая — с периодом, не превосходящим m. Длина периода может зависеть как от параметров a, c, n, так и от начального значения X0. Действительно, мультипликативный конгру­энтный генератор (при c = 0) с начальным значением X0= 0 имеет период 1 независимо от выбора a и m. Максимальная длина перио­да для мультипликативного конгруэнтного генератора не превосходит m −1. Поэтому выбор параметров следует производить таким образом, чтобы период был наибольший из возможных. Следующая теорема со­держит критерий максимальной длины периода для линейного адди­тивного конгруэнтного генератора.
25
Теорема 2.1 ([22]). Линейная конгруэнтная последователь-
ность (2.1), определенная числами m, a, c и X0, имеет период длиной m тогда и только тогда, когда
1) числа c и m взаимно простые;
2) b = a −1 кратно p для каждого простого p, являющегося делите-
лем m;
3) b кратно 4, если m кратно 4.
Для формулировки аналогичного результата применительно к мультипликативному конгруэнтному генератору необходимо ввести сле­дующее определение. Пусть a и m — взаимно простые числа. Наимень­шее число λ, для которого aλ≡ 1(mod m), называется порядком a по модулю m и обозначается λ(m).
Теорема 2.2 ([22]). Максимальным периодом при c = 0 является λ(m). Этот период достигается, если
1) X0и m — взаимно простые числа;
2) a является первообразным элементом по модулю m.
Пусть теперь число d, 1 < d < m, есть делитель числа m. Тогда величины Yn= Xnmod d удовлетворяют соотношению
Y
= aYn+ c mod d.
n+1
В частности, если m = 2kи d = 2l, l < k, то Ynпредставляет собой l младших битов числа Xnв k-разрядной двоичной арифметике. Тогда период последовательности {Yn; n = 0, 1, . . .} не превосходит d, что гораздо меньше максимально возможного периода исходной последова­тельности {Xn; n = 0, 1, . . .}. В этом случае говорят, что младшие биты «менее случайны». Поэтому линейные конгруэнтные генераторы не очень хорошо подходят для получения длинных «непредсказуемых» последовательностей чисел из множества {0, 1, . . . , d − 1}.
В последние двадцать лет появился и обрел популярность обрат-
ный конгруэнтный генератор
X
= aXn+ c mod p, n > 0
n+1
с простым модулем p; черта над Xnозначает операцию взятия обратно­го по модулю p, Xn·Xn≡ 1(mod p). Полагают Xn∈ {0, 1, . . . , p−1, ∞},
26
0 = ∞, ∞ = 0. Известно, что обратная конгруэнтная последователь­ность не имеет решетчатой структуры, в отличие от линейной конгру­энтной последовательности.
2.3. Векторный линейный конгруэнтный генератор
Пусть имеется векторный компьютер с длиной вектора k. Из со-
отношения (2.1) для произвольного l = 1, 2, . . . имеем
X
n+l
= alXn+ (a
l−1
+ a
l−2
+ .. . + 1)c mod m. (2.2)
Основываясь на соотношении (2.2), можно предложить два алгоритма для получения линейной конгруэнтной последовательности на вектор­ном компьютере. Читатель, желающий ознакомиться с организацией векторных вычислений в современных компьютерах, может обратиться к приложению (c. 168).
В программе 2.1 представлена реализация Алгоритма I, исполь­зующая 128-битные регистры расширенного набора команд SSE. Здесь a = 16807, c = 0, m = 231, k = 4.
Алгоритм I
Первый векторный линейный конгруэнтный генератор с единым
набором параметров
Для заданных X0, X1, . . . , X
   
X
X
n
X
n+1
.
.
.
n+k−1
   
= a
X
n−k
X
n−k+1
k
.
.
.
X
n−1
   
+
положим
k−1
ak− 1
c mod m, n = k, 2k, . . .
a − 1
В строке 3 создается имя для типа — вектора из четырех 32­битных целых чисел со знаком. Для удобства обращения к каждому из четырех чисел объявляется union i4vec в строках 5–8. Сам линейный мультипликативный конгруэнтный генератор реализован в виде класса lcr. Конструктор принимает в качестве аргумента значение X0и по- следовательно вычисляет a mod m, a2mod m, a3mod m, a4mod m.
27
При компиляции арифметических и логических операций в строках 29 и 37 будут подставлены соответствующие низкоуровневые векторные процессорные инструкции.
Алгоритм II
Второй векторный линейный конгруэнтный генератор с единым
набором параметров
Для заданного X0определим
   
X
1 # defin e a0 1 6 8 07
2 3 t ypede f in t v4 s i __at t r i but e _ _ (( v ect o r _ siz e ( 1 6 )));
4 5 u n i on i 4 v e c { 6 v4si v ; 7 in t i[4]; 8 };
9
10 c l a ss l c r { 11 union i 4vec s eed , a ; 12 in t lo c ; 13 p u blic : 14 lc r ( in t _seed ); 15 in t ne x t ( ) ; 16 };
17 18 l c r :: lcr ( int _ s e e d ) 19 :loc (0 ) 20 { 21 const v 4 s i m = {0 x7fffff f f ,0 x7ffff f f f , 22 0 x 7 f f f f f ff , 0 x 7 ffff f f f } ;
X
n
X
n+1
.
.
.
n+k−1
   
= X
a
2
+
(a + 1)c
  
ak−1
a
.
n
.
.
k
a
a−1
c
 
.
.
.
mod m, n = k, 2k, . . .
 
c
Программа 2.1. Линейный конгруэнтный генератор
28
23 seed . i [ 0 ] = ( a0 * _se e d & 0 x 7 f f ffff f ); 24 a. i [ 0 ] = a 0 ; 25 fo r ( in t j=1; j < 4 ; j ++) { 26 a.i [ 0 ] = (( a .i [ 0]* a 0 ) & 0 x 7 f ffff f f ) ; 27 seed . i[ j ]=( a 0 * s e e d . i [j - 1 ] & 0 x 7 f ffff f f ) ; 28 }; 29 a. i [ 1 ] = a . i [ 2 ] = a . i [ 3 ] = a. i [0]; 30 seed . v =( a .v * seed . v) & m; 31 };
32 33 i n line i n t lc r :: next () { 34 const u nion i 4 v ec m = {0 x 7fffffff ,0 x 7fffffff , 35 0 x 7 f f f f f ff , 0 x 7 ffff f f f } ; 36 if (++ loc == 4 ) { 37 se e d .v = ( a. v * s e e d . v ) & m . v; 38 loc = 0; 39 }; 40 retur n se e d . i [ loc ]; 41 };
Возможность производить векторные операции приводит к сле­дующей модификации линейного конгруэнтного генератора.
Алгоритм III
Второй векторный линейный конгруэнтный генератор с несколькими
наборами параметров
Пусть a1, a2, . . . , akи c1, c2, . . . , ck— наборы различных множи­телей и приращений; для заданных X0, X1, . . . X
   
X
X
n
X
n+1
.
.
.
n+k−1
   
a
a
=
 
a
1
   
X
2
.
.
.
k
X
n−k
n−k+1
.
.
.
X
n−1
   
c
1
c
2
  
mod m, n = k, 2k, . . . ,
.
.
.
c
m
+
определим
k−1
где обозначает поэлементное умножение двух векторов.
2.4. Обобщенный генератор Фибоначчи с запаздыванием
Обобщенный генератор Фибоначчи с запаздыванием задается со-
отношением
Xn= X
n−i
◦ X
mod m, n > max{i, j}, (2.3)
n−j
где ◦ означает некоторую бинарную арифметическую или логическую операцию (например, сложение +, вычитание −, умножение ·, исклю­чающее «или» ⊕). Параметры i, j называются запаздываниями. При
i = 1, j = 2 и ◦ в значении + получается собственно генератор Фибо- наччи. При ◦ в значении + имеем генератор Фибоначчи с запаздывани­ем. Достоинствами обобщенных генераторов Фибоначчи с запаздыва-
нием является отсутствие умножений и возможность перейти к работе с вещественными числами. По сравнению со сложением целых чисел умножение целых чисел выполняется на современных компьютерах су­щественно медленнее. Пусть теперь операция ◦ означает сложение или вычитание. Положим Un= Xn/m. Тогда, разделив обе части равенства (2.3) на m, получим:
Un= {U
n−i
± U
}, n > max{i, j}, (2.4)
n−j
где {·} означает дробную долю указанного в скобках числа. Посколь­ку теперь значение Xnзависит от двух более ранних значений, пе­риод получающейся последовательности может оказаться больше m, но не больше m2− 1. Например, если начальными значениями Xn, n < max{i, j}, выбраны нули, то получается последовательность из нулей и период оказывается равен единице.
Рассмотрим несколько подробней генератор вида (см. [47])
Xn= X
n−i
+ X
mod 2e, i < j. (2.5)
n−j
Пусть e = 1. Тогда значениями Xnбудут только 0 и 1, один двоичный разряд. Для поддержания работы генератора в этом случае надо знать ровно j последних значений последовательности. Это «внутреннее со­стояние» генератора занимает j бит и может принимать 2jразличных значений. Одно из них, соответствующее ровно j нулям, дает триви­альную нулевую последовательность. Оказывается, что при j > 2 все остальные 2j−1 значений циклически переходят одно в другое. Таким образом, при e = 1 период равен 2j− 1.
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]