Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Методы Монте-Карло для параллельных вычислений. Учебное пособие
.pdf
Тогда оценкой решения 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
