geração de números aleatórios a partir de mapas - Uni

Propaganda
66
GERAÇÃO DE NÚMEROS ALEATÓRIOS A PARTIR DE MAPAS CAÓTICOS
DETERMINISTAS
Antônio Carlos da Silva Filho (UNI-Facef)
Irfley Andrade de Oliveira (UNI-Facef)
Marco Dimas Gubitoso (IME-USP)
1 INTRODUÇÃO
As origens da simulação estocástica 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 linhas
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 π .
William Sealy Gossett, que trabalhou com o pseudônimo de "Student",
realizou experimentos de amostragem em Matemática Estatística e descobriu a
célebre distribuição-t. Gossett trabalhou com números aleatórios em seus
experimentos e, para gerar os números, utilizou o método Top-Hat (rotação de
discos). A partir dessa época a quantidade de números aleatórios necessários nos
experimentos era cada vez maior. Passou-se a estocar os números em tabelas que
eram publicadas para uso dos que delas precisavam. Essa foi uma idéia de L. H. C.
Tippet que, em 1927, publicou uma tabela com 40000 dígitos extraídos
aleatoriamente de dados do censo americano. Ela foi publicada em "Random
Sampling Numbers", Tracts for Computers, nº 15, Cambridge University Press, New
York, 1927.
A quantidade de números aleatórios necessários nos experimentos continuou
a se expandir. Por volta de 1930, a aritmética foi sugerida para o cálculo de números
aleatórios. John von Neumann, em 1946, propôs o primeiro algoritmo gerador de
números pseudo-aleatórios, 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.
67
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
livro “Numerical Recipes” (PRESS, 1986) e em vários artigos espalhados pela
literatura especializada (EICHENAUER-HERRMANN, 1993, 1995; L'ECUYER, 1990,
1994; TEZUKA, 1995).
Utilizando aritmética, foi D. H. Lemer em 1949 que primeiro introduziu a idéia
do método de congruência linear que utiliza uma equação de congruência para gerar
os números.
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 Carlo 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).
Com o avanço da informática, os cientistas começaram a utilizar o
computador para gerar e armazenar números aleatórios, baseados em métodos
deterministas como o de Lemer, e as tabelas perderam a sua utilidade.
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”. Trata-se, em um sentido amplo, da idéia geral da Matemática
Aplicada. Um conjunto de equações diferenciais pode, por exemplo, simular o vôo de
um míssil. Mas, no contexto deste projeto, simulação refere-se à imitação de
processos aleatórios através de métodos de Monte Carlo. Um exemplo clássico é o
do movimento de um nêutron dentro das paredes de um reator, sendo o zigue-zague
do seu caminho imitado pelo chamado “passeio aleatório”.
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. Assim, o valor médio de uma função f(x) sobre um intervalo
68
pode ser estimado a partir da sua média sobre um número finito de pontos
aleatoriamente escolhidos no intervalo. Como a média de f(x) é, de fato, uma
integral, isto nos leva à aplicação dos métodos de Monte Carlos para uma integração
aproximada. Como um segundo exemplo, a localização do centro de gravidade de
um conjunto de N pontos aleatórios sobre o círculo unitário, pode ser encontrado
estudando algumas centenas ou milhares de pontos como amostra.
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.
2 MATERIAIS E MÉTODOS
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. Em uma seqüência de números aleatórios, cada
elemento é independente dos demais, e cada subseqüência é também independente
das demais, sendo impossível qualquer tipo de previsão. De um conjunto de
números a serem gerados aleatoriamente, cada elemento é igualmente provável de
ser escolhido, por exemplo, em um lançamento de um dado (cúbico), o conjunto de
números possíveis de se ocorrer é {1,2,3,4,5,6}, cada elemento desse conjunto é
igualmente provável de ocorrer, ou seja, a probabilidade de ocorrer qualquer número
é
1
= 0,1 6 , desta forma uma seqüência de números aleatórios tem um distribuição
6
uniforme.
Sobre os geradores aritméticos, 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,
69
repetindo, então a seqüência a partir daí, deixando de obter números
verdadeiramente aleatórios, pois se instala uma periodicidade. Como um exemplo
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!
Com a utilização desses geradores determinísticos têm-se vantagens
evidentes: fica mais fácil corrigir programas de simulação, quando surgir algum tipo
de erro, se a execução deste programa puder ser exatamente repetida, até que se
encontre o ponto onde estiver ocorrendo o problema; além disso, em problemas
onde se tem a comparação de abordagens alternativas, esta comparação pode ser
feita com mais precisão se ambas forem simuladas sob as mesmas influências
aleatórias externas.
Mas prendendo-se às propriedades dos números verdadeiramente aleatórios,
o objetivo é regularizar as seqüências de números pseudo-aleatórios de modo que
venha a ser mais uniformemente distribuída e assim tornar os elementos da
seqüência independentes dos demais, e conseqüentemente as subseqüências
independentes das demais também.
O procedimento é bem simples. Tomam-se números “aleatórios” gerados por
um processo determinista caótico, como o do mapeamento logístico, e, após a
multiplicação por uma potência de dez, considera-se apenas a parte decimal do
número resultante. Chamaremos de fator de multiplicação a estas potências de 10.
3 RESULTADOS
Os resultados que serão apresentados a seguir originam-se da aplicação do
algoritmo explicitado acima no gerador de números pseudo-aleatórios do MatLab,
que cria números aleatórios a partir da função rand.
70
De uma seqüência de números aleatórios gerados por rand, os gráficos de
retorno que seguem criam pontos associando cada elemento em função do seu
antecessor.
Na figura 3.1, foram gerados 270 pontos.
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
Figura 3.1 – Gráfico de retorno com 270 pontos gerados aleatóriamente.
Na figura 3.2, foram gerados 2845 pontos.
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
71
Figura 3.2 – Gráfico de retorno com 2845 pontos gerados aleatóriamente.
Na figura 3.3, foram gerados 29347 pontos.
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
Figura 3.3 – Gráfico de retorno com 29347 pontos gerados aleatóriamente.
De uma seqüência de números aleatórios gerados através de uma fórmula de
recorrência logística, os gráficos de retorno que seguem criam pontos associando
cada elemento em função do seu antecessor.
Na figura 3.4, foram gerados números aleatórios até se obter 500 pontos para
o mapeamento logístico (figura 3.4).
72
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
Figura 3.4 – Gráfico de retorno com 500 pontos gerados pelo mapeamento logístico.
Na figura 3.5, foram gerados 3603 pontos.
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
73
Figura 3.5 – Gráfico de retorno com 10.000 pontos gerados pelo mapeamento
logístico.
Frequência de pontos, em cada um dos dez intervalos
em que se dividiu o intervalo [0, 1], para o mapeamento logistico
Total de pontos = 10.000
22
20
18
frequência
16
14
12
10
8
6
1
2
3
4
5
6
intervalos de 0 a 1
7
8
9
10
Figura 3.6 – Gráfico com a frequências em cada intervalo de um total de 10 intervalos
em que foi dividido o intervalo [0, 1]. 10.000 pontos gerados pelo mapeamento logístico.
17
16
15
14
13
12
11
10
9
8
1
2
3
4
5
6
7
8
9
10
Figura 3.7 – Gráfico com a frequências em cada intervalo de um total de 10 intervalos
em que foi dividido o intervalo [0, 1]. 10.000 pontos gerados pelo mapeamento logístico e
fator de multiplicação igual a 100.
74
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
Figura 3.8 – Gráfico de retorno com 10.000 pontos gerados pelo mapeamento
logístico e fator de multiplicação igual a 100.
10.8
10.6
10.4
10.2
10
9.8
9.6
9.4
9.2
1
2
3
4
5
6
7
8
9
10
Figura 3.9 – Gráfico com a frequências em cada intervalo de um total de 10 intervalos
em que foi dividido o intervalo [0, 1]. 10.000 pontos gerados pelo mapeamento logístico e
fator de multiplicação igual a 100.000.
75
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
Figura 3.10 – Gráfico de retorno com 10.000 pontos gerados pelo mapeamento
logístico e fator de multiplicação igual a 100.000.
4 ANÁLISE E CONCLUSÃO
76
De acordo com os gráficos obtidos, podemos verificar que os pontos se
espalham uniformemente pelo plano. Podemos então concluir que, evidentemente,
os números da seqüência regularizada estão mais uniformemente espalhados que
os da seqüência original, e que se analisarmos cada elemento em relação aos
demais verificamos que não existe correlação entre eles. E ainda que uma
subseqüência da seqüência regularizada também é independente das demais.
Para aplicações em que necessitam de uma seqüência de números
verdadeiramente aleatórios, esse algoritmo pode, a partir de um gerador caótico
determinístico, regularizar a seqüência gerada por ele, de tal forma que a seqüência
fique mais uniformemente distribuída e com os elementos independentes,
aproximando assim das propriedades dos números verdadeiramente aleatórios, o
que vai melhorar o resultado da aplicação em relação do uso de uma seqüência
pseudo-aleatória.
REFERÊNCIAS
BLUM, L.; BLUM, M.; SCHUB, M. A simple unpredictable pseudo random number
generator. SIAM Journal on Computing, v. 15(2), p. 364-383, 1986.
DORICIO, J. L. Números Randômicos e Aplicações. Disponível em:
br.geocities.com/josedoricio/documentos/RandomNumbers1.pdf. Acesso em: 02 de
maio 2008.
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.
77
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.
TEZUKA, S. 1995. Uniform Random Numbers: Theory and Practice. Norwell,
Massachusetts: Kluwer Academic Publishers, 1995. 228 p.
Download