construindo geradores de números aleatórios a partir - Uni

Propaganda
76
CONSTRUINDO GERADORES DE NÚMEROS ALEATÓRIOS A
PARTIR DE MAPAS CAÓTICOS DETERMINISTAS
Ana Cláudia Lima (Uni-FACEF)
Antonio Carlos da Silva Filho (Uni-FACEF)
INTRODUÇÃO
As origens da simulação estocática podem ser rastreadas até uma
experiência realizada no século XVIII por Georges Louis Leclerc, Conde de Buffon.
Leclerc jogava, aleatoriamente, uma agulha sobre um quadro cheio de linha
paralelas desenhadas nele. A partir de suas observações, ele derivou a
probabilidade de que a agulha interceptasse uma linha. Pouco depois, Pierre Simon
de Laplace viu neste experimento uma maneira de obter uma estimativa estatística
para o número π.
O método de solução numérica de problemas que se baseia na simulação
usando variáveis aleatórias é conhecido como Método de Monte Carlo. Sua origem
data de 1949, com a publicação do artigo “The Monte Carlo method”
(METROPOLIS, 1949). A denominação do método provém do nome da cidade do
principado de Mônaco, famosa pelo cassino homônimo. O princípio do Método de
Monte Carlos já era conhecido antes da publicação do artigo de Metropolis: era
utilizado, por exemplo, no tratamento de dados de amostras aleatórias em
estatística. Mas a sua ampla aplicação não era viável antes do aparecimento dos
computadores eletrônicos (FISHMAN, 1996).
Números que são produzidos por algum processo de natureza probabilista
são conhecidos como números aleatórios. Exemplos de tais processos são: sorteio
de bolas numeradas numa loteria, roletas nos cassinos, lançamento de moedas,
lançamento de dados, etc. Um dos problemas científicos mais importantes começou
a se manifestar após o surgimento, na década de cinqüenta, dos primeiros
computadores eletrônicos, pois ficou evidente a necessidade de dispor de grandes
quantidades destes números num curto espaço de tempo. O que, à primeira vista,
poderia parecer uma solução natural para esta questão, revelou-se pouco prático: o
armazenamento prévio, na memória do computador, de imensas quantidades destes
76
77
números, gerados por qualquer dos processos verdadeiramente aleatórios descritos
acima. A exigência de muito espaço disponível nas memórias dos computadores,
principalmente nos primeiros tempos da era computacional, constituiu o empecilho
mais sério para sua utilização.
Assim, foram desenvolvidos métodos matemáticos para a geração, através de
processos deterministas, de números “aleatórios” dentro do próprio computador.
Havia vantagens evidentes neste tipo de procedimento: ficava mais fácil corrigir
programas de simulação, quando surgia algum tipo de erro, se a execução deste
programa pudesse ser exatamente repetida, até que se encontrasse o ponto onde
estivesse ocorrendo o problema; além disso, em problemas onde havia a
comparação de abordagens alternativas, esta comparação poderia ser feita com
mais precisão se ambas fossem simuladas sob as mesmas influência aleatórias
externas.
Como são feitas as simulações? Os algoritmos manipulados no computador
vão
gerar
uma
seqüência
de
números
matematicamente
calculada,
deterministamente prevista, conforme uma regra prefixada. Cada número da
seqüência é usado para gerar o seguinte; logo, é necessário fixar um número para
começar a seqüência: este número é conhecido como “semente”. Obviamente, há
aí uma limitação: como trabalhamos com um número finito de casas decimais, após
algum tempo poderemos recair em algum dos números previamente gerados,
repetindo, então a seqüência a partir daí, deixando de obter números
verdadeiramente aleatórios, pois se instala uma periodicidade. Como um exempo
simples, se estamos obtendo números entre 0,000 e 1,000, com uma precisão de
três casas decimais, mesmo que os primeiros mil e um números sejam diferentes, o
milésimo-segundo repetirá, necessariamente, algum dos anteriores. Mas pode ser
que esta repetição aconteça antes desta posição.
Ocorre que, para propósitos práticos, os números são gerados com várias
casas decimais, não sendo necessário usar toda a seqüência deles até que algum
se repita. Se usarmos oito casas, seremos capazes de gerar até cem milhões de
números diferentes!
Como testar se os números gerados são uniformemente espalhados pelo
intervalo [0, 1]? A literatura da área está repleta de testes (L'ECUYER, 1992), sendo
os mais importantes o “The Scalable Parallel Random Number Generators Library
(SPRNG)” e os testes DIEHARD (MARSAGLIA, 1996). Este trabalho não se propõe
77
78
a construir algum novo gerador de números aleatórios, mas a construir um algoritmo
que, a partir dos números gerados por qualquer gerador existente, redistribua os
números gerados de maneira a preencher uniformemente o intervalo [0, 1]. Os
números assim redistribuídos serão, posteriormente, submetidos aos testes
DIEHARD. Devido ao fato de os números estarem uniformemente redistribuídos,
espera-se bons resultados com estes testes.
1 MATERIAIS E MÉTODOS
Imagine-se uma caixa com dez bolas numeradas de 0 a 9. Sorteia-se uma
bola e, após repô-la na caixa, faz-se um novo sorteio. Repetindo-se o processo um
grande número de vezes, espera-se chegar às freqüências do quadro abaixo:
Número
Freqüência
0
1
2
3
4
5
6
7
8
9
0,1
0,1
0,1
0,1
0,1
0,1
0,1
0,1
0,1
0,1
Nem sempre a lei expressa na tabela acima ocorre nos experimentos
aleatórios do mundo real. Assim, criaram-se testes estatísticos especiais, que
partirão da hipótese de que as freqüências dos dígitos sorteados segue a tabela
acima. Um dos testes mais simples baseia-se na soma:
9
∑( f
I =0
i
− 0,1 N ) 2
onde N é o número de algarismos sorteados fi é a quantidade de vezes em que o
algarismos i foi sorteado. A teoria da probabilidades permite deduzir em que limites
deverá estar compreendida esta soma.
J. von Neumann propôs o primeiro algoritmo gerador de números pseudoaleatórios no computador, tendo-o chamado de “método do meio dos quadrados”. O
seguinte exemplo será ilustrativo deste algoritmo (BLUM, 1986):
“Seja uma semente, um número com quatro casas decimais dado, como o
número xo = 0,9876. Eleva-se xo ao quadrado, obtendo-se xo2 = 0,97535376. Formase, a seguir, o número x1 com as quatro casas decimais do meio: x1 = 0,5353.
Repete-se em seguida o procedimento, obtendo-se: x12 = 0,28654609
e
x2 =
0,6546, x3 = 0,8501, x4 = 0,2670, x5 = 0,1289, etc. Constatou-se, porém, uma
preponderância de pequenos valores entre os números gerados por este método,
levando à elaboração de diversos outros algoritmos. Vários deles estão descritos no
78
79
livro “Numerical Recipes” (PRESS, 1986) e em vários artigos espalhados pela
literatura especializada (EICHENAUER-HERRMANN, 1993, 1995; L'ECUYER, 1990,
1994; TEZUKA, 1995).
Quais são, então, as principais aplicações científicas destes geradores?
Scheid (1989) as divide em duas categorias: simulação e amostragem. Simulação
refere-se aos métodos que fornecem imitações aritméticas para fenômenos “reais”.
Já a amostragem refere-se aos métodos de dedução das propriedades de um
grande conjunto de elementos através do estudo de um pequeno subconjunto
aleatório do mesmo.
Deve-se notar que o que pode ser considerado aleatório para uma aplicação
pode não o ser para outra. Apesar disto, podemos pensar em casos ideais; para
este limite, existem alguns testes estatísticos e os bons geradores de números
“aleatórios” deveriam passar por estes testes.
O que este projeto propõe é a construção de geradores de números
aleatórios. Tal construção será feita através da combinação de mapas caóticos,
simples de serem gerados, mesmo numa calculadora de mão. Parte do trabalho
será gasto na construção de algoritmos que explicitem este procedimento e parte no
teste dos resultados dos algoritmos. Knuth (1981) descreve um conjunto de testes
considerados como “padrões” para os geradores de números aleatórios. Marsaglia
(1996) propôs uma bateria de testes denominados DIEHARD, que podem ser
considerados mais exigentes do que os testes clássico de Knuth (1981). Este último
conjunto de testes será o que será utilizado.
3 RESULTADOS
Um mapa caótico, como o Mapa Logístico
xn+1 = kxn(1 – xn)
não produz séries numéricas, mesmo na região em que o parâmetro k tenha um
valor que produza o caos, com as características das séries aleatórias. Isto pode ser
exemplificado nos dois diagramas construídos com números gerados no
computador: (a) no primeiro gráfico, os números são obtidos a partir de um gerador
79
80
de números aleatórios presente no programa Matlab; (b) no segundo gráfico, os
números são obtidos a partir do mapeamento logístico acima, com k igual a 4.
Espera-se, para um bom gerador, que preencha uniformemente o espaço do gráfico,
o que não ocorre para o Mapa Logístico.
(a) Diagrama para números obtidos com um gerador de números aleatórios:
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Fig. 1 Diagrama de retorno para uma variável aleatória uniforme.
(b) Diagrama para números obtidos com o Mapa Logístico, para k = 4:
1
0.9
0.8
0.7
0.6
0.5
0.4
0.3
0.2
0.1
0
0
0.1
0.2
0.3
0.4
80
0.5
0.6
0.7
0.8
0.9
1
81
Fig. 2 Diagrama de retorno para o Mapa Logístico.
A frequência com que os números caem em cada um dos dez intervalos de
igual amplitude em que se pode dividir o intervalo [0, 1] varia de acordo com a
quantidade de pontos; para 10.000 pontos obtivemos os seguintes números:
1951
929
742
660
628
663
667
791
890
2079
distribuição que é bastante desigual. Isto pode ser visualizado na figura 3 a seguir:
30
Porcentagem de pontos
25
20
15
10
5
0
1
2
3
4
5
6
intervalos
7
8
9
10
Fig. 3 Porcentagem de pontos em cada um dos dez intervalos iguais em que se
divide o intervalo [0, 1], para 10.000 pontos do Mapa Logístico. A linha azul indica a
porcentagem esperada para variáveis aleatórias uniformemente distribuídas.
81
82
Um outro sistema discreto é o sistema de Hénon, introduzido na literatura pelo
astrônomo francês M. Hénon em 1974. Este é um mapa bidimensional definido pelas
seguintes equações:
Xn+1 = 1 – a(Xn)2 + Yn
Yn+1 = bXn
onde, usualmente: a = 1,4; b = 0,3. Hénon provou que o comportamento deste
sistema depende das condições iniciais: ou as variáveis vão para o infinito ou para a
estrutura exibida na figura 4 a seguir:
0.4
0.3
0.2
y
0.1
0
-0.1
-0.2
-0.3
-0.4
-1.5
-1
-0.5
0
x
0.5
1
1.5
Fig. 4 Mapa de Hénon para a = 1,4 e b = 0,3.
O Mapa de Hénon é caótico no sentido de que as sequências de pontos
obtidos para ele serão diferentes para diferentes condições iniciais. Apesar disto, a
aparência geral do mapa não se altera se mudarmos estas condições. Quando
procuramos as frequências com que os valores da variável x se apresentam ao
82
83
dividirmos o intervalo [-1,5; 1,5] em dez subintervalos iguais, encontramos, para um
total de 10.000 pontos, os seguintes valores:
251
689
637
1016
784
853
1829
1675
1621
645
os quais podem ser melhor visualizados na figura 5 a seguir:
30
25
porcentagem
20
15
10
5
0
1
2
3
4
5
6
intervalos
7
8
9
10
Fig. 5 Porcentagem de pontos em cada um dos dez intervalos iguais em que se
divide o intervalo [-1,5; 1,5], para 10.000 pontos do Mapa de Hénon. A linha azul
indica a porcentagem esperada para variáveis aleatórias uniformemente distribuídas.
Mas, o que acontece quando construímos um diagrama de retorno para a
variável x? Se notarmos que, para o Mapa de Hénon, xn-1 e yn são proporcionais,
podemos esperar obter a mesma figura, apenas rodada em relação à original e
dilatada no eixo xn-1, o que, visualmente, pode ser anulado por um reescalonamento
dos eixos. O mesmo se aplica se construirmos um diagrama de retorno para a
variável y. Desta maneira, não é de estranhar que se obtenha, para o diagrama de
retorno do Mapa de Hénon, a figura 6 a seguir:
83
84
1.5
1
x(n)
0.5
0
-0.5
-1
-1.5
-1.5
-1
-0.5
0
x(n-1)
0.5
1
1.5
Fig. 6 Diagrama de retorno para a variável x do Mapa de Hénon.
Uma primeira possibilidade de gerar, a partir de mapas caóticos, números
verdadeiramente aleatórios, é construir uma sequência secundária, a partir da
sequência primária obtida do mapeamento, onde haja um retardo entre os
elementos sucessivos. Este retardo pode ser de um valor, de dois ou, em geral, de k
valores. Assim, por exemplo, a partir da sequência original:
S1 = {a1, a2, a3, ... , an}
obtém-se, com um retardo de k valores, a sequência alterada:
S2 = {a1, a1+k, a1+2k, ... , am}
com m ≤ n.
Assim, com k = 2, obtemos a figura abaixo:
84
85
1.5
1
x(n)
0.5
0
-0.5
-1
-1.5
-1.5
-1
-0.5
0
x(n-2)
0.5
1
1.5
0
x(n-10)
0.5
1
1.5
Fig. 7 Diagrama de retorno, com k=2.
Já para k=10, obtemos:
1.5
1
x(n)
0.5
0
-0.5
-1
-1.5
-1.5
-1
-0.5
Fig. 8 Diagrama de retorno, com k=10.
85
86
Para k=20, obtemos a figura abaixo:
1.5
1
x(n)
0.5
0
-0.5
-1
-1.5
-1.5
-1
-0.5
0
x(n-20)
0.5
1
1.5
Fig. 9 Diagrama de retorno, com k=20.
4 ANÁLISE E CONCLUSÃO
De acordo com os gráficos obtidos, podemos verificar que, pela maneira com
que a sequência foi construída, os pontos se espalham de maneira mais uniforme
pelo plano. Podemos então concluir, numa primeira aproximação, que esta é uma
maneira melhor de gerar números pseudo-aleatórios.
86
87
BIBLIOGRAFIA
BLUM, L.; BLUM, M.; SCHUB, M. A simple unpredictable pseudo random number
generator. SIAM Journal on Computing, v. 15(2), p. 364-383, 1986.
EICHENAUER-HERRMANN, J. Statistical independence of a newclass of inversive
congruential pseudorandom numbers. Mathematics of Computation, v. 60, p. 375384, 1993.
EICHENAUER-HERRMANN, J. Pseudorandom number generation by nonlinear
methods. International Statistical Reviews, v. 63, p. 247-255. 1995.
FISHMAN, G. S. Monte Carlo: Concepts, Algorithms, and Applications. Springer
Series in Operations Research. New York: Springer-Verlag, 1996.
KNUTH, D. E. The Art of Computer Programming, v. 2: Seminumerical Algorithms. 2.
ed. Reading, Massachusetts: Addison-Wesley, 1981. 784 p.
HANSELMAN, Duane; LITTLEFIELD, Bruce. Matlab 6 – Curso Completo. São Paulo:
Prentice Hall, 2003. 676 p.
L'ECUYER, P. Random numbers for simulation. Communications of the ACM. v.
33(10), p. 85-97, 1990.
L'ECUYER, P. Testing random number generators. In Proceedings of the 1992
Winter Simulation Conference, IEEE Press., p. 305-313, 1992.
L'ECUYER, P. Uniform random number generation. Annals of Operations Research,
v. 53, p. 77-120, 1994.
METROPOLIS, N.; ULAM, S. The Monte Carlo Method. J. Amer. Statistical Assoc.,
1949, v. 44, p. 335-341.
MARSAGLIA, George. Diehard: a battery of tests of randomness. 1996. Disponível
em < http://stat.fsu.edu/~geo/diehard.html. (acesso em 20 março 2007).
PRESS, William H. Numerical Recipes. Cambridge: Cambridge University Press,
1986. 818 p.
87
88
TEZUKA, S. 1995. Uniform Random Numbers: Theory and Practice. Norwell,
Massachusetts: Kluwer Academic Publishers, 1995. 228 p.
88
Download