Você está na página 1de 9

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/277097640

Geração de números aleatórios

Article · January 2002

CITATIONS READS

2 542

3 authors, including:

Wilian Soares Lacerda


Universidade Federal de Lavras (UFLA)
61 PUBLICATIONS   223 CITATIONS   

SEE PROFILE

Some of the authors of this publication are also working on these related projects:

Análise dos Algoritmos de Perfil II do Projeto eSTREAM para Criptografia de Imagens View project

UMA PROPOSTA DE FRAMEWORK PARA DETECÇÃO DE INTRUSÃO EM REDES DE COMPUTADORES UTILIZANDO INTELIGÊNCIA COMPUTACIONAL View project

All content following this page was uploaded by Wilian Soares Lacerda on 02 May 2017.

The user has requested enhancement of the downloaded file.


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 que um modelo de distribuição de
envolve aleatoriedade deve incluir um probabilidade tenha sido escolhido, um
método para geração de seqüências de algoritmo para geração da variável
números aleatórios. Por exemplo, a 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 2. MÉTODO PARA GERAÇÃO
cada cliente. Esses números aleatórios COMPUTACIONAL DE
devem satisfazer as propriedades dos NÚMEROS ALEATÓRIOS
processos físicos que eles estão
simulando. Simulação em computador A partir de experimentos físicos
envolve a geração de longas aleatórios, pode-se gerar números
seqüências de números aleatórios. aleatórios, associando o resultado de
A simulação computacional de cada experimento a um número.

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


Geração de Números Aleatórios
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ário gerar uma grande tomando 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 da divisão. O número resultante está
que o experimento será realmente
aleatório [2], os números gerados
na faixa de °
a M-l, e se repete
indefinidamente, ou seja, a seqüência
desta maneira também não serão é periódica com período máximo M-l
totalmente aleatórios. (pseudo-aleatório). Para a seqüência
Computacionalmente, existem ter o máximo comprimento possível,
métodos de geração de variáveis a deve ser uma raiz primitiva de M [1].
aleatórias que são' baseados em Se o valor de M for extremamente
números aleatórios uniformemente grande, então os números na
distribuídos entre zero e um [1]. Estes seqüência não se repetirão durante o
números aleatórios com distribuição curso da simulação. A escolha de Zo é
uniforme podem ser usados para gerar chamada a "semente" do gerador de
números com probabilidades números aleatórios, e determina o
arbitrárias. ponto no qual a seqüência é iniciada.
Um problema que ocorre com a A operação que mais consome
geração de um número aleatório no tempo em um programa de geração
intervalo [0,1], é que há infinitos de números aleatórios é a divisão. Isto
números neste intervalo, porém o pode ser relevante quando é desejado
computador é limitado a representar gerar grandes quantidades de
números com precisão finita. Outra números, por causa do custo
dificuldade é a necessidade de gerar computacional.
longas seqüências de números Nas seções seguintes são
aleatórios, o que exige muito do mostrados exemplos de geração de
processador e da memória números aleatórios com distribuição
(geralmente os métodos utilizam uniforme e não uniforme.
recursão e operações de divisão).

2.2 Exemplos de geração de


2.1 Método do resíduo números aleatórios

A abordagem preferida para Uma forma de implementação


geração computacional de números computacional em linguagem C do
aleatórios envolve o uso de fórmulas método do resíduo identificado pela
recursivas que podem ser fácil e Equação (1) é mostrado na Figura 1.
rapidamente implementadas. Será
apresentado o método do resíduo, o
qual envolve a fórmula recursiva dada
na Equação (1): unsigned long int n= 10000;
unsigned long int Z, Za;
/. n = tamanho da seqüência */
/* annazenamento da seqüência */
unsigned long int M=2147483647; /* maior valor M = 2"-1 */
unsigned long int a=25717; /* parâmetro alfa */
unsigned long int i; /* contador */
(1) double X[ n);
Za= I; /* valor da semente */
for{i=O;i<n;i++) {

onde: Z=(a*Za)\%M;
Xji] = (double)Za/(M-I);
/* calcula resto da divisão */
/* normaliza e armazena */
Za=Z;
}
a é um inteiro escolhido entre 1
eM.
FIGURA 1: ALGORITMO EM LINGUAGEM C DO
M é um número primo p ou uma
MÉTODO DO RESÍDUO
potência inteira de um número
primo (pm).

1515
-==========---=:==================Sinergia, São Paulo, v. 3, n. 2, p. 154-161, jul./dez. 2002
Geração de Números Aleatórios
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 Figura 1. A Figura 3
mostra o histograma [3] dos números
aleatórios mostrados na Figura 2.

FIGURA 4: NÚMEROS GERADOS PELO


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

180
l~'r---'----'---'----'---'----'---'----'---'---~
160

120

~ 120
100
-l1
~100

080
60

20

20 o
o 0.1 02 0.3 0.4 0.5 0.6 0.7 0.8 0.9
Números aleatórios

o
o 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
Números a1eal6rlos FIGURA 5: HISTOGRAMA DOS NÚMEROS
GERADOS PELO ALGORITMO DO
RESÍDUO COM ALTERAÇÕES (A
FIGURA 3: HISTOGRAMA DOS NÚMEROS
GERADOS PELO ALGORITMO DO 1000, E M = 131071)
RESÍDUO

A Figura 6 mostra o resultado da


A Figura 4 mostra os números geração de números aleatórios
aleatórios gerados, utilizando o utilizando a função rand da biblioteca
programa da Figura 1, fazendo a padrão da linguagem C. A Figura 7
1000 e M = 131071. A periodicidade mostra o histograma correspondente
dos números gerados pode ser ao resultado da geração de números
observada devido à má escolha dos aleatórios da Figura 6.
parâmetros. A Figura 5 mostra o

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: NÚMEROS GERADOS PELA FUNÇÃO FIGURA 8: NÚMEROS GERADOS PELA FUNÇÃO
RAND DA BIBLIOTECA DA RAND DO MATLAB
LINGUAGEM C

100

0.1 02 0.3 0.4 0.5 0.6 0.7 0.6 0.9


Números a1ealórios
0.1 02 0.3 0.4 0.5 0.6 0.7 0.6 0.9
Números aJeal6r1os

FIGURA 9: HISTOGRAMA DOS NÚMEROS


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

BIBLIOTECA DA LINGUAGEM C

2.3 Teste de validação:


A Figura 8 mostra o resultado da "chi-square"
geração de números aleatórios
utilizando a função rand da biblioteca o teste"chi-square" é largamente
padrão do Matlab [4]. A Figura 9 utilizado para determinar a
mostra o correspondente histograma aproximação de uma distribuição para
do resultado da geração de números um conjunto de dados experimentais
aleatórios da Figura 8. [1] .
O teste "chi-square" é definido
como a diferença ponderada entre o
número observado de resultados (Nk),
dentro do intervalo k, e o valor
esperado (mk), conforme mostrado na
Equação (2), onde K é o número total

157 --=================:=-Sinergia, São Paulo, v. 3, n. 2, p. 154-161, jul./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


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

Se a aproximação é boa, então Este método é válido apenas


quando a função de transformação for
IY será o menor possível. Dessa forma,
monotônica, ou seja, crescente ou
a hipótese é rejeitada se D2 ;::: tu, onde decrescente durante todo o intervalo
tu, é um limiar determinado pelo nível de transformação [6].
significante de teste. A seguir serão dado exemplos
Os resultados do teste "chi-square" de geração de números aleatórios não
para os números aleatórios uniformes: a distribuição exponencial
apresentados nas Figuras 2, 4, 6, e 8, e a gaussiana.
são mostrados na Tabela 1, sabendo-
se que a distribuição esperada seria a
uniforme. 2.4.1 Geração de números
aleatórios com distribuição
exponencial

Método Figura 02 Para gerar números aleatórios


com distribuição exponencial, a partir
Ling.C 6 82
de números aleatórios de distribuição
Matlab 8 90 uniforme (U), utiliza-se a Equação (4)
Resíduo 2 103 [1] obtida através da inversa da função
de distribuição exponencial dada pela
Resíduo (alterado) 4 683 Equação (3):
TABELA 1: RESULTADOS DO TESTE
"CHI-SQUARE"
-lu
FX(x)=l-e .x > O (3)

Percebe-se que a melhor


distribuição é a gerada pela função rand x = _ fn(U) (4)
da biblioteca da linguagem C. À.

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


2.4 Geração de outras
exponencial.
distribuições

Invariavelmente, é necessano A Figura 10 mostra os números


gerar números aleatórios com gerados pela transformação dos
distribuição definida diferente da números aleatórios com distribuição
uniforme. Existem alguns métodos uniforme, obtidos pela função rand do
para isso. Matlab. Na Figura 11 é apresentado o
Um método para geração de histograma correspondente aos
números aleatórios de distribuição números da Figura 10.
diferente da uniforme envolve a
execução dos seguintes passos:

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


Geração de Números Aleatórios

FX(x) = 1 . Íe-(~-X)212.(J2 d~
~21t(J 2 -00

(5)

. '.'- onde x foi substituído por ~ na


integração.

Considerando duas variáveis


aleatórias gaussianas X e Y
3000 4000 5000 6000 1000 8000 0000 , 0000
independentes com média zero e
NUmeros aleatórios variância 1, e a seguinte transformação
nas variáveis aleatórias R2 e 0
FIGURA 10: NÚMEROS GERADOS PELA
TRANSFORMAÇÃO DA V.A.
mostradas nas Equações (6) e (7):
UNIFORME EM V.A.
EXPONENCIAL
(6)

1000
o =arctg-xy (7)
9110

8011 Considerando ainda as


JIIII respectivas inversas das Equações (6)
e (7) apresentadas nas Equações (8)
"l- e (9):
i-
6400
X = R .cos(0) (8)
300

2110
Y = R .sen(0) (9)
100

o
-1 o 2 3 Obtêm-se as Equações 10 e 11,
Nlmeros aleatórios
calculando a função densidade conjunta
FIGURA 11: HISTOGRAMA DOS NÚMEROS
de R2 e 8, e suas funções de densidade
GERADOS PELA marginais [6]:
TRANSFORMAÇÃO DA V.A.
UNIFORME EM V.A.
EXPONENCIAL
(10)

2.4.2 Geração de números


aleatórios com distribuição
gaussiana ( 11)

A variável aleatória gaussiana


Mas 0 pode ser gerado pela
possui uma distribuição (Equação 5)
transformação de uma variável
cuja inversa não pode ser encontrada
analiticamente. Mas a variável aleatória aleatória uniforme (U) no intervalo
gaussiana pode ser gerada usando uma [0,1], conforme Equação (12):
extensão do método de
transformação: 0=21tU
•• 1 (12)

l!i9-=::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::~Sinergia,
São Paulo, v. 3, n. 2, p. 154-161, jul./dez. 2002
Geração de Números Aleatórios
A/varo R. Pereira Junior I Maria Eugenia de A. Freitas I Wilian 5. Lacerda
350
E R2 pode ser gerado pela
transformação de uma variável x»
aleatória uniforme (U2) no intervalo
[0,1], conforme Equação (13): 250

~200

(13) :ll
~
8'50

Então, para gerar números


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

e variância 1, a pãrtir de números


aleatórios de distribuição uniforme (U! o
-4 -3 -1 o 1 2 3 4
Números aleatórios
e U2 independentes) no intervalo [0,1],
utilizam-se as Equações 14 e 15 [1]: FIGURA 13: HISTOGRAMA DOS NÚMEROS
GERADOS PELA
TRANSFORMAÇÃO DA V.A..
x = ~- 2.1n(U1 ).cos(2.1t.U 2) (14) UNIFORME EM V.A. GAUSSIANA

y = ~ - 2.ln(U 1)' sen(2.1t .U 2 ) ( 15) 3. CONCLUSÕES

Na geração de números aleatórios


Na Figura 12 é apresentado o uniformemente distribuídos pelo
resultado da geração de números método do resíduo, deve-se escolher
aleatórios com distribuição normal a cuidadosamente a "semente" (Zo)' os
partir da transformação da variável parâmetros a e M. Ou seja, a variável
aleatória uniforme gerada pela função aleatória depende apenas das
rand do Matlab. Na Figura 13 é condições iniciais.
apresentado o correspondente Uma vez gerado uma sequencia
histograma dos números aleatórios aleatória uniforme, pode-se gerar
mostrados na Figura 12. computacionalmente outra distribuição,
com certa precisão, utilizando o
método da transformação, como foi
exemplificado na geração de números
aleatórios com distribuição exponencial
e gaussiana.
3 .

..-: : -'. ".


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

. .'.....
. ....
-3 . "
AGRADECIMENTOS
-4

Os autores agradecem aos


-50 1000 2000 3000 4000 5IlOO 6000 7000 8000 ‫סס‬oo 1‫סס‬00
docentes Dr. Paulo F. Seixas, Dr. Hani
FIGURA 12: NÚMEROS GERADOS PELA
C. Yehia, e Dra. Rosângela H. Loschi da
TRANSFORMAÇÃO DA V.A. UFMG pelas contribuições e incentivo
UNIFORME EM V.A. GAUSSIANA ao desenvolvimento do artigo.

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

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

REFERÊNCIAS 4. MATLABUser's Guide. Disponível em


BI BLIOG RÁFICAS http r//www.mathworks.corn,
acesso em agosto de 2002.
1. GARCIA, Alberto Leon. Probability
and Random processes for 5. PAPOULIS, Athanasios. Probability,
Electrical Engineering. New Random Variables, and
York: __ Addison-Wesley Stochastic Processes. 3rd ed.
Publishing Company, 1989. New Yórk: McGraw-Hill
583 p. International, 1991. 666 p.

2. JAYNES,Edwin T. PróbabilityTheory: 6. PEEBLES, Peyton Z. Probability,


The Logic of Science. St. Random Variables, and
Louis: Washington University, Random Signal PrincipIes. 3rd
fragmentary edition of March ed. New York: McGraw-Hill,
1996. Disponível em http:// 1993. 401 p.
omega .albany.edu: 8008/
JaynesBook.html, acesso em
agosto de 2002. Para contato com os autores:

3" MAGALHÃES, Marcos Nascimento, alvaro@cpdee.ufmg.br


LIMA, Antônio Carlos Pedroso.
Noções de Probabilidade e eugenia@cpdee.ufmg.br
Estatística. 4 ed. São Paulo:
a

Editora da Universidade de São lacerda@ufla.br


Paulo, 2002. 416 p.

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

View publication stats

Você também pode gostar