Professional Documents
Culture Documents
Tpicos
Uma seqncia de nmeros aleatrios, x1, x2,..., deve possuir duas importantes propriedades:
uniformidade e independncia. Todo nmero aleatrio xi uma amostra independente de uma
distribuio uniforme e contnua no intervalo de zero a 1. Desta forma, a funo densidade de
probabilidade de x dada por:
1, 0 x 1
f (x) =
0, outro valor
f(x)
0 1 x
1
1
x2 1
E ( x ) = xdx =
1
=
0 2 0
2
1 2
x3 1 1
V ( x ) = x dx [ E ( x )] =
1
2 2
=
0 3 2 12
0
Para melhor compreender por que existem vrios mtodos geradores de nmeros aleatrios e
por que alguns so considerados melhores do que outros, exemplifica-se como estes geradores
operam. A tcnica empregada mais comum faz uso de uma relao recursiva na qual, o
prximo nmero na seqncia uma funo do ltimo ou dois ltimos nmeros gerados, isto
,
x n = f ( x n 1 , x n 2 ,...)
Um exemplo desta funo :
xn = 5 xn-1 + 1 mod 16
Os primeiros 32 nmeros obtidos por meio deste procedimento so: 10, 3, 0, 1, 6, 15, 12, 13,
2, 11, 8, 9, 14, 7, 4, 5, 10, 3, 0, 1, 6, 15, 12, 13, 2, 11, 8, 9, 14, 7, 4, 5.
Observa-se que os valores de x so inteiros entre 0 e 15. Dividindo-os por 16, obtm-se uma
seqncia de nmeros aleatrios com valores entre 0 e 1. Para o exemplo acima os nmeros
sero:
2
Fica claro que, conhecida a funo f, pode-se gerar novamente a seqncia sempre que se
fornece o valor inicial de x0. Este valor, usado para iniciar a seqncia, conhecido por
semente.
Uma importante observao sobre o exemplo dado, que a funo f determinstica. Desta
forma, dada uma semente, pode-se afirmar, com 100% de certeza, qual sero os nmeros na
seqncia. Embora estes nmeros sejam considerados randmicos, no sentido de serem
aprovados em testes estatsticos de aleatoriedade, so, de fato, pseudo-aleatrios. Embora isto
seja verdadeiro, o objetivo em qualquer mtodo de gerao produzir uma seqncia de
nmeros aleatrios entre zero e 1, a qual possua propriedades semelhantes aquelas dos
verdadeiros nmeros aleatrios. Alm disso, os nmeros pseudo-aleatrios muitas vezes
apresentam vantagens sobre os verdadeiramente-aleatrios. Por exemplo, quando se trata de
empreg-los em simulaes nas quais desejvel a possibilidade de se repetir o experimento
simulado e, portanto, a seqncia de nmeros aleatrios, da maneira exata como foi executada
anteriormente. claro que se o interesse for uma seqncia diferente, pode-se, a qualquer
momento, fazer uso de valores diferentes para a semente. Desta forma, os geradores de
nmeros aleatrios nos fornecem um controle adicional sobre a possibilidade de reproduzir os
resultados.
Semente
1. Deve ser computacionalmente eficiente: Uma vez que as simulaes podem necessitar da
gerao de, at mesmo, milhes de nmeros aleatrios em cada execuo, o tempo para
processar cada gerao deve ser mnimo;
2. O perodo deve ser muito longo: Um perodo curto pode fazer com que haja a reciclagem
da seqncia de nmeros aleatrios, resultando em uma repetio da seqncia de eventos.
Como conseqncia, pode haver uma limitao do perodo til de uma rodada de
simulao.
3. Os sucessivos valores devem ser independentes e uniformemente distribudos: A
correlao entre os diversos valores gerados deve ser pequena. A correlao, se
significativa, indica dependncia.
3
srie de mtodos geradores de nmeros aleatrios consagrados. Neste texto introdutrio, se
trata, principalmente, do mais utilizado deles, isto , o mtodo Congruente Linear.
O mtodo Congruente Linear considerado o mais popular, entre tantos outros mtodos
geradores de nmeros aleatrios e, por esta razo, ser tratado com um pouco mais de
detalhes. Alm deste, se tratar tambm de algumas de suas extenses, s quais so reportados
seqncias com longos perodos. Muitos outros mtodos podero ser encontrados nas
referncias como, por exemplo, em Law e Kelton (1991) e Bratley, Fox e Schrage (1987).
Este mtodo, tambm conhecido como mtodo congruente misto, foi primeiramente
divulgado em um trabalho desenvolvido pelo Prof. D. H. Lehmer, em 1951, quando dos
experimentos executados pelo computador ENIAC no MIT, conforme citado por Jain, [1991].
Em suas pesquisas ele descobriu que restos de sucessivas potncias de um nmero possuem
boas caractersticas de aleatoriedade. Ele obtinha o n-simo nmero de uma seqncia,
tomando o resto da diviso da n-sima potncia de um inteiro a por um outro inteiro m. Isto :
x n = a n mod m
Uma expresso equivalente usada para o clculo de xn aps calcular xn+1 dada por:
x n = ax n 1 mod m
x n = ax n 1 + b mod m
A popularidade dos geradores baseados neste mtodo deve-se ao fato de serem facilmente
analisados e de algumas garantias de suas propriedades dadas pela teoria das congruncias
[Dudewicz e Karian (1985)].
1. O mdulo de m deve ser grande. Uma vez que os valores de x estaro entre 0 e m-1, o
perodo nunca ser maior do que m;
4
2. Para que a computao de mod m seja eficiente, m deve ser uma potncia de 2, isto , 2k.
Neste caso, o mod m poder ser obtido truncando-se o resultado direita por k bits.
3. Se b for diferente de zero, o mximo perodo possvel m obtido se e somente se:
a) os inteiros m e b sejam primos, um em relao ao outro, isto , no possuam nenhum
outro fator alm de 1;
b) todo nmero primo que um fator de m, tambm um fator de a-1;
c) a-1 um mltiplo de 4, se o inteiro m mltiplo de 4.
4. Se b = 0, e m potncia de 2, o maior perodo possvel ser P = m / 4, considerando que: x0
(semente) seja um nmero impar e o multiplicador (a) seja dado por a = 8k + 3 ou a = 8k +
5, para algum k = 0, 1, 2, .....
Um gerador que possua o maior perodo possvel chamado de gerador de perodo completo.
Nem todos os geradores de perodo completo so igualmente bons. A questo da
autocorrelao deve tambm ser considerada. Aqueles com baixa correlao so, obviamente,
preferidos. O exemplo abaixo revela tais diferenas. Os dois geradores possuem o perodo
completo, mas o primeiro apresenta uma correlao de 0,25 entre xn-1 e xn, enquanto que no
segundo esta correlao menor do que 2-18.
Exemplo 1
Use o MCL para gerar uma seqncia de nmeros aleatrios entre zero e 1, com os seguintes
parmetros: x0 = 27, a = 17, b = 43 e m = 100: Observe que os valores inteiros gerados, sero
todos entre zero e 99, em razo do mdulo. Observe tambm, que estaro sendo gerados
inteiros aleatrios e no nmeros aleatrios. Tais inteiros podem ser transformados em
nmeros aleatrios (Ris) entre zero e 1, aplicando-se a relao:
Ri = xi / m, i = 1,2,...
x0 = 27
x1 = (17 . 27 + 43) mod 100 = 502 mod 100 = 2
R1 = 2 / 100 = 0,02
5
.
.
1.3.2 Mtodo Congruente Linear Multiplicativo (MCLM)
Uma das derivaes do MCL o mtodo congruente linear multiplicativo. Neste mtodo, o
valor do incremento b = 0. Desta forma, o gerador fica reduzido a seguinte expresso:
x n = ax n 1 mod m
Exemplo 2
i xi xi xi xi
0 1 2 3 4
1 13 26 39 52
2 41 18 59 36
3 21 42 63 20
4 17 34 51 4
5 29 58 23
6 57 50 43
7 37 10 47
8 33 2 35
9 45 7
10 9 27
11 53 31
12 49 19
13 61 55
14 25 11
15 5 15
16 1 3
Tabela 1: Variao dos perodos para vrias sementes
Observa-se que com as sementes mpares (1 e 3), possvel a obteno de perodos com 16
elementos (P = m/4 = 64/4 = 16). Para as sementes pares (2 e 4), os perodos obtidos tm
comprimentos 8 e 4, respectivamente. Observa-se, tambm que a obedece a frmula 8k + 5,
com k = 1, exigida para o alcance de perodos mximos.
6
propriedades, necessrias a um bom gerador, algumas propriedades secundrias tambm so
requeridas. Dentre estas se salienta a da mxima densidade, isto , a necessidade de que os
valores assumidos por Ri, i = 1, 2, ..., no deixem grandes folgas ou buracos no intervalo [0,
1]. O espao entre os valores de Ri deve ser uniforme e mnimo. No caso do gerador deste
exerccio, tais folgas so demasiadamente grandes. Os valores gerados para x0 = 1 so {1, 5,
9, 13,...,53, 57, 61}. A folga neste caso pode ser calculada pela relao entre dois valores
consecutivos, isto : folga = 5/64 - 1/64 = 0,0625. Este um valor considerado muito grande
para a maioria das aplicaes. O gerador exemplificado no vivel para, praticamente,
qualquer tipo de aplicao devido ao curto perodo e a grande folga. O exemplo, no entanto,
demonstra os cuidados necessrios para com os parmetros dos geradores.
Exemplo 3
Um exemplo proposto por Banks (1996), usando o formato decimal, (de mais fcil
compreenso), ilustra, por analogia, tal mecanismo. Assume-se que m = 102 = 100, a = 19, c
= 0 e x0 = 63 e gera-se uma srie de nmeros aleatrios usando a equao do MLC.
x0 = 63
x1 = (19)(63) mod 100 = 1197 mod 100 = 97 (1197/100 = 11,97. k=2 dgitos direita = 97)
x2 = (19)(97) mod 100 = 1843 mod 100 = 43
x3 = (19)(43) mod 100 = 817 mod 100 = 17
.
.
No caso m uma potncia de 10, isto , m = 10k e a operao do mdulo (ou de determinao
do resto) realizada tomando-se os k dgitos (decimais neste caso), mais direita.
Para encerrar esta seo, apresenta-se um exemplo de um gerador ainda em uso em muitas
rotinas para a gerao de nmeros aleatrios, presentes em programas comerciais. Os valores
dos parmetros satisfazem as condies para permitir P = m - 1 (maior do que 2 bilhes). Os
valores dos parmetros so: m = 231 - 1 = 2.147.483.647 (que um nmero primo), a = 75 =
16.807 e c = 0. A semente x0 = 123.456. Os primeiros nmeros gerados sero:
7
x3 = (75)(559.872.160) mod (231 - 1) = 1.645.535.613
R3 = 1.645.535.613 / 231 = 0,7662
.
.
Observe-se que nesta rotina a diviso feita por m + 1, no lugar de m. No entanto, para
grandes valores de m o efeito insignificante.
Duas precaues importantes devem ser consideradas quando da implementao das rotinas
computacionais referentes aos geradores aqui mencionados. A primeira delas diz respeito s
propriedades dos mtodos. Todo o processo computacional envolvido deve garantir tais
propriedades. Para tanto, toda a computao deve ser feita de forma exata, sem
arredondamentos. Em outras palavras, isto significa trabalhar com aritmtica inteira sem erros
de excesso ou estouro de capacidade (overflow). Em algumas linguagens a computao
realizada com nmeros reais. Neste caso, os cuidados devem recair sobre os possveis
arredondamentos, os quais podem causar considerveis redues no perodo.
Exemplo 4
O produto de axn-1 pode ser to grande quanto 16.807 x 2.147.483.647 1.03 x 245. A
implementao deste gerador usando aritmtica inteira produzira um overflow, a menos que o
processador suporte inteiros de 46 bits ou mais. Neste caso, a implementao do mtodo de
Schrage, feita da seguinte maneira:
8
a = 16.807
m = 2.147.483.647
q = m div a = 2.147.483.647 div 16.807 = 12.7773
r = m mod a = 2.147.483.647 mod 16.807 = 2.836
Jain (1991) apresenta uma rotina em PASCAL para este mtodo, a qual reproduzida abaixo:
____________________________________________________
FUNCTION Random (VAR x: INTEGER) : REAL;
CONST
a = 16807; (* Multiplicador *)
m = 2147483647; (* Mdulo *)
q = 127773; (* m div a *)
r = 2836; (* m mod a *)
VAR
x_div_q, x_mod_q, x_new: INTEGER;
BEGIN
x_div_q := x DIV q;
x_mod_q := x MOD q;
x_new := a* x_mod_q - r* x_div_q;
IF x_new > 0 THEN x := x_new ELSE x := x_new + m;
Random := x/m;
END;
_____________________________________________________
Segundo Jain (1991), esta rotina pode ser implementada em computadores cujo maior inteiro
suportado seja 231 - 1 ou maior do que isso. O mesmo autor apresenta ainda uma rotina para
nmeros reais, caso o maior inteiro suportado pelo sistema seja menor do que o especificado.
Um bom teste para uma rotina que implemente este mtodo, calcular o valor de x10.000
iniciando com x0 = 1. Uma correta implementao chegar ao valor 1.043.618.065.
9
A literatura sobre o assunto reporta a existncia de pelo menos cinco mtodos bsicos
voltados para a gerao de amostras aleatrias:
1. Transformao Inversa;
2. Transformao Direta;
3. Convoluo;
4. Aceitao/Rejeio;
5. Propriedades Especiais;
O mtodo a ser empregado na gerao das variveis aleatrias depende do tipo de distribuio
e da eficincia que se est buscando no processo. Sobre as distribuies que sero tratadas a
seguir, ora se far uso de um ora de outro mtodo, conforme os mesmos aparecem na
literatura, reportando os dois critrios acima expostos. Neste texto introdutrio ao assunto, se
prefere no detalhar os mtodos, em particular, mas mostrar a forma como se apresentam,
quando empregados na obteno de variveis aleatrias que seguem esta ou aquela particular
distribuio de probabilidades.
x
p ( x ) = P( X = x ) = e x = 0,1,2, ..., > 0
x!
1. Fazer n = 0 e P =1;
2. Gerar um nmero aleatrio Rn+1 e substituir P por P.Rn+1;
3. Se, P < e , aceitar X = n, caso contrrio, rejeitar n atual, fazer n = n +1, e retornar
aos procedimentos no passo 2.
A idia bsica por traz do mtodo da Aceitao/Rejeio, gerar um nmero aleatrio e testar
uma determinada condio de aceitao. Caso esta condio seja satisfeita, o valor gerado
deve ser aceito. Caso contrrio, os passos devem ser repetidos. Verifica-se, claramente, a
necessidade de se gerar mais nmeros aleatrios do que o efetivamente utilizado, uma vez
que, nem sempre os valores das variveis aleatrias geradas, satisfaro condio necessria.
Abaixo um exemplo.
Exemplo 5
10
Gerar dois nmeros, segundo uma distribuio de Poisson, com = 0,2. Primeiramente,
computa-se o valor de e = e 0,2 = 0,8187 . Na seqncia, obtm-se um conjunto de nmeros
aleatrios e se iniciam os procedimentos estabelecidos nos passos de 1 a 3 anteriormente
firmados, os quais so apresentados na tabela 2.
Passo Gerao de P, n e X
Gerao do 1 n = 0, P = 1
primeiro valor 2 R1 = 0,4357; P = 1.R1 = 0,4357
3 como P = 0,4357 < e-0,2 < 0,8187; aceita-se X = 0
1-3 R1 = 0,4146 leva a: X = 0
1 n = 0, P = 1
2 R1 = 0,8353; P = 1.R1 = 0,8353
3 como P e ; rejeita-se n = 0 e retorna-se ao
passo 2 com n = 1
Gerao do 2 R2 = 0,9952; P = P.R2 = 0,8353.0,9952 = 0,8313
segundo valor
3 como P e ; rejeita-se n = 1 e retorna-se ao
passo 2 com n = 2
2 R3 = 0,8004; P = P.R3 = 0,8313. 0,8004 = 0,6654
3 como P = 0,6654< e-0,2 < 0,8187; aceita-se X = 2
Tabela 2: Valores para a varivel aleatria Poisson
Como pode ser observado nos resultados, foram necessrios 4 nmeros aleatrios para gerar 2
variveis de Poisson (X = 0 e X = 2). Numa longa simulao, com cerca de 1000 valores
Poisson com = 0,2, sero necessrios, aproximadamente 1.000( +1) ou 1200 nmeros
aleatrios. Segundo Schrage (1987) e Law (1991), para valores maiores do que =15, a
ineficincia computacional muito grande e uma aproximao pela distribuio normal torna-
se computacionalmente mais adequada.
Uma distribuio emprica pode ser tanto discreta quanto contnua. Sua aplicao costuma
estar associada impossibilidade de determinao da distribuio terica de probabilidades
da varivel aleatria sob estudo. Neste caso, ela usada como uma aproximao da
verdadeira distribuio.
Para gerar uma varivel aleatria que tenha um comportamento semelhante ao determinado
por distribuio emprica discreta conhecida, necessrio que, inicialmente, se determine as
freqncias relativas acumuladas da distribuio. Para exemplificar os procedimentos,
imagine que uma amostragem realizada sobre determinada varivel aleatria discreta tenha
resultado nos valores da tabela 3:
x p(x) F(x)
0 0,50 0,50
1 0,30 0,80
2 0,20 1,00
Tabela 3: Valores da varivel aleatria x e de suas probabilidades
11
A funo densidade de probabilidade (fdp), p(x), da varivel dada por:
0 x<0
0,5 0 x <1
F (x ) =
0,8 1 x < 2
1,0 2x
Uma vez que tais informaes estejam disponveis, aplica-se o mtodo da transformao
inversa que, neste caso, torna-se um processo de pesquisa em uma tabela de valores, num
procedimento muito semelhante ao do mtodo de Monte Carlo.
Exemplifica-se esta aplicao considerando a varivel aleatria x da tabela 1.4. Suponha que
se tenha gerado um nmero aleatrio R1 = 0,73. Traando um grfico da funo densidade de
probabilidade acumulada, verifica-se que para F(x) = R1, o correspondente valor de x ser 1,
isto , X = 1 (ver Grfico 1). Logo, graficamente verifica-se que R1 = 0,73 transformado em
X = 1.
F(x)
0,73
0,5
X1 = 1
0 1 2 3 x
Grfico 1: Transformao de R1 = 0,73 em X = 1
i Entrada ri Sada xi
1 0,50 0
2 0,80 1
3 1,00 2
12
Tabela 4: Tabela de gerao dos valores de X
F ( x i 1 ) = ri 1 < R ri = F ( x i )
ento X1 = xi. Como r1 = 0,5 < R1 = 0,73 r2 = 0,8 ento X1 = x2 = 1. O esquema de gerao
resumido como segue:
0, R 0,5
X = 1, 0,5 < R 0,8
2, 0,8 < R 1,0
Uma varivel aleatria x tem distribuio uniforme sobre um intervalo [a, b], se sua funo
densidade de probabilidade (fdp) dada por:
1
f (x) = axb
b a
A tcnica mais utilizada para a obteno de uma varivel aleatria uniformemente distribuda
a da transformao inversa. A frmula a seguinte:
x = a + (b a ) R
1. Gerar R;
2. Calcular x = a + (b a ) R .
Exemplo 6
Gerar trs valores de uma distribuio uniforme no intervalo [10, 50]. Usando uma tabela de
valores aleatrios, obtm-se R1 = 0,932; R2 = 0,105 e R3 = 0,687. Aplicando-se o mtodo
proposto obtm-se os resultados mostrados na Tabela 5:
13
Passo Valor de Ri e de xi
1 R1 = 0,932
2 x1 = 10 + (40)0,932 = 47,28
1 R2 = 0,105
2 x2 =10 + (40)0,105= 14,2
1 R3 = 0,687
2 x3 = 10 + (40)0,687= 37,48
Tabela 5: Valores para a varivel aleatria uniforme
Uma varivel aleatria x tem uma distribuio triangular se sua fdp dada por:
2( x a )
( b a )( c a ) , axb
f ( x ) = 2( c x )
, b<xc
( c b )( c a )
Pelo mtodo da transformao inversa facilmente se obtm a frmula para gerar amostras com
distribuio triangular. A varivel x com esta distribuio obtida por:
ba
a + R (b a )(c a ) , se 0 R
ca
x= ba
c (1 R )(c b)(c a ) , se < R 1
ca
Exemplo 7
Gerar trs valores de uma distribuio triangular com parmetros (0, 1, 2). Usando uma tabela
de valores aleatrios, obtm-se R1 = 0,544; R2 = 0,747 e R3 = 0,449. Aplicando o mtodo
proposto chega-se a:
1
2R 0 R
x= 2
1
2 2(1 R ) < R 1
2
Passo Valor de Ri e de xi
1 R1 = 0,544
2 x1 = 2- 2(1 0,544 ) = 1,045
1 R2 = 0,747
14
2 x2 =2- 2(1 0,747 ) = 1,288
1 R3 = 0,449
2 x3 = 2(0,449) = 0,947
Uma varivel aleatria x tem uma distribuio exponencial se sua fdp dada por:
f ( x ) = e x , x 0
xi = ln(1 Ri )
Uma vez que (1 - Ri), da mesma forma que Ri, possui distribuio uniforme no intervalo [0,
1], pode-se substituir (1 - Ri) por Ri na expresso acima.
Exemplo 8
Gerar valores de uma distribuio exponencial com parmetro =1. De acordo com o mtodo
exposto acima, cada Ri gera um correspondente xi conforme mostrado na Tabela 7.
i 1 2 3 4 5
Ri 0,1306 0,0422 0,6597 0,7965 0,7696
xi 0,1399 0,0431 1,0779 1,5920 1,4679
Tabela 7: Valores para a varivel aleatria exponencial
Uma varivel aleatria x tem uma distribuio normal se sua fdp dada por:
( x)2
1
f ( x) = e 2 2
, < x <
2
O mtodo utilizado para a obteno de uma varivel normal padronizada, isto , com = 0 e
= 1, conhecido como mtodo de Box-Muller. Embora existam outras tcnicas de obteno
15
de variveis normalmente distribudas, este mtodo facilmente programvel e apresenta
bons resultados. Considere duas variveis normais padronizadas, Z1 e Z2, as quais
correspondem s coordenadas de um ponto no plano (Grfico 2).
Z1=B cos
Z2=B sen
Aps algumas transformaes matemticas, possvel demonstrar que o raio B pode ser
obtido por:
1
B = (2 ln R ) 2
Z 1 = 2 ln R1 cos(2R2 )
Z 2 = 2 ln R1 sen(2R2 )
Exemplo 9
Considerando as equaes acima, gerar dois valores com distribuio normal padronizada a
partir de R1 = 0,1758 e R2 = 0,1489.
Para a obteno de variveis aleatrias normais xi, com mdia e desvio-padro , deve-se
aplicar a transformao xi = + Zi aos valores da normal padronizada. Por exemplo, para
16
transformar os valores obtidos em variveis aleatrias normais com = 10 e = 2, calcula-
se:
x1 = 10 + 2.(1,11) = 12,22
x2 = 10 + 2.(1,50) = 13,00
1.5 Sumrio
Referncias Bibliogrficas
17