Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Методы Монте-Карло для параллельных вычислений. Учебное пособие
.pdf
5 n /= 2;
6 if (0 == n ) b reak ;
7 a = a * a % m;
8 if (0 != n % 2) ans = a * ans % m ;
9 };
10 retur n an s ;
11 };
В общем случае, с математической точки зрения, каждый из L
вычислительных процессов работает с псевдослучайной последовательностью, имеющей в качестве параметра начало последовательности.
Метод подпоследовательностей. Этот метод применим в тех же
предположениях, что и метод непересекающихся отрезков: требуется
снабдить каждый из L вычислительных процессов набором из N псевдослучайных чисел, и имеется генератор с периодом d > L · N . Однако
по сравнению с методом непересекающихся отрезков, данный метод возможно использовать и когда заранее неизвестно требуемое количество
N псевдослучайных чисел для каждого из вычислительных процессов.
Тогда каждому вычислительному процессу выделяется ровно одна из
подпоследовательностей
{U1, U
L+1
, U
, . . .}; {U2, U
2L+1
L+2
, U
, . . .}; . . .
2L+2
. . . ; {UL, U2L, U3L, . . .}.
Например, для линейного конгруэнтного генератора можно воспользоваться формулой (2.2).
Идея выделения подпоследовательностей легко модифицируется
под запросы конкретной задачи. Предположим, что для получения одного значения случайной величины X используются два псевдослучайных числа. Последовательная программа будет работать с парами чисел
(U1, U2), (U3, U4), . . . .
Чтобы параллельные вычислительные процессы работали с точными
подпоследовательностями исходной последовательности, следует воспользоваться следующим разбиением:
{U1, U2, U
2L+1
, U
2L+2
. . . ; {U
, . . .}; {U3, U4, U
2L−1
, U2L, U
, U4L, . . .}.
4L−1
2L+3
, U
, . . .}; . . .
2L+4
41

В любом случае при использовании данного метода надо проверять, что подпоследовательности в результате снова удовлетворяют
таким требованиям, как равномерность распределения, некоррелированность, и т. д.
Параметризация итерационной процедуры. Многие генераторы
псевдослучайных чисел содержат набор параметров. Исходя из этого,
возможно каждому вычислительному процессу присвоить свои значения параметров. Таким образом, разные вычислительные процессы будут работать с принципиально различными псевдослучайными последовательностями, а не с различными частями одной и той же последовательности. Преимуществом такого подхода является то, что не происходит уменьшения периода порождаемой последовательности в L раз.
Рассмотрим несколько примеров параметризации распространенных генераторов. Начнем с линейного конгруэнтного генератора. Параметризация приводит к системе рекуррентных соотношений
X
n+1, j
= ajX
+ cjmod m, n = 0, 1, . . . ; l = 1, 2, . . . , L.
n, j
Здесь дополнительный индекс j относится к j-му потоку псевдослучайных чисел. Известны следующие рекомендации. 1) При модуле m = 2
исследователями были изучены генераторы с aj≡ a, и попарно вза-
имно простыми аддитивными константами cj. В частности, рекомендуется выбирать в качестве констант последовательные простые числа,
не превосходящиеpm/2. При такой параметризации статистическая
корреляция между разными потоками оказывается допустимо малой.
2) Модуль m является простым числом, возможно, близким к числу вида 2p. В этом случае предлагается использовать в качестве параметра
`
сомножитель aj. В частности, полагают aj= a
j
, где `j— j-е целое
число, взаимно простое с m − 1.
В качестве второго примера рассмотрим явный обратный конгру-
энтный генератор (explicit inverse congruent generator, EICG)
Xn= an + b mod m, n = 1, 2, . . . . (2.7)
Этот генератор дает явную формулу для вычисления всех членов последовательности вместо привычных уже нам рекуррентных формул.
К нему, очевидно, применимы все приведенные ранее методы. Рассмотрим следующую параметризацию генератора (2.7):
X
= ajn + cjmod m, n = 1, 2, . . . ; j = 1, 2, . . . , N. (2.8)
n, j
p
42

Известно, что хорошие статистические свойства векторов
(X
, X
n, 1
n, 2
, . . . , X
n, L
)
имеют место, если все числа вида cjajразличны. В частности, можно
положить aj≡ a, cj= a(j − 1) + c mod m, тогда
cjaj= (j − 1) + ca mod m.
Реализация многопоточной версии приведена в Программе 4.1.
Параметризация циклов. Часто оказывается, что максимально
допустимая длина цикла некоторого генератора существенно меньше
числа возможных состояний «внутренней памяти» генератора. Это может означать, что все возможные состояния внутренней памяти образуют несообщающиеся классы циклических состояний. Поэтому появляется возможность выделять каждому вычислительному процессу
свою уникальную псевдослучайную последовательность максимально
возможного периода.
Обратимся к генератору, задаваемому рекуррентным соотношением (2.5). Для его работы необходимо хранить j значений X
. . . , X
. Пусть каждое значение занимает e бит. Тогда общее число
n−j
n−1
, X
n−2
возможных состояний генератора равно 2ej−1 (исключается нулевое со-
стояние). Полный период дают начальные состояния, содержащие хотя
бы одно нечетное число. Итак, остается всего (2j− 1)2
j(e−1)
допусти-
мых состояний генератора. А поскольку длина одного периода равна
e−1(2j
2
− 1), то это общее число возможных циклов есть
,
(2j− 1)2
(2j− 1)2
j(e−1)
e−1
(j−1)(e−1)
= 2
.
Таким образом, для получения параллельных потоков псевдослучайных
чисел с помощью генераторов вида (2.5) необходимо уметь выбирать начальные значения, принадлежащие различным циклическим классам.
Биты двоичного разложения числа x обозначим b0, b1, .. . , b
что x = (b
e−1be−2
дослучайных чисел X0, X1, .. . , X
. . . b1b0)2. Можно рассматривать биты первых j псев-
как двумерную матрицу. Если
j−1
e−1
, так
обозначать символом ∗ биты, которые могут заполняться произвольным
образом, то такая матрица выглядит примерно следующим образом:
43

b
e−1be−2
∗ ∗ . . . 0 0 X
0 ∗ . . . ∗ 0 X
.
.
.
∗ 0 . . . ∗ 0 X
∗ ∗ . . . ∗ 1 X
.
.
.
. . . b1b
.
.
.
.
.
.
0
e−1
e−2
.
.
.
.
.
.
1
0
Точный алгоритм вычисления мест, на которых должны стоять нули,
приведен в [47]. При этом гарантируется, что каждое заполнение этой
битовой матрицы принадлежит отдельному периоду генератора.
2.9. Некоторые реализации генераторов для параллельных
вычислений
Генераторы псевдослучайных чисел для параллельных вычислений реализованы в различных библиотеках — как специализированных,
так и общего назначения.
R
Математическая библиотека Intel
Math Kernel Library1включает набор векторных генераторов случайных чисел, в том числе конгруэнтные генераторы, вихрь Мерсенна. Также эта библиотека содержит
векторизованные функции для генерации случайных величин с основными дискретными и непрерывными законами распределения.
R
В библиотеку AMD
Core Math Library2включены векторизованные реализации нескольких генераторов псевдослучайных чисел со
значениями в полуинтервале (0, 1] и генераторов псевдослучайных чисел из основных дискретных и непрерывных законов распределения.
Также есть поддержка независимых потоков псевдослучайных чисел.
Специализированная библиотека SPRNG3предназначена для получения независимых потоков псевдослучайных чисел в параллельных
программах на системах с разделенной памятью. Разработчики спроектировали библиотеку для совместного использования с технологией MPI. Предполагается, что каждый процессор поддерживает только один поток псевдослучайных чисел. Набор генераторов включает
линейный конгруэнтный генератор, мультипликативный генератор Фибоначчи с запаздыванием и др. В основе разделения на независимые
1
http://software.intel.com/ru-ru/articles/intel-mkl/
2
http://developer.amd.com/libraries/acml/pages/default.aspx
3
http://sprng.cs.fsu.edu/
44

потоки чисел здесь лежит принцип параметризации генераторов.
Библиотека RngStreams4может быть использована как совместно с MPI, так и в многопоточных приложениях с OpenMP. В основе
создания нескольких потоков здесь лежит разделение на подпоследовательности.
Все рассмотренные выше библиотеки ориентированы на включение в программы на языках Fortan и C/C++. Существуют также библиотеки для других языков программирования. Например, рассмотренная выше библиотека RngStreams существует также в версиях, написанных на языках Java и C#.
4
http://www.iro.umontreal.ca/˜lecuyer/myftp/streams00/

Глава 3. Моделирование случайных величин
и векторов с произвольным законом распределения
Методы Монте-Карло основываются на порождении выборки значений случайной величины X с заданным законом распределения. При
этом сам закон распределения может быть дан непосредственно, например, в виде функции распределения FX(x) = P({X < x}). Также
случайная величина может быть задана конструктивно в виде некоторой функции от других случайных величин Y , Z, . . . , для которых
известен совместный закон распределения. Для моделирования случайной величины и векторов с заданным законом распределения наиболее
часто встречающимся приемом является функциональное преобразование случайной величины U с равномерным законом распределения на
(0, 1). В настоящем разделе приводятся некоторые распространенные
алгоритмы моделирования случайных величин и случайных векторов.
Обсуждается возможность применения векторных вычислений.
3.1. Моделирование дискретных случайных величин
Рассмотрим сначала моделирование дискретной случайной величины X с конечным числом значений a1, a2, . . . , aK, K < ∞. Пусть p
— вероятность значения aj, j = 1, 2, . . . , K. Разобьем отрезок [0, 1] на
полуинтервалы ∆1= [0, p1), ∆2= [p1, p1+p2), . . ., ∆K= [p1+p2+. . . +
+ p
распределением на (0, 1). Найдем интервал ∆j, которому принадлежит
число u. Тогда в качестве значения случайной величины X выберем aj.
дикатор IA= IA(ω) = I(A) события A ⊂ Ω. По определению, IAпринимает значение 1 при ω ∈ A и значение 0 при ω 6∈ A. Говорят, что
случайная величина IAимеет распределение Бернулли с параметром
p = P(A). Предполагая, что вероятность p задана, сможем «разыграть»
значение случайной величины IAследующим образом. Получим значение u случайной величины U. Если u < p, положим IA= 1, иначе
положим IA= 0.
K = ∞; в этом случае число интервалов ∆jтакже бесконечно счетно.
Для оценки эффективности этого алгоритма будем считать, что проверка принадлежности точки u одному подынтервалу ∆jтребует единицы
, 1]. Пусть u — значение случайной величины U с равномерным
K−1
Простейшим примером такой случайной величины является ин-
Если число значений a1, a2, . . . бесконечно счетно, будем писать
j
46

времени. Тогда легко увидеть, что математическое ожидание числа проверок равно
K
X
1 +
jpj.
j=1
Среднее число проверок можно уменьшить, если перенумеровать зна-
чения a1, a2, . . . , в порядке убывания вероятностей p1, p2, . . . .
Если число K конечно и невелико, границы интервалов можно
хранить в массиве. В противном случае границы интервалов необходимо
вычислять каждый раз, когда проверяется новое значение u. Для конкретных распределений вычисление вероятностей pjоказывается возможным провести по рекуррентным схемам. Обозначим kj= pj/p
j−1
отношение вероятностей. Алгоритм моделирования дискретной случайной величины примет следующий вид.
Алгоритм VIII
Моделирование дискретной случайной величины
Шаг 1. Получить значение u случайной величины с равномер-
ным распределением на (0, 1). Положить j = 1, вычислить p1.
Шаг 2. Если u < pj, завершить работу, возвратить значение aj.
Шаг 3. Если u > pj, то присвоить u значение (u − pj), затем
увеличить j на 1, вычислить pj= kjp
и вернуться к шагу 2.
j−1
Рассмотрим моделирование случайных величин с типовыми дискретными распределениями вероятностей.
Пуассоновское распределение с параметром λ. Для j = 1, 2, . . .
имеем:
p0= e−λ, pj=
j
λ
e−λ, kj=
j!
p
p
j
j−1
λ
=
.
j
Продемонстрируем работу этого алгоритма на конкретном числовом
примере. Пусть для определенности λ = 1 и на первом шаге алгоритма
получили u = 0,8759. Поскольку p0= e−1≈ 0,3679 и u > p0(шаг 2), положим u = 0,8759−0,3679 = 0,508 и вычислим p1: p1= p0·(1/1) ≈ 0,3679
(шаг 3). Поскольку u > p1, вычисляем: u = 0,508 − 0,3679 = 0,1401,
p2= p1· (1/2) ≈ 0,1839. Теперь u < p2и значение случайной величины
X оказалось равным 2. Трудоемкость алгоритма находится по формуле
∞
j
X
λ
1 +
j=0
e−λ= 1 + λ.
j
j!
47

Другой алгоритм моделирования пуассоновской случайной величины заключается в следующем. Пусть величины U0, U1, . . . независимы и одинаково распределены по равномерному закону на интервале
(0, 1). Введем случайную величину
X = min{n : U0U1···Un< e−λ}.
Тогда величина X распределена по закону Пуассона с параметром λ.
В среднем в этом методе придется генерировать λ + 1 случайную величину с равномерным распределением.
Заметим, что ни один из рассмотренных алгортимов не преобразуется непосредственно в векторную форму.
Геометрическое распределение с параметром q. Вероятности имеют следующий вид:
pj= (1 −q)jq, j = 0, 1, . . . ,
откуда kj= 1 −q. Трудоемкость алгоритма равна
∞
X
1 +
jq(1 −q)j= q−1.
j=0
Другой алгоритм моделирования основывается на наблюдении,
что случайная величинаln U / ln(1 −q)имеет геометрическое распределение с параметром q. Здесь [·] обозначает целую часть числа. Хотя
накладные расходы на вычисление логарифма могут сделать такой способ медленным, этот способ допускает очевидную векторизацию: сразу
для вектора величин U1, U2, . . . , Urможно вычислить вектор из логарифмов с использованием специальной библиотеки векторных математических функций.
Биномиальное распределение с параметрами q, n. Вероятности
имеют вид
pj= C
j
qj(1 −q)
n
j
для j = 0, 1, . . . , n.
Отсюда
kj= q(n − j + 1) × ((1 −q)j)−1.
Трудоемкость алгортима равна
n
X
1 +
C
j=0
j
qj(1 −q)j= 1 + nq.
n
48

Отрицательно-биномиальное распределение с параметрами q, m.
Вероятности определяются для 0 < q < 1 и m > 0 и имеют вид
pj=
где
Γ(j + m)
Γ(m)Γ(j + 1)
Γ(a) =
qm(1 −q)j, j = 0, 1, . . . ,
∞
Z
a−1e−x
x
0
dx
— гамма-функция Эйлера. Из вида вероятностей получаем
kj= (m + j − 1)(1 −q)j−1.
Трудоемкость алгоритма равна
∞
X
1 +
j=0
Γ(j + m)
j
Γ(m)Γ(j + 1)
qm(1 −q)j= 1 + mq−1.
Алгоритм моделирования дискретных случайных величин лег-
ко переносится на случай моделирования однородной марковской цепи
{Xn; n = 0, 1, . . .} с конечным числом состояний a1, a2, . . . , aK.
Алгоритм IX
Моделирование цепи Маркова с конечным числом состояний
Пусть начальное распределение
(0)
p
= P({X0= aj}), j = 1, 2, . . . , K
j
и переходные вероятности
p
= P({X
j,l
= al}|{Xn= aj}), j, l = 1, 2, . . . , K
n+1
заданы. Тогда значение X0выбирается из распределения вероятностей
(0)
(0)
q
, q
1
, . . . , q
2
события {Xn= j} значение X
ятностей q
j,1
(0)
; дальше для всякого n = 0, 1, .. . при наступлении
, q
K
, . . . , q
j,2
j,K
.
выбирается из распределения веро-
n+1
49

Приведем пример, ставший уже классическим. Пусть в ограниченной связной области D двумерной плоскости xOy с простой границей Γ задано дифференциальное уравнение в частных производных
∂2u(x, y)
2
∂x
∂2u(x, y)
+
∂y
= f(x, y) (3.1)
2
для неизвестной функции u(x, y) с граничными условиями
u(x, y) = g(x, y), (x, y) ∈ Γ. (3.2)
Если f(x, y) = 0 для всех (x, y) ∈ D, то имеем уравнение Лапласа, а при f(x, y) 6= 0 — уравнение Пуассона. Для приближенного
решения уравнения (3.1) с граничным условием (3.2) выбирают параметр h («шаг сетки») и полагают x = kh, y = lh, k, l — целые числа.
Точки (kh, lh) называются узлами сетки. Узел (kh, lh) ∈ D∪Γ называется внутренним, если узлы (kh ± h, lh) и (kh, lh ±h) также принадлежат G, в противном случае узел называется граничным. Заметим, что
граничные узлы не обязаны принадлежать границе Γ (рис. 3.1). Обозначим u
g
k,l
= u(kh, lh). Для внутренних узлов положим f
k,l
= f (kh, lh).
k,l
= g(ˆxk, ˆyl), где точка ( ˆxk, ˆyl) ∈ Γ — ближайшая точка границы Γ к
граничному узлу (kh, lh). Заменяя входящие в уравнение (3.1) частные
производные вторыми разделенными разностями, получаем разностное
уравнение
1
u
k,l
(u
=
4
Дополним уравнения (3.3) равенствами u
k−1,l
+ u
k+1,l
+ u
k,l−1
k,l
+ u
= g
− h2f
k,l+1
для граничных узлов.
k,l
). (3.3)
k,l
Системе уравнений (3.3) можно придать следующую вероятностную интерпретацию. Определим цепь Маркова {Xn; n = 0, 1, . . .} так,
что возможные значения случайной величины Xnсуть узлы сетки, а
из узла (kh, lh) с равной вероятностью 1/4 возможен переход в любой
из соседних узлов (kh − k, lh), (kh + h, lh), (kh, lh − h), (kh, lh + h).
В качестве значения величины X0выберем фиксированный внутренний
узел (kh, lh). Определим случайную величину N как номер шага, на
котором происходит первое попадание в какой-нибудь граничный узел.
Тогда величины
¯u
= Mg(XN)−
k, l
2
h
f(X0)+f (X1)+. . .+f (X
4
N −1
))
{X0= (kh, lh)}
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
