CONSTRUINDO GERADORES DE NÚMEROS …legacy.unifacef.com.br/novo/3fem/Inic...

13
76 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

Transcript of CONSTRUINDO GERADORES DE NÚMEROS …legacy.unifacef.com.br/novo/3fem/Inic...

76

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

77

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

78

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 0 1 2 3 4 5 6 7 8 9

Freqüência 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

0

2)1,0(I

i Nf

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 pseudo-

aleató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. Forma-

se, 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

79

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

80

80

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

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:

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:

0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

81

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:

1 2 3 4 5 6 7 8 9 100

5

10

15

20

25

30

intervalos

Por

cent

agem

de

pont

os

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.

82

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:

-1.5 -1 -0.5 0 0.5 1 1.5-0.4

-0.3

-0.2

-0.1

0

0.1

0.2

0.3

0.4

x

y

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

83

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:

1 2 3 4 5 6 7 8 9 100

5

10

15

20

25

30

intervalos

porc

enta

gem

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:

84

84

-1.5 -1 -0.5 0 0.5 1 1.5-1.5

-1

-0.5

0

0.5

1

1.5

x(n-1)

x(n)

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:

85

85

-1.5 -1 -0.5 0 0.5 1 1.5-1.5

-1

-0.5

0

0.5

1

1.5

x(n-2)

x(n)

Fig. 7 Diagrama de retorno, com k=2.

Já para k=10, obtemos:

-1.5 -1 -0.5 0 0.5 1 1.5-1.5

-1

-0.5

0

0.5

1

1.5

x(n-10)

x(n)

Fig. 8 Diagrama de retorno, com k=10.

86

86

Para k=20, obtemos a figura abaixo:

-1.5 -1 -0.5 0 0.5 1 1.5-1.5

-1

-0.5

0

0.5

1

1.5

x(n-20)

x(n)

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.

87

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. 375-

384, 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.

88

88

TEZUKA, S. 1995. Uniform Random Numbers: Theory and Practice. Norwell,

Massachusetts: Kluwer Academic Publishers, 1995. 228 p.