Você está na página 1de 8

GERAÇÃO DE NÚMEROS ALEATÓRIOS

Álvaro Rodrigues Pereira Júnior

Pós-graduando do Centro de Pesquisa e Desenvolvimento em Eng. Elétrica/UFMG

Maria Eugênia de Almeida Freitas

Professora Assistente do Centro Federal de Educação Tecnológica de Minas Gerais

Wilian Soares Lacerda

Professor Adjunto da Universidade Federal de Lavras

Este artigo aborda a geração de números aleatórios uniformemente distribuídos no intervalo [0,11 utilizando o método do resíduo. A partir desta distribuição, é possível gerar outras distribuições por meio de transformações. Entretanto, é difícil obter uma distribuição perfeita devido às dificuldades computacionais. São apresentados exemplos de geração de números aleatórios com algumas distribuições conhecidas (gaussiana e exponencial) e mostrados os resultados obtidos.

Palavras-chave: aleatório, gauss, uniforme.

This paper approaches the generation of random numbers uniformly distributed in the interval [0,11 using the method of the residue. By this distribution, it is possible to generate other dietrlburlotts using transformations. However, it is difficult to get a perfect distribution due to computational difficulties. Examples of generation of random numbers with some known distributions are presented (gaussian and exponential) and its results are shown.

Key words: random, gauss, uniform.

1

.

INTRODUÇÃO

qualquer fenômeno aleatório envolve a geração de variáveis aleatórias com

 

Qualquer

simulação

em

distribuições pré-definidas. Uma vez

computador de um sistema físico que envolve aleatoriedade deve incluir um

que um modelo de distribuição de probabilidade tenha sido escolhido, um

método para geração de seqüências de números aleatórios. Por exemplo, a

algoritmo para geração da variável aleatória deve ser utilizado.

simulação de sistemas de filas envolve geração de intervalo entre chegadas de clientes e tempo de atendimento de cada cliente. Esses números aleatórios devem satisfazer as propriedades dos processos físicos que eles estão simulando. Simulação em computador envolve a geração de longas seqüências de números aleatór i os.

A simulação computacional

de

2. MÉTODO PARA GERAÇÃO COMPUTACIONAL DE NÚMEROS ALEATÓRIOS

A partir de experimentos físicos aleatórios, pode-se gerar números aleatórios, associando o resultado de cada e x perimento a um número.

Sinergia, São Paulo, v. 3, n . 2, p. 154-161, jul . /dez. 2002 --=::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::=-154

Geração de Númer os Al ea tório s Alvaro R . Pereira ]( mior / Maria Eugênia de A . Freitas / Wilian S. Lacerda

Entretanto,

isto se torna

inviável

A Equação (1) desenvolve

quando é necessár i o gerar uma grande

t omando

o produto

de

a e Zk.J'

quantidade de números aleatórios.

dividindo

por M, e fazendo Zk o resto

Além disto, como não se pode garantir que o experimento será realmente aleatório [ 2] , os números gerados desta maneira também não serão t ota l mente aleatórios . Computacionalmen t e, existem métodos de ge r ação de variáveis aleatórias que são ' baseados em n úmeros aleatórios uniformemente

distribuídos entre zero e um [1]. Estes n úmeros aleatórios com distribuição u niforme podem ser usados para gerar n úmeros com probabilidades arbitrárias. Um problema que ocorre com a geração de um número aleatório no

i ntervalo [ 0,1] , é que

n úmeros neste i ntervalo, porém o computador é limitado a representar números com precisão fin i ta . Outra dificuldade é a necessidade de gerar longas seqüências de números aleatór i os, o que exige muito do processador e da memór i a (geralmente os métodos utilizam recursão e operações de divisão) .

há inf i nitos

2 . 1 Método do resíduo

A abordagem preferida para geração computacional de números aleatórios envolve o uso de fórmulas recursivas que podem ser fác il e rapidamente implementadas . Será apresentado o método do resíduo, o qual envolve a fórmula recursiva dada na Equação (1):

onde:

(1)

a é um inteiro escolhido entre 1 eM. M é um número primo p ou uma potência inteira de um número primo (pm).

da divisão . O número resultante está

na faixa

de ° a M-l,

e se r epete

indefinidamente, ou se j a, a seqüência é periódica com período máx i mo M-l (pseudo-aleatório). Para a seqüênc i a t er o máx i mo comprimento p ossível, a deve ser u ma ra i z pr i mit i va de M [1 ] . Se o valor de M for extremamente grande, então os n úmeros n a seqüênc i a não se repetirão durante o curso da simulação. A escolha de Zo é chamada a "semente" do gerador de números a l eatórios, e determina o ponto n o qual a seqüência é i niciada.

A operação que mais consome tempo em um programa d e geração de números aleatórios é a divisão . Isto pode ser relevante q u ando é d esejado gera r g r a n des quan t idades de

n ú meros ,

por

ca u sa

do

c usto

computacional .

 

Nas seções

segu i ntes

são

mostrados exemplos de geração de números aleatórios com distribuição uniforme e não uniforme.

2.2 Exemplos de geração de números aleatór i os

Uma forma de im plementação computac i onal em l inguagem C do método do res í duo i dent i f i cado p ela Equação (1) é mostrado n a Figura 1 .

unsig n ed unsi g n e d

unsigned l o ng int M=214 7 4 836 4 7; un s igne d long i nt a=25 7 1 7; un s igne d l o ng int i ; double X[ n); Za = I ;

f o r {i =O ;i<n ;i + +) {

Z= ( a*Za) \ % M; Xj i] = ( d o uble ) Za/ (M-I) ; Za =Z ;

}

long int n = 10000 ; l o ng int Z, Za;

/ . n = tam a n ho da seqüência

/ * a nn aze n a m e nto

/* maior va l or M = 2" -1 */ / * pa r â m etr o a lfa * /

/ * co n tad o r

* /

*/

d a seqüê ncia */

/ * val o r da seme nt e * /

/ * cal c ula re sto da di v isão * / / * nor mal iza e armaz ena * /

FIGURA 1:

ALGORI T MO EM LIN G UAGEM C DO

MÉTO D O DO RESÍDUO

Geração de Números Aleatóri os Alvaro R . Pereira Júnior I Maria Eugenia de A . Freitas I wilian s . Lacerda

A

Figura 2 mostra os números

 

histograma referente aos números

aleatórios

gerados,

utilizando

o

aleatórios mostrados na Figura 4.

programa

da F i gura

1 . A Figura 3

mostra o histog r ama [3] dos números aleatórios mostrados na Figura 2.

FIGURA 2: NÚMEROS GERADOS PELO

ALGORITMO DO RESÍDUO

FIGURA 4: NÚMEROS GERADOS PELO ALGO RITMO DO RESÍDUO COM ALTERAÇÕES (A = 1000, E M

131071)

 

180

l

~' r---'---- ' ---'----'---'----'--- '----'---'---~

 

160

 

120

 

~ 120

 
 

100

-l1

 

~100

 

0

80

 

60

20

 

20

o

 

o

0 . 1

02

0 . 3

0 . 4

0 . 5

0 . 6

0.7

Números aleatórios

0 . 8

0 . 9

o

o

0.1

0 . 2

0.3

0 . 4

0 . 5

0 . 6

0 . 7

0.8

0.9

Números a1eal6rlos

FIGURA 3: HISTOGRAMA DOS NÚMEROS GERADOS PELO ALGORITMO DO

RESÍDUO

FIGURA 5: HISTOGRAMA DOS NÚMEROS GERADOS PELO ALGORITMO DO RESÍDUO COM ALTERAÇÕES (A

1000, E M = 131071)

A Figura 4 mostra os números

aleatórios

gerados,

utilizando

o

programa

da Figura 1, fazendo a

1000 e M = 131071 . A periodicidade

dos números

observada devido à má escolha dos

A Figura

parâmetros.

o

gerados

pode

ser

5 mostra

A Figura 6 mostra o resultado da geração de números aleatórios utilizando a função rand da biblioteca padrão da linguagem C . A Figura 7 mostra o histograma correspondente ao resultado da geração de números aleatórios da Figura 6.

Sinergia, São Paulo, v. 3, n. 2, p. 154-161, jul . /dez. 2002 --==================::::=-156

Geração de Números Aleatórios ;~/varo R. Pereira Júnior / Maria Eugênia de A . Freitas / Wilian S. Lacerda

FIGURA 6:

0 . 1

NÚMEROS GERADOS PELA FUNÇÃO RAND DA BIBLIOTECA DA

LINGUAGEM C

02

0 . 3

0 . 6

Números aJeal6r1os

0 . 4

0 . 5

0 . 7

0 . 6

0 . 9

FIGURA 7: HISTOGRAMA DOS NÚMEROS GERADOS PELA FUNÇÃO RAND DA

BIBLIOTECA DA LINGUAGEM C

A Figura 8 mostra o resultado da geração de números aleatórios uti l izando a função rand da biblioteca padrão do Matlab [4]. A Figura 9 mostra o correspondente histograma do resultado da geração de números aleatórios da Figura 8.

157 -- ==== ===== === =====:=- Sinergia,

FIGURA 8:

1 00

0 . 1

NÚMEROS GERADOS PELA FUNÇÃO RAND DO MATLAB

02

0 . 3

0 . 4

0.5

0 . 6

Números a1ealórios

0 . 7

0 . 6

0 . 9

FIGURA 9: HISTOGRAMA DOS NÚMEROS GERADOS PELA FUNÇÃO RAND DO MATLAB

2.3 Teste de validação:

"chi-square"

o teste "chi-square" é largamente util i zado para determinar a aproximação de uma distribuição para um conjunto de dados experimentais

[1].

O teste "chi-square" é definido como a diferença ponderada entre o número observado de resultados (N k ), dentro do intervalo k, e o valor esperado (m k ), conforme mostrado na Equação (2), onde K é o número total

São Paulo, v. 3, n. 2, p. 154-161, ju l . /dez.

2002

Geração de Números Aleatórios A/varo R . Pereira Junior I Maria Eugênia de A . Freitas I wilian s. Lacerda

de intervalos : (2)

1)

Gerar variável

aleatória

U

 

uniformemente distribuída entre O

elo

 

2)

Fazer Z = FX"l(U),

onde Fx é a

Se a aproximação é boa, então IY será o meno r possível . Dessa forma, a hipótese é re j eitada se D 2 ;::: tu, onde tu, é um l imiar determinado pelo nível significante de teste . Os resultados do teste "chi-square " pa r a os números aleatórios apresentados nas Figuras 2, 4, 6, e 8, são mostrados na Tabela 1, sabendo- se que a d i stribuição esperada seria a uniforme.

Método

Figura

0 2

Ling.C

6

82

Matlab

8

90

Resíduo

2

103

Resíduo (alterado)

4

683

TABELA 1: RESULTADOS DO TESTE "CHI-SQUARE"

Percebe-se

que

a

melhor

distribuição é a gerada pela função rand da biblioteca da linguagem C .

2.4 Geração de outras distribuições

Invariavelmente, é necessano gerar números aleatórios com distribuição definida diferente da uniforme. Existem alguns métodos para isso. Um método para geração de números aleatórios de distribuição diferente da uniforme envolve a execução dos seguintes passos:

função de distribuição que se deseja gerar .

Este método

é válido

apenas

quando a função de transformação for monotônica, ou seja, crescente ou decrescente durante todo o intervalo de transformação [6]. A seguir serão dado exemplos de geração de números aleatórios não uniformes : a distribuição exponencia l e a gaussiana .

2.4 . 1 Geração de números aleatórios com distribuição exponencial

Para gerar números aleatórios com distribuição exponencial, a partir de números aleatórios de distribuição uniforme (U), utiliza-se a Equação (4) [1] obtida através da inversa da função de distribuição exponencial dada pela Equação (3):

FX(x)= l -e

x = _ f n(U)

À.

-lu

.x > O

(3)

(4)

onde À. > O é a taxa de variação da exponencial .

A Figura 10 mostra os números gerados pela transformação dos números aleatórios com distribuição uniforme, obtidos pela função rand do Matlab. Na Figura 11 é apresentado o histograma correspondente aos números da Figura 10.

Sinergia, São Paulo, v. 3, n . 2, p. 154-161, jul . jdez. 2002 -===::::::::=::::::::=::::::::=::::::::=::::::::=::::::::=::::::::=::::::::=::::::::=::::::::=::::::::=::::::::=====-158

Geração

de Números

Aleatórios

. '. ' -

FIGURA 10:

3000

4000

5000

6000

1000

NUmeros aleatórios

8000

0000

, 0000

NÚMEROS GERADOS PELA TRANSFORMAÇÃO DA V.A. UNIFORME EM V.A.

EXPONENCIAL

1000

9110

8011

JIIII

" l-

i-

6 400

300

2110

100

o

- 1

o

FIGURA 11:

2

3

Nlmeros aleatórios

HISTOGRAMA DOS NÚMEROS GERADOS PELA TRANSFORMAÇÃO DA V.A. UNIFORME EM V.A. EXPONENCIAL

2.4.2 Geração

de

aleatórios com distribuição gaussiana

números

A variável aleatória gaussiana possui uma distribuição (Equação 5) cuja inversa não pode ser encontrada analiticamente. Mas a variável aleatória gaussiana pode ser gerada usando uma extensão do método de transformação:

FX(x)

=

1

. Í e-(~- X )2 1 2 . (J2

d~

~21t(J 2

- 00

 

(5)

onde x foi integração.

substituído

por

~ na

Considerando

duas variáveis

aleatórias

gaussianas

X

e

Y

independentes

com média

zero e

variância 1, e a seguinte transformação

nas variáveis

mostradas nas Equações (6) e (7):

aleatórias

R2 e 0

(6)

o

x

=arctg - y

Considerando

ainda

(7)

as

respectivas inversas das Equações (6) e (7) apresentadas nas Equações (8)

e (9):

X

= R .cos(0)

(8)

Y = R .sen(0)

(9)

Obtêm-se as Equações 10 e 11, calculando a função densidade conjunta de R2 e 8, e suas funções de densidade marginais [6]:

(10)

( 11)

Mas 0 pode ser gerado

pela

transformação

aleatória uniforme (U) no intervalo [0,1] , conforme Equação (12) :

de

uma

variável

0=21tU

1

(12)

l !i9 - =::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::~Sinergia,São Paulo, v . 3, n. 2 , p. 1 54-161,

jul . /dez.

2002

Geração de N ú meros A l eatórios A/varo R . Pereira Junior I Maria Eugenia de A . Freitas I Wilian 5 . L acerda

E R2

pode

ser ge r ado

pela

transformação de uma variável aleatória uniforme (U 2 ) no intervalo [0,1], conforme Equação (13):

(13)

Então

para gerar números

1, a pãrtir

de números

, aleatórios independentes (X e Y) com distribuição gaussiana com média zero

e variância

aleatórios de distribuição uniforme (U!

e U 2 independentes) no intervalo [0,1], utilizam-se as Equações 14 e 15 [1]:

x

= ~- 2.1n(U 1 ). cos(2.1t.U 2)

(14)

y

= ~ - 2 . ln(U 1)' sen(2.1t . U 2 )

( 15)

o

resultado da geração de números aleatórios com distribuição normal a partir da transformação da variável aleatória uniforme gerada pela função rand do Matlab. Na Figura 13 é apresentado o correspondente histograma dos números aleatórios mostrados na Figura 12.

Na Figura 12 é apresentado

3

2

- 3

.

.

-:

. ,

"

:

-'.

".

,

.

.'

.

-4

- 5 0

1 000

2000

3000

4000

5IlOO 6000

7000

8000

ססoo

1 סס00

FIGURA 12:

NÚMEROS GERADOS PELA TRANSFORMAÇÃO DA V.A. UNIFORME EM V . A. GAUSSIANA

Sinergia, São Paulo, v. 3 , n. 2, p. 154-161, jul . /dez.

3 5 0

25 0

~ 2 00

:ll

~

8 '5 0

' 0 0

5 0

-

o

4

- 3

FIGURA 13:

- 1

o

1

Números aleatórios

2

3

4

HISTOGRAMA DOS NÚMEROS GERADOS PELA TRANSFORMAÇÃO DA V.A

UNIFORME EM V.A. GAUSS I ANA

3.

CONCLUSÕES

Na geração de números aleatór i os uniformemente distribuídos pe l o método do resíduo, deve-se esco l he r cuidadosamente a "semente" (Zo) ' os parâmetros a e M. Ou seja, a variáve l aleatória depende apenas das condições iniciais. Uma vez gerado uma sequencia aleatória uniforme, pode - se gerar computacionalmente outra distribuição, com certa precisão, utilizando o método da transformação, como fo i exemplificado na geração de números

aleatórios com distribuição exponenc i al

e gaussiana.

Entretanto, é difícil gerar com bastante precisão números aleatór i os com uma determinada distribuição, como pode ser comprovado pelos gráficos mostrados •

AGRADECIMENTOS

Os autores

agradecem

aos

Dr. Paulo F. Seixas, Dr . Han i

C . Yehia, e Dra. Rosângela H. Loschi da

UFMG pelas contribuições e incent i vo ao desenvolvimento do artigo .

docentes

2002

Geração de Números Aleatórios Alvaro R. Pereira Júnior / Maria Eugênia de A . Freitas / Wilian S. Lacerda

REFERÊNCIAS BI BLIOG RÁFICAS

1 . GARCIA, Alberto Leon. Probability and Random processes for Electrical Engineering. New

York:

Publishing Company, 1989.

583 p.

Addison-Wesley

2. JAYNES,Edwin T. PróbabilityTheory:

The Logic of Science. St. Louis: Washington University, fragmentary edition of March 1996. Disponível em http:// omega .albany . edu: 8008/ JaynesBook.html, acesso em agosto de 2002.

3" MAGALHÃES, Marcos Nascimento, LIMA, Antônio Carlos Pedroso. Noções de Probabilidade e Estatística. 4 a ed. São Paulo:

Editora da Universidade de São

Paulo, 2002. 416 p.

4. MATLABUser's Guide. Disponível em http r//www.mathworks.corn, acesso em agosto de 2002.

5. PAPOULIS, Athanasios . Probability, Random Variables, and Stochastic Processes. 3 rd ed. New Yórk: McGraw-Hill International, 1991 . 666 p .

6. PEEBLES, Peyton Z. Probability, Random Variables, and Random Signal PrincipIes. 3 rd ed . New York: McGraw-Hill,

1993. 401 p.

Para contato com os autores:

alvaro@cpdee.ufmg.br

eugenia@cpdee.ufmg.br

lacerda@ufla . br