You are on page 1of 4

2007 MCIST OR {RandomNumGen.

doc}
Simulao: gerao de nmeros pseudo-aleatrios
A ideia de gerar sequncias aleatrias atravs dum algoritmo numrico pode
parecer inteiramente inadequada [Ecker & Kupferschmid, 1988]. Os algoritmos do
gnero que se podem implementar num programa de computador so, por definio,
completamente determinsticos e nunca podem, portanto, produzir um efeito aleatrio
de qualquer tipo. Se um computador estiver a funcionar normalmente, oferece
precisamente o mesmo resultado de cada vez que executa uma operao sobre os
mesmos dados. Qualquer sequncia de nmeros gerados por um algoritmo ter, pois,
a propriedade de que u
k+1
pode ser determinado com certeza a partir do conhecimento
de u
1
, u
2
, , u
k
, e no ser, portanto, aleatria, no sentido pretendido. Como pode
ento tal comportamento, perfeitamente previsvel, ser usado para produzir nmeros
utilizveis numa simulao ?
A resposta est em que, na simulao, estamos interessados apenas em
estatsticas de longo prazo. Sob condies adequadas, uma sequncia de nmeros
gerados por um algoritmo pode ter as mesmas propriedades estatsticas que uma
sequncia gerada por um processo aleatrio natural.
Uma sequncia de nmeros que seja gerada por um algoritmo mas seja
intermutvel com outra sequncia verdadeiramente aleatria chamada
pseudo-aleatria.
Uma sequncia de nmeros pseudo-aleatria se qualquer
subsequncia suficientemente curta for intermutvel com uma sequncia
comparvel realmente aleatria.
A nica diferena inevitvel entre uma sequncia aleatria e uma pseudo-
-aleatria que esta ltima se pode repetir e isto justifica a expresso
suficientemente curta na definio. O perodo de repetio do algoritmo deve,
assim, ser mais longo que a sequncia de nmeros necessria simulao.
Geradores de nmeros aleatrios
Feita a distino entre sequncias produzidas por processos aleatrios naturais
e sequncias pseudo-aleatrias produzidas por algoritmos, convencional usar uma
terminologia que ignora essa distino. Assim, um algoritmo para gerao duma
sequncia de nmeros pseudo-aleatrios habitualmente chamado simplesmente
gerador de nmeros aleatrios, sendo comum chamar nmeros aleatrios aos
nmeros das sequncias pseudo-aleatrias, assim como nmero aleatrio a um
elemento da sequncia, embora o conceito de aleatoriedade se aplique
verdadeiramente sequncia como um todo.
H muitos algoritmos para gerar nmeros aleatrios, diferindo na medida em
que exibem as seguintes propriedades desejveis:
Comprimento do perodo de repetio
Independncia estatstica aparente de nmeros sucessivos
Distribuio uniforme
Rapidez de obteno
Repetibilidade (reprodutibilidade)
As propriedades citadas so dificilmente conciliveis, pelo que a seleco dum
gerador conveniente para uma dada simulao pode ser uma tarefa no-trivial.
1. O algoritmo congruencial multiplicativo
o mais simples gerador de nmeros aleatrios.
0. Fixe os parmetros p e m
1. Seja u
0
o nmero inicial, no-nulo e mpar; k = 0
2. u
k+1
= (m u
k
) mod p
3. k k + 1; goto 2
Todos os nmeros intervenientes no algoritmo so inteiros no-negativos. O
parmetro m o multiplicador, p o mdulo e o nmero u
0
a semente. O passo
principal do algoritmo a frmula de recorrncia do Passo 2, sendo, como se sabe,
x mod p = resto da diviso (inteira) de x por p
Se nenhum u
k
for zero, os inteiros que se podem gerar vo de 1 a p


1, logo
(u
k


1) vai de 0 a p


2 e os correspondentes nmeros reais r
k
do intervalo [0,

1]
obter-se-o por r
u
p
k
k
=

1
2
. Para ver como o algoritmo funciona, considere-se o
seguinte exemplo, arbitrando-se p

=

17, m

=

5 e u
0

=

7:
u
1
= (5 7) mod 17 = resto da diviso inteira de 35 17 = 1
u
2
= (5 1) mod 17 = 5
u
3
= (5 5) mod 17 = 8
Continuando o processo, obtm-se:
7, 1, 5, 8, 6, 13, 14, 2, 10, 16, 12, 9, 11, 4, 3, 15,
(R)
7, 1, 5, 8,
Aps R, verifica-se repetio, pelo que o perodo foi de 16 nmeros. (Dir-se- adiante
que p

=

17 foi uma escolha feliz.) O perodo sempre menor que o parmetro p, logo
p deve ser escolhido to grande quanto possvel. Devido a consideraes de
eficincia computacional, se o comprimento de palavra for w bits e fizermos p = 2
w
,
a multiplicao na frmula de recorrncia d um resultado com comprimento de
palavra dupla, sendo a palavra de mais baixa ordem o produto mdulo 2
w
. Outra
escolha corrente para p 2
w1
. Em qualquer dos casos, o facto de nenhuma diviso
(propriamente dita) ser necessria para efectuar a operao de mdulo d vantagem
sobre outros valores de p.
possvel que o perodo seja muito menor que p, se o multiplicador m for
uma escolha infeliz (veja-se p

=

10, m

=

5, u
0

=

5). Para obter o perodo mximo,
que p


1, m deve ser escolhido de modo a que m


1 seja mltiplo de todos os
nmeros primos submltiplos de p. Por outro lado, para que a sequncia gerada tenha
boas propriedades estatsticas, m deve ser prximo de p e a sequncia usada
numa simulao no deve ser mais longa que a raiz quadrada do perodo de
repetio.
Investigao Operacional Nm. pseudo-aleatrios Pg. 3 de 4


O gerador congruencial multiplicativo mais vulgar, disponvel em Fortran
como sub-rotina RANDU, tem p

=

2
31
=

2

147

483

648 (note-se que este inteiro excede
em 1 o mximo habitualmente representvel) e m

=

2
16
+

3

=

65

539. Estas escolhas
do um perodo de 2
29
(ca. 10
9
) nmeros e o algoritmo corre rapidamente em
computadores com um comprimento de palavra de 32 bits. No entanto, as sequncias
produzidas tm propriedades estatsticas inconvenientes para muitas situaes.
2. Outros geradores de nmeros aleatrios uniformes
Obtm-se propriedades estatsticas melhoradas adicionando uma constante
frmula de recorrncia congruencial multiplicativa:
u
k+1
= (a + m u
k
) mod p
O nmero a o incremento e um algoritmo com esta frmula da recorrncia chama-
-se um gerador congruencial linear ou congruencial misto. Um destes algoritmos
que apresenta boas propriedades estatsticas usa:
p

=

2

147

483

648 =

2
31

m

=

843

314

861 [J p ( / 8) + 5 =
?
843

314

861,5]
a

=

453

816

693 [J
( )
p 3 3 6 =

453

816

692,9]
Outro mtodo com boas propriedades estatsticas o algoritmo GPSS.
Ilustrar-se- com um exemplo de inteiros decimais, embora seja realmente efectuado
em aritmtica binria em computador. Suponhamos que se pretendem gerar nmeros
r
k
entre 0,0000 e 0,9999. Comeamos com um multiplicador m, fixo, e uma semente
u
0
:
m = 5167
u
0
= 3729
O produto ter oito dgitos.
m u
0
= 19 267 743 (19 2677 43)
Os quatro dgitos centrais formaro o primeiro nmero aleatrio r
1
e os quatro dgitos
da direita sero usados como u
1
. Assim,

r
u
1
1
0
7743
=
=
,2677

Em seguida, formado o produto m u
1
, extrados os seus quatro dgitos centrais como
dgitos de r
2
e os quatro dgitos da direita como u
2
e assim por diante.
Um algoritmo aparentado, o do quadrado do meio (mid-square algorithm),
muito simples mas de propriedades insatisfatrias, o que se exemplifica adiante.
Seja r
1

=

9876; r
2
ser formado pelos quatro algarismos centrais do nmero de oito
algarismos que r
1
2
(eventualmente completado esquerda com zeros).
r
2
= {4 algarismos centrais de r
1
2
} = {4 alg. c. de 97 5353 76} = 5353
r
3
= {4 algarismos centrais de r
2
2
} = {4 alg. c. de 28 6546 09} = 6546
Alm da questo da repetio de perodo, poder chegar-se a uma situao como a
seguinte (se fosse r
k

=

2001)
r
k+1
= {4 algarismos centrais de r
k
2
} = {4 alg. c. de 04. 004.0 01} = 40
r
k+2
= {4 alg. c. de 00 001.6 00} = 16
r
k+3
= {4 alg. c. de 00 0002 56} = 2
r
k+4
= {4 alg. c. de 00 0000 04} = 0
e da em diante sempre 0.
3. Aplicao a uma distribuio especificada
Na situao mais frequente de a varivel aleatria a simular no seguir a
distribuio uniforme, a tcnica a utilizar a seguinte, aqui ilustrada com uma
distribuio exponencial de parmetro c.
( ) f x c
cx
=

e com 0 x 1
( ) F x f t t
x
cx
= =


( ) d e
0
1
pois que, obviamente, F(0)

=

0. Invertendo a funo, vem

( )
x
F
c
=

ln 1

Fazendo F

=

u, com u nmero aleatrio uniforme, ser

( )
x
u
c
=

ln 1

ou visto que, se u uniforme em [0, 1], 1


u tambm o , mais simplesmente,
x
u
c
=

ln

Assim, conhecido c, obtida uma srie de nmeros aleatrios u (uniformes), dispor-se-
duma srie de nmeros aleatrios x, com uma distribuio exponencial especificada.
o

You might also like