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

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

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Тогда оценкой решения y(t) в точке t является случайная величина
Z(t) =
1
2N
¯y0+
a(0)
N
X
¯y
1
i=1
Yi(t)
e
+¯y0−
a(0)
N
X
¯y
1
e
i=1
−Yi(t)
. (5.10)
Эта оценка является несмещенной. Заметим, что для вычисления зна­чения искомой функции при заданном значении аргумента по форму­ле (5.10) не требуется находить оценки значений этой функции при дру­гих значениях аргумента, как это делается, например, в классическом методе Рунге – Кутты.
Для построения доверительного интервала для y(t) необходимо
вычислить дисперсию величины Z(t). Для случайной величины
Vi=
1
¯y0+
2
¯y
1
a(0)
Yi(t)
e
1
+
¯y0−
2
¯y
1
a(0)
e
−Yi(t)
при фиксированном t имеем:
2
M(V
) =
i
D(Vi) =
1
¯y0+
4
+
1
¯y0+
4
1
+
2
a(0)
1 2
a(0)
¯y0+
¯y
1
¯y0+
¯y
1
¯y
1
a(0)
2
e
a(0)
2
e
2Yi(t)
¯y
1
2Yi(t)

¯y0−

+
¯y0−
+
a(0)
1 4
1 4 ¯y
1
¯y0−
¯y
1
a(0)
¯y0−
− y2(t),
a(0)
¯y
1
a(0)
,
¯y
1
2
2
−2Yi(t)
e
−2Yi(t)
e
+
+
где y(t) есть решение исходной задачи. В то же время функции
mk(t) = M(exp{(−1)
k−1
2Y (t)}), k = 1, 2,
суть решения уравнения (5.4), в котором взято a1(t) = 2a(t) вместо a(t), и начальные условия mk(0) = 1, m
0
(0) = 2a(0). С целью изучения
k
точности метода можно находить значения mk(t) классическим мето­дом, например, методом Рунге – Кутты. Теперь имея оценку дисперсии величины Z(t) можно на основании центральной предельной теоремы строить доверительные границы для точного решения y(t).
Для оценки решения y(t) при нескольких значениях t из проме­жутка [0, T ] возможно два пути. Допустим, требуется оценить y(t1) и y(t2) для 0 6 t1< t26 T < ∞. При первом подходе можно строить
111
оценки Z(t1), Z(t2) по разным независимым реализациям пуассоновско­го процесса {N (t); t > 0}, достигая этим некоррелированности оценок. Однако такой подход требует огромной вычислительной работы для достижения необходимой точности с заданной доверительной вероятно­стью. Поэтому второй подход заключается в том, чтобы строить оценки Z(t1), Z(t2) по одному набору выборочных реализаций пуассоновского процесса {N(t); t > 0} при 0 6 t 6 T . Программа 5.1 демонстрирует текст существенных частей моделирующего алгоритма. Кроме реализа­ции собственно метода Монте-Карло, в программе присутствует метод Рунге – Кутты 4-го порядка для вычисления решения y(t) и дисперсии с помощью функций m1(t), m2(t). В программе используется библиотека OpenMP организации многопоточных вычислений.
Программа 5.1. Программа оценки решения ОДУ гиперболического типа по методу Монте-Карло
1 c l a ss D iffS o l v er { 2 uns i g n e d N t h r e a d s , // же л а е мое чи с л о поток о в 3 ru n s N , // к о л иче с т в о в ыбор о ч н ых тр а ект о р и й 4 doubl e l mb , / / па р а метр la m b da 5 ma x T , / / пр а в ый к о н ец п роме ж у т ка д л я 0 <t < maxT 6 *t_arr , // з наче н и я нез а в и сим о й пер е м е н ной 7 *xm c , / / оц е н ка п о ме т о д у Мо н т е - К а р л о 8 *xr k , / / оц е н ка п о ме т о д у Ру н г е - К у т т ы 9 *xuc b , * x l c b ; // д ове р и т ель н ы е гр а н и ц ы
10 d2vec y 0 ; // нача л ь н ы е у слов и я
11 12 p u blic : 13 void r unM o n t eCa r l o (); 14 doubl e a ( d o u ble ); / / В ы ч и сле н и е фун к ц и и a( t) 15 doubl e da ( d o u b l e ) ; // Вы ч и с лени е прои з в о дно й a ’( t ) 16 void r unM o n t eCa r l o (); 17 void r unR u n g eKu t t a (); 18 v2df r h s ( d o u ble , v 2 d f , do u b l e c o e f ); // п равая ча с т ь
19 // пр о ч ие м е тоды . . . .
20 };
21 22 v o i d Dif f S o l ver :: ru n M o nt e C a rlo () 23 { 24 om p _ set _ n um_ t h rea d s ( Nt h r eads ) ; 25 sei c g r n g r n g (3 , time (0) ,1 , om p _ g et _ n u m_ t h r ea d s ( ) ); 26 doubl e * x = xmc ;
27
112
28 # pragm a om p pa r alle l fo r sh a r ed ( x , r n g ) 29 fo r ( in t jj =0; jj < r u n s N ; ++ jj ) { 30 // м о дел и р о ва н и е одной ре а лиз а ц и и 31 vector < double > t a u ( l m b * m a x T + 1 0 * sqrt ( lmb * max T )); 32 d o u b l e u=0 , dt = m a x T /( n -1.0) , t = 0 .0 , t1 =0. 0 , 33 s um = 0 .0 , f a c t o r = 1 . 0 , 34 C1 = 0 . 5 * ( y 0 .f [ 0 ]+ y 0 .f [1]/ a (0)) , 35 C2 = 0 . 5 * ( y 0 .f [ 0 ] - y 0 .f [1]/ a ( 0 ) ) ; 36 int i =0; 37 x [ 0 ] = y 0 .f [0]; t a u [ 0 ] = 0 ; 38 do { 39 i++; 40 u = r n g . n e x t ( o m p _ge t _ thr e a d _n u m ( )); 41 u = - log ( u )/ l m b ; 42 tau [ i ]= t a u [i -1]+ u; 43 } whi l e ( t a u [ i ] <= maxT ) ; 44 // при вы х о д е из ци к л а ta u [ по с л е д ний ]> maxT 45 int j =1; 46 for ( i = 1 ; i <n ; + + i ) 47 { 48 // Вычис л я е м в точке t 49 t1 = t ; 50 t + = d t ; 51 while ( t a u [j ] < t) 52 { 53 // п р ибл и ж е нно е инт е г р иро в а н ие 54 // по м е т оду С импс о н а 55 sum + = fa c t o r * ( tau [ j ] - t1 ) * ( a ( t a u [ j ]) 56 + 4.0* a( 0 . 5 * ( t 1 + t au [j ] ) ) + a ( t1 ) ) / 6 . 0; 57 f a c t o r = - fac t o r ; 58 t1 = tau [ j ]; 59 ++ j ; 60 }; 61 sum + = fa c t o r * ( t - t 1 ) *( a ( t) 62 + 4.0* a( 0 . 5 * ( t + t1 ) ) + a( t 1 ) )/ 6 . 0 ; 63 d o u b l e term = C1 * exp ( sum )+ C2 * exp (- s u m ); 64 x[ i ]+= term ; 65 }; 66 }; 67 fo r ( in t i=1; i < n ; i ++) 68 { 69 xmc [ i ] / = s t a t i c_cast < d o u b l e >( runsN ); 70 } ;
113
71 };
72 73 v 2 d f 74 D iff S o l ver :: r h s ( doubl e t , v2df _y , do u b l e coef =1.0) 75 { 76 d2vec y , y 1 ; 77 y. v= _y ; 78 y1 .f [0 ] = y . f [ 1 ] ; 79 y1 .f [1 ] = c o e f * coef * a( t )* a ( t )* y . f [ 0 ] 80 + ( da ( t )/ a (t ) - 2 . 0 * lmb )* y . f [ 1 ] ; 81 retur n y1 . v; 82 }
83 84 v o i d Dif f S o l ver :: ru n R u ng e K u tta () 85 { 86 d 2 v e c y , y n e w ; 87 v2 d f k1 , k2 , k3 , k4 ; 88 c o n s t v2 d f half = {0.5 , 0. 5}; 89 f l o a t dt ; 90 yn e w = y 0 ; 91 xu c b [0] = x l c b [ 0 ] = x r k [ 0 ] = y 0 .f [0]; 92 for ( int i =0; i <n -1; ++ i ){ 93 y = yn e w ; 94 dt = t _ a r r [ i +1 ] - t_a r r [ i ]; 95 k1 = ( v 2 d f ){ dt , dt } * rhs ( t _ a r r [ i ] , y. v ); 96 k2 = ( v 2 d f ){ dt , dt } * 97 rhs ( t_arr [i ]+0.5 * dt , y. v + k1 * ha l f ); 98 k3 = ( v 2 d f ){ dt , dt } *
99 rhs ( t_arr [i ]+0.5 * dt , y. v + k2 * ha l f ); 100 k4 = ( v 2 d f ){ dt , dt } * 101 rhs ( t_arr [i ] + dt , y. v + k3 ) ; 102 yn e w .v = y. v + ( k 1 + k2 + k2 + k3 + k 3 + k 4 ) * 103 (v2df ) { 1 . / 6 . , 1. / 6.}; 104 xrk [ i + 1 ] = yn e w .f [0]; 105 } 106 // в ы числ е н и е д ов е р и тел ь н ы х и нте р в а лов 107 d o u b l e *x2rk = n e w do u ble [ n ] ; 108 x2 r k [0] = 0 . 2 5 * po w ( y 0 . f [0]+ y0 . f [1]/ a ( 0 ) , 2 . 0 ) 109 + 0.25* pow ( y0 . f [0] - y0 . f [ 1 ] / a (0) ,2.0) 110 + 0.5*( y0 . f [ 0 ] + y0 . f [ 1 ] / a (0))* ( y0 . f[0] - 111 y0 . f [ 1 ] / a ( 0 ) ) - pow ( y0 . f [ 0 ] , 2 . 0 ) ; 112 yn e w .f [0 ] = 1 . 0 ; yn e w . f [ 1 ] = 2.0* a ( 0 ) ; 113 for ( int i =0; i <n -1; ++ i ){
114
114 y = yn e w ; 115 dt = t _ a r r [ i +1 ] - t_a r r [ i ]; 116 k1 = ( v 2 d f ){ dt , d t } * rhs ( t _ a r r [ i ], y . v , 2.0) ; 117 k2 = ( v 2 d f ){ dt , d t } * rhs ( t _ a r r [ i ] + 0 . 5 * dt , y . v 118 + k 1 * half , 2 . 0 ) ; 119 k3 = ( v 2 d f ){ dt , d t } * rhs ( t _ a r r [ i ] + 0 . 5 * dt , y . v 120 + k 2 * half , 2 . 0 ) ; 121 k4 = ( v 2 d f ){ dt , d t } * rhs ( t _ a r r [ i ]+ dt ,y . v 122 + k3 , 2 . 0 ) ; 123 yn e w .v = y. v + ( k 1 + k2 + k2 + k3 + k 3 + k 4 )* 124 ( v 2 d f ) { 1 . / 6 . , 1./6 . } ; 125 x2 r k [i +1] = 0 . 25* pow ( y0 . f [ 0 ] + y0 . f [ 1 ] / a (0) ,2.0) 126 * y n e w . f [0]; 127 } 128 yn e w .f [0 ] = 1 . 0 ; yn e w . f [ 1 ] = - 2 . 0 * a (0); 129 for ( int i =0; i <n -1; ++ i ){ 130 y = yn e w ; 131 dt = t _ a r r [ i +1 ] - t_a r r [ i ]; 132 k1 = ( v 2 d f ){ dt , d t } * rhs ( t _ a r r [ i ], y . v , -2 .0); 133 k2 = ( v 2 d f ){ dt , d t } * rhs ( t _ a r r [ i ] + 0 . 5 * dt , y . v 134 + k 1 * half , -2. 0 ) ; 135 k3 = ( v 2 d f ){ dt , d t } * rhs ( t _ a r r [ i ] + 0 . 5 * dt , y . v 136 + k 2 * half , -2. 0 ) ; 137 k4 = ( v 2 d f ){ dt , d t } * rhs ( t _ a r r [ i ]+ dt ,y . v 138 + k3 , -2 . 0 ); 139 yn e w .v = y .v + ( k1 + k2 + k2 + k3 + k 3 + k4 ) 140 * ( v2df ){1./6. , 1. / 6 .}; 141 x2 r k [i +1 ] += 0. 2 5 * p o w ( y 0 .f [ 0] - y 0 .f [1 ] 142 /a (0) ,2.0)* ynew .f [0] + 0 . 5 *( y0 . f [0]+ y0 . f [ 1 ] / a ( 0 ) ) 143 * ( y0 . f [0] - y0 . f [ 1 ] / a ( 0 ) ) - pow ( xrk [ i + 1 ] , 2 .0); 144 xu c b [i +1 ] = x r k [i +1] + 1 . 96* sq r t ( x 2 r k [ i +1]/ r u n s N ); 145 xl c b [i +1 ] = x r k [i +1] -1.96* sq r t ( x 2 r k [ i +1]/ r u n s N ); 146 }; 147 }
Пример построенного решения приводится на рис. 5.2. В этом
примере решалось уравнение (5.4) с функциями
Λ(t) = λt, a(t) = 1 + sin(2πt/T )
при значениях параметров T = 8, λ = 4,4 с начальными условиями
y(0) = 0,1, y0(0) = −0,1.
115
Решение оценивалось в 200 точках по 10000 выборочным траекториям
Решение методом Монте-Карло
y(t)
0,05
0,1
0,15
0,2
0,25
0,3
0,35
t
0 2 4 6 8
метод Монте-Карло метод Рунге – Кутты
процесса {N (t); t > 0}. Серая область отмечает доверительные грани­цы для оценки Z(t) с доверительной вероятностью 0,95, вычисленные на основании центральной предельной теоремы. Благодаря тому, что
Рис. 5.2. Вид решения обыкновенного дифференциального уравнения гипербо­лического типа методом Монте-Карло для функции a(t) = 1 + sin(2πt/T)
оценка значений функции y(t) при разных значениях аргумента про­изводилась по одному набору выборочных реализаций пуассоновского случайного процесса, график решения по методу Монте-Карло выгля­дит гладко, но отклонение от точного решения мало меняет знак, так что график в методе Монте-Карло в большей своей части находится по одну сторону от точного решения. Если бы оценка значений y(t) при разных аргументах t производилась по независимым реализациям, график выглядел бы менее гладким, зато положительные и отрицатель­ные уклонения от точного решения встречались бы примерно одинаково часто. Таким образом, здесь наглядно демонстрируется аналог одного свойства случайных блужданий, известного для симметричных случай­ных блужданий под именем «закона арксинуса»: последняя смена знака
116
погрешности, вероятнее всего, произойдет либо близко к началу траек­тории, либо близко к концу.
Изучив свойства решений дифференциальных уравнений в виде функционалов от пуассоновского процесса для обыкновенных диффе­ренциальных уравнений, остановимся на гиперболических уравнениях в частных производных. Приведем без доказательства следующий резуль­тат. Рассмотрим дифференциальное уравнение в частных производных (так называемое телеграфное уравнение)
∂2u
∂t
+2λ −
2
a0(t)
a(t)
∂u
∂t
= b2(t)
∂2u ∂x
2
(5.11)
с начальными условиями
∂u
u(0, x) = ψ1(x),
∂t
= ψ2(x), x ∈ R. (5.12)
t=0
Решение задачи (5.11), (5.12) можно представить в виде
u(t, x) = M(Φ(x, Y (t))), t > 0, x ∈ R,
где
Φ(x, y) =
1
(ψ1(x + y) + ψ1(x − y)) +
2
1
2b(0)
x+y
Z
x−y
ψ2(s) ds.
Заметим, что ищется решение в неограниченной области. Поэтому непо­средственное применение классического метода сеток не представляется возможным. В то же время для оценки решения u(t, x) в заданной точ­ке (t, x) не требуется знать решения в других точках, поэтому метод Монте-Карло легко реализовать.
Глава 6. Имитационное моделирование
6.1. Методы имитационного моделирования систем массового обслуживания
Важной сферой приложений методов Монте-Карло является ими­тационное моделирование сложных управляющих систем. Отличитель­ной чертой сложной системы является наличие большого количества составных частей со сложным взаимодействием между частями. При этом на первое место выдвигается структура системы, организация вза­имодействия между ее частями, осуществление функций управления, а физическая природа разворачивающихся в сложной системе процессов оказывается вторичной и может не рассматриваться. Большое число примеров сложных управляющих систем можно найти при рассмотре­нии крупных технологических, производственных, энергетических, ком­муникационных комплексов, систем автоматизированного управления и многопроцессорных высокопроизводительных вычислительных систем.
Ввиду сложности системы аналитическое исследование и оптими­зация математической модели часто не представляются возможными. Поэтому пользуются имитационной моделью системы. Такая модель воспроизводит последовательность явлений, наблюдаемых в процессе функционирования системы, с сохранением их логической структуры и чередования во времени. При этом основной целью моделирования является оценка некоторого набора показателей функционирования уп­равляющей системы. Такая целенаправленность исследования позволя­ет ограничить множество подлежащих моделированию явлений.
Чтобы иметь мысленно конкретный пример сложной системы, об­ратимся к так называемым системам массового обслуживания и сетям массового обслуживания. Система массового обслуживания состоит из обслуживающего устройства (прибор, сервер ), способного предостав­лять обслуживание поступающим извне требованиям (заявкам, потре- бителям, вызовам). Дожидаться начала обслуживания требования мо­гут в очереди конечной или бесконечной вместимости. Соответственно, сеть массового обслуживания состоит из нескольких систем массового обслуживания, а требования, обслуженные в одной из систем, могут направляться на обслуживание в другие системы массового обслужи­вания в этой сети. Таким образом, основные события, происходящие в таких системах, — это поступление новых требований в систему, на­чало и завершение обслуживания. Эти события наступают в моменты
118
времени, образующие обычно не более чем счетное множество точек на временн´ой оси.
Рассмотрим основные методы составления имитационной модели,
ориентируясь прежде всего на системы и сети массового обслуживания.
Первый метод основан на рассмотрении системы как «черного ящика». В рамках этого подхода полностью игнорируется действитель­ная структура управляющей системы и протекающие в ней процессы, а имитационная модель строится по формализованному математическо­му описанию зависимости «выхода» системы от ее «входа». Например, иногда получается найти уравнения Колмогорова – Чепмена для рас­пределения
pk(t) = P({X(t) = Ek})
однородного марковского процесса {X(t); t > 0} со счетным множе­ством состояний {E0, E1, . . .},
dpk(t)
dt
= −λkpk(t) +
X
l6=k
λ
(t), k = 0, 1, . . . .
l,kpl
Тогда реализацию процесса {X (t); t > 0} можно получить по следую­щему алгоритму.
Алгоритм XVIII
Моделирование марковского процесса с дискретным множеством
состояний
Шаг 1. Выбрать начальное состояние X(0) ∈ {E0, E1, . . .} из
распределения вероятностей pk(0), k = 0, 1, . . . .
Шаг 2. Если текущее состояние есть Ek, сгенерировать случай- ную величину T с экспоненциальным законом распределения с пара­метром λkи положить время пребывания процесса в состоянии Ekрав­ным T .
Шаг 3. Выбрать следующее состояние из множества {E0, E1, . . .} из распределения вероятностей λ
, l = 0, 1, . . . , l 6= k. Перейти к
k,l/λk
шагу 2.
Таким образом, не рассматриваются процессы в системе, привед­шие к конкретному виду мгновенных интенсивностей перехода λk, λ
k,l
k, l = 0, 1, . . . , k 6= l.
,
119
Второй метод заключается в полном анализе изучаемой управля­ющей системы и выделении всех составляющих ее элементов и связей между ними. Число таких элементов для сложных систем может быть очень большим. Иногда вводят иерархию элементов системы: группи­руют элементы в функционально связанные блоки или агрегаты и от­дельно проводят моделирование работы внутри каждого блока, а потом имитацию взаимодействия блоков.
Для реализации этого метода вводится понятие модельного вре- мени. Модельное время t определяет шкалу изменения состояний ими- тируемой системы. Модельное время не совпадает ни с реальным вре­менем работы реального прообраза изучаемой управляющей системы,
Как правило, при имитационном моделировании на современных ЭВМ воспроизводится дискретная временная шкала. Шаг этой шкалы зависит от выбранного способа моделирования. Первый способ создает равномерную шкалу и известен как «способ ∆t». При этом фактически имитируется последовательность состояний X (0), X(∆t), .. . , X (n∆t), . . . , вложенная в исходный процесс. Величина шага ∆t выбирается та­ким образом, чтобы вероятностью осуществления двух и более измене­ний состояния системы за время ∆t можно было пренебречь. Как пра­вило оказывается, что на большем числе тактов изменения состояния системы не происходит, поэтому фактически машинное время тратится «впустую». Поэтому второй способ связан с рассмотрением только мо­ментов времени, в которые происходит изменение состояния системы. Такой способ называется «методом дискретных событий».
Опишем подробнее «метод дискретных событий» для имитации одной траектории функционирования сложной управляющей системы. Пусть выбрано описание для состояния системы, множество состоя­ний управляющей системы есть S и множество возможных событий в системе есть E, |E| = n — число возможных событий. Будем счи­тать, что каждому состоянию s ∈ S системы присвоен целочислен­ный ранг |s| 6 n, равный числу возможных событий в этом состоянии. Обозначим X(t) ∈ S — состояние системы в момент времени t > 0, Ti(t) > 0 — оставшееся время с момента t до наступления i-го собы- тия, 1 6 i 6 |X(t)|. Каждая из компонент Ti(t) убывает с единичной скоростью. Пусть X(t) = s ∈ S. В момент
t + T
= min{T1(t), T2(t), . . . , T
min
|S(t)|
(t)}
одна из компонент, для определенности — Tj(t), обнуляется и это интер-
120
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]