Sei sulla pagina 1di 8

DET 362 PESQUISA OPERACIONAL

Prof. Heleno do Nascimento Santos


Simulao de Monte Carlo
NOTAS DE AULA.
Simulao de Monte Carlo
Trata-se de uma tcnica usada na simulao de valores para uma varivel aleatria,
conhecida a sua fdp, ou seja, a sua funo de distribuio de probabilidade f ( x) . A idia
bsica usar a integral da fdp, F ( x) , conhecida como funo de distribuio acumulativa,
e sua inversa F 1 ( x) , para gerar um valor para a varivel aleatria por meio de um mtodo
conhecido como Transformao Inversa, com o uso de um nmero gerado aleatoriamente.
Repete-se o procedimento n vezes, a fim de gerar n valores para a varivel aleatria.
O algoritmo bsico consta de dois passos:
P1) Gere um NAU(0, 1);
P2) Retorne
x = F 1 ( NA)
Observe que o Passo 1 pede a gerao de um Nmero Aleatrio entre 0 e 1. Em
seguida, aborda-se o conceito de Nmero Aleatrio e sua gerao. As linguagens de
programao e as planilhas eletrnicas dispem de funcionalidades que permitem a
execuo do Passo 1.

1) Nmeros Aleatrios
Um Nmero Aleatrio uma varivel aleatria uniformemente distribuda entre 0 e
1, significando que qualquer valor entre 0 e 1 tem a mesma probabilidade de ocorrer.
Dentre os mtodos usados na gerao nmeros aleatrios, existe o Gerador
Congruencial Linear (GCL), definido por

NA
=
(aNAk + c)(mod m)
k +1
onde
NA0 = semente
a = multiplicador
c = incremento
m = mod ulo
Como o a expresso geradora define o nmero aleatrio NAk +1 como sendo o resto
da diviso de aNAk + c por m , segue que o nmero mximo de nmeros aleatrios
gerados, sem repetio, dado por m-1. Para serem gerados exatamente m 1 nmeros
aleatrios, sem repetio, a escolha dos parmetros a, c e m deve atender as seguintes
condies:
i)
ii)
iii)

o nico inteiro positivo que divide exatamente m e c 1;


se q um nmero primo que divide m , ento q divide a 1 ;
se 4 divide m , ento 4 divide a 1 .

Ex: Considere a escolha:


=
a 13,
=
c 5=
e m 32 . Observe que as 3 condies so atendidas.
A Tabela 1 mostra a sequncia de nmeros aleatrios associada a esta escolha.
Tabela 1: Gerao de uma sequncia de nmeros aleatrios pelo GCL.
K
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14

a
13

c
5

m
32

Nak
46
27
4
25
10
7
0
5
6
19
28
17
2
31
24

(a*NA(k)+c)
603
356
57
330
135
96
5
70
83
252
369
226
31
408
317

Nak+1
27
4
25
10
7
0
5
6
19
28
17
2
31
24
29

NA
0,84375
0,125
0,78125
0,3125
0,21875
0
0,15625
0,1875
0,59375
0,875
0,53125
0,0625
0,96875
0,75
0,90625

15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

29
30
11
20
9
26
23
16
21
22
3
12
1
18
15
8
13
14
27
4

382
395
148
265
122
343
304
213
278
291
44
161
18
239
200
109
174
187
356
57

30
11
20
9
26
23
16
21
22
3
12
1
18
15
8
13
14
27
4
25

0,9375
0,34375
0,625
0,28125
0,8125
0,71875
0,5
0,65625
0,6875
0,09375
0,375
0,03125
0,5625
0,46875
0,25
0,40625
0,4375
0,84375
0,125
0,78125

2) Gerao de Valores para Variveis Aleatrias


Como foi dito, usa-se o Mtodo da Transformao Inversa para gerar valores para
uma varivel aleatria, conhecida a sua fdp. Se esta funo for integrvel, utiliza-se a sua
integral como parte do algoritmo; caso contrrio, lana-se mo de mtodos numricos de
integrao ou de mtodos disponveis na literatura, como o caso da gerao de valores
para variveis aleatrias que seguem a Distribuio Normal, exposta no item 5.

Por definio, a Funo Acumulativa de Probabilidade quando a fdp integrvel


dada por

F ( x) =

f ( x)dx

Seja NA um nmero aleatrio uniformemente distribudo entre 0 e 1. Fazendo


F ( x) = NA na equao acima e resolvendo-a para x tem-se:

x = F 1 ( NA)
3) Aplicaes
2.1) GERAO DE VALOR PARA XEXP() Distribuio Exponencial.
a) fdp
1 ( x )
e
f ( x) =
0

se x 0
caso contrario.

b) Funo Acumulativa de Probabilidade F ( x)


Por definio:

F ( x) =

1 e ( x )
F ( x) =
0
Fazendo

f ( x)dx , o que leva a

se x 0
caso contrario.

ln(1 NA) .
F ( x) = NA na equao acima e resolvendo para x, tem-se x =

c) Algoritmo
Considerando que (1-NA) e NA so nmeros igualmente aleatrios, tem-se:
P1) Gere um NAU(0, 1);
P2) Retorne X = - *ln (NA).

d) Exemplos: em aula.

2.2) GERAO DE VALORES PARA XU(A, B) Distribuio Uniforme.


a) Funo de Distribuio de Probabilidades (fdp) f ( x)
1

f ( x) = b a
0

se a x b
caso contrario.

b) Funo Acumulativa de Probabilidade F ( x)


Por definio:

F ( x) =

f ( x)dx , o que leva a

se x < a

0
xa

=
F ( x)
b a
1
Fazendo

se a x b
se x > b.

F ( x) = NA na equao acima e resolvendo para x, tem-se x =a + (b a ) NA .

c) Algoritmo
P1) Gere um NAU(0, 1);
P2) Retorne

x =a + (b a ) NA .

d) Exemplos: em aula.
2.3) GERAO DE VALORES PARA XDU(A, B) - Distribuio Discreta Uniforme.
a) Funo de Distribuio de Probabilidades (fdp) p ( x)
1

p( x) = b a + 1
0

se x {a, a + 1,..., b}
caso contrario.

b) Funo Acumulativa de Probabilidade F ( x)


x

Por definio:

F ( x) = P( x) , o que leva a

x a + 1

F ( x) = b a + 1
1

Fazendo
abaixo.

se a x b
se x > b.

F ( x) = NA na equao acima e resolvendo para x, tem-se o passo P2 do algoritmo

c) Algoritmo
P1) Gere um NAU(0, 1);

x = a + (b a + 1) NA .
d) Exemplos: em aula.
P2) Retorne

2.4) GERAO DE VALORES PARA XTRIANG(A, B, C)


a) Funo de Distribuio de Probabilidades (fdp) f ( x)
2( x a)
se a x c

a
c

a
(
)(
)

2(b x)
se c < x b
f ( x) =
(b a)(b c)

caso contrario.
0
b) Funo Acumulativa de Probabilidade F ( x)
Por definio:

F ( x) =

f ( x)dx , o que leva a

2
( x a)
(b a)(c a)
F ( x) =
2
1 (b x)
(b a)(b c)

1
Fazendo

se x < a
se a x c
se c < x b
se x > b.

F ( x) = NA na equao acima e resolvendo para x, tem-se x =a + (b a ) NA .

c) Algoritmo
P1) Gere NA~U(0, 1);
P2) Calcule k = (c-a)/(b-a);
P3) Se NA < k, retorne

X = a + (b a ) * k * NA;
Seno, retorne

X = a + (b a ) * (1 (1 k )(1 NA) )
d) Exemplos: em aula.
2.5) GERAO DE VALORES PARA XN( ( , ) , a partir de Y N(0, 1).
2.5.1) Mtodo de Box e Miller (1958)

Algoritmo:
P1) Gere NA1U(0, 1) e NA2U(0, 1);
P2) Obtenha

Y1=

2ln( NA1 ) * cos(2 NA2 )

Y2=

2ln( NA1 ) * sen(2 NA2 )

P3) Retorne

X 1= + Y1
X 2= + Y2

Exemplo: (a ser feito em aula)


a) Gere 500 valores para a varivel aleatria RECEITAN(2000; 300).
b) Construa um histograma com os valores gerados.

2.5.2) Mtodo Polar - Marsaglia e Bray (1964)


Algoritmo:
P1) Gere NA1U(0, 1) e NA2U(0, 1);
P2) Obtenha

W= (2 NA1 1) 2 + (2 NA2 1) 2 ;
P3) Se W > 1, v para o passo 1; caso contrrio,
Faa

Y=

(2ln(W ) / W

Y1 Y * (2 NA1 1)
=
Y2 Y * (2 NA2 1)
=
Obs: as variveis Y1 e Y2 assim geradas so N(0, 1).
P4) Retorne

X 1= + Y1
X 2= + Y2
Exemplo: (a ser feito em aula)

a) Gere 500 valores para a varivel aleatria RECEITAN(2000; 300);


b) Construa um histograma com os valores gerados.

Potrebbero piacerti anche