Você está na página 1de 23

GERAÇÃO DE NÚMEROS

ALEATÓRIOS

Simulação de Sistemas 1
Propriedades dos Números Aleatórios

‹ Uma seqüência de números aleatórios, x1, x2,..., deve possuir duas


importantes propriedades: uniformidade e independência.
‹ Todo número aleatório xi é uma amostra independente de uma
distribuição uniforme e contínua no intervalo de zero a 1.
‹ Sua função densidade de probabilidade de x é dada por:

f(x)

1
⎧1, 0 ≤ x ≤ 1
f (x) = ⎨
⎩0, outro valor

0 1 x

Simulação de Sistemas 2
Conseqüências da
Uniformidade e Independência

‹ Se o intervalo de [0, 1] é subdividido em n classes, ou


subintervalos de igual tamanho, o valor esperado de
observações em cada intervalo será de N n , onde N é o
número total de observações.

‹ A probabilidade de observar um valor em um particular


intervalo é independente dos valores previamente obtidos.

Simulação de Sistemas 3
Métodos Geradores de Números Aleatórios

‹ A técnica empregada mais comum faz uso de uma relação


recursiva na qual, o próximo número na seqüência é uma
função do último ou dois últimos números gerados, isto é:

xn = f ( xn −1 , xn − 2 ,...)

Simulação de Sistemas 4
Exemplo

xn = (5 xn −1 + 1) mod 16
‹ Para dar início ao processo de geração é preciso definir um
valor inicial para xo.
‹ Iniciando a série com xo = 5 obtém-se x1 da forma que segue:
x1 = (5 x 5 + 1) mod 16 = 26 mod 16 = 10
Os primeiros 32 números obtidos por meio deste procedimento
são:
10, 3, 0, 1, 6, 15, 12, 13, 2, 11, 8, 9, 14, 7, 4, 5, 10, 3, 0, 1, 6, 15,
12, 13, 2, 11, 8, 9, 14, 7, 4, 5.
Observa-se que a série se repete após os primeiros 16 números.

Simulação de Sistemas 5
Exemplo...

‹ Observa-se que os valores de x são inteiros entre 0 e 15. Dividindo-


os por 16, teremos uma seqüência de números aleatórios com
valores entre 0 e 1.
0,6250 0,1875 0,0000 0,0625 0,3750 0,9375 0,7500 0,8125
0,1250 0,6875 0,5000 0,5625 0,8750 0,4375 0,2500 0,3125
0,6250 0,1875 0,0000 0,0625 0,3750 0,9375 0,7500 0,8125
0,1250 0,6875 0,5000 0,5625 0,8750 0,4375 0,2500 0,3125

‹ Fica claro que, conhecida a função f, podemos gerar novamente a


seqüência sempre que fornecermos o valor inicial de x0. Este valor,
usado para iniciar a seqüência é conhecido por semente.

Simulação de Sistemas 6
Observações

‹ A função f é determinística.
‹ Dada a semente, podemos afirmar, com 100% de certeza,
qual serão os números na seqüência.
‹ Embora estes números sejam considerados aleatórios, no
sentido de serem aprovados quando submetidos a testes
estatísticos de aleatoriedade, são, de fato, pseudo-aleatórios.
‹ O objetivo em qualquer método de geração é produzir uma
seqüência de números aleatórios entre zero e 1, os quais
simulem ou imitem, as propriedades dos verdadeiros
números aleatórios.

Simulação de Sistemas 7
Observações
‹ Outra importante observação sobre o exemplo apresentado, é que somente
os 16 primeiros valores são únicos.
‹ O 17º é igual ao primeiro e o restante da seqüência é apenas uma
repetição cíclica dos primeiros 16 números.
‹ Dito de outra forma, o gerador utilizado possui um comprimento de ciclo
igual a 16 valores.
‹ Alguns geradores não repetem uma parte inicial do ciclo, chamada de
cauda. Neste caso, o comprimento de seu período é dado pela soma do
comprimento L da cauda mais o comprimento C do ciclo.

Semente

Cauda Comprimento do Ciclo


Período

Simulação de Sistemas 8
Propriedades Desejadas
‹ As propriedades desejadas em um gerador de números
aleatórios são as seguintes:
9 Deve ser computacionalmente eficiente: Uma vez que as simulações
necessitam da geração de, até mesmo, milhares de números aleatórios
em cada rodada, o tempo para processar cada geração deve ser
mínimo;
9 O período deve ser muito longo: Um período curto pode fazer com
que haja a reciclagem da seqüência de números aleatórios, resultando
em uma repetição da seqüência de eventos. Isto pode,
conseqüentemente, limitar o período utilizável de uma rodada de
simulação.
9 Os sucessivos valores devem ser independentes e uniformemente
distribuídos: A correlação entre os diversos valores gerados deve ser
pequena. A correlação, se significativa, indica dependência.

Simulação de Sistemas 9
Método Congruente Linear

‹ Desenvolvido pelo Prof. D. H. Lehmer, em 1951, quando dos


experimentos executados pelo computador ENIAC no MIT.
‹ Segundo ele, os restos de sucessivas potências de um número
possuíam boas características de aleatoriedade.
‹ Obtinha o n-ésimo número de uma seqüência, tomando o resto
da divisão da n-ésima potência de um inteiro a por um outro
inteiro m.

xn = a mod m
n

Simulação de Sistemas 10
Método Congruente Linear

‹ Uma expressão equivalente usada para o cálculo de xn após


calcular xn+1 é dada por:

xn = axn−1 mod m
‹ Os parâmetros a e m são chamados de multiplicador e
módulo respectivamente.
‹ As escolhas de Lehmer para estes parâmetros foram a = 23 e
m = 108 + 1.
‹ Segundo Jain (1991), tais valores foram baseados na
facilidade de implementação no ENIAC, que era uma
máquina de oito dígitos decimais.
Simulação de Sistemas 11
Generalizações
‹ Muitas das propostas atuais são generalizações da proposta
de Lehmer e seguem a seguinte fórmula:

xn = (axn −1 + b) mod m

‹ Os valores de xn são inteiros entre 0 e m-1. As constantes a e


b são positivas.
‹ De maneira geral, a escolha dos valores de a, b, e m afetam o
período e a autocorrelação na seqüência.

Simulação de Sistemas 12
Exercício xn = (axn −1 + b) mod m

‹ Use o MCL para gerar uma seqüência de números aleatórios


entre zero e 1, com os seguintes parâmetros:
• x0 = 27, a = 17, b = 43 e m = 100.
‹ Qual o intervalo em que os valores são gerados? Porque?
‹ Observe também, que estarão sendo gerados inteiros
aleatórios e não números aleatórios.
‹ Para transformá-los em valores entre 0 e 1, emprega-se:
Ri = Xi/m, para i = 1, 2,....

Simulação de Sistemas 13
Resposta Exercício 1 xn = (axn −1 + b) mod m

‹ A seqüência de valores para xi e subseqüentes Ri, é apresentada abaixo:


x0 = 27
x1 = (17 . 27 + 43) mod 100 = 502 mod 100 = 2
R1 = 2 / 100 = 0,02

x2 = (17 . 2 + 43) mod 100 = 77 mod 100 = 77


R2 = 77 / 100 = 0,77

x3 = (17 . 77 + 43) mod 100 = 1352 mod 100 = 52


R3 = 52 / 100 = 0,52

Quais serão os próximos três valores da seqüência?

Simulação de Sistemas 14
Resposta Exercício 1 xn = (axn −1 + b) mod m

‹ A seqüência de valores para xi e subsequentes Ri, é apresentada abaixo:


x0 = 27
x1 = (17 . 27 + 43) mod 100 = 502 mod 100 = 2
R1 = 2 / 100 = 0,02

x2 = (17 . 2 + 43) mod 100 = 77 mod 100 = 77


R2 = 77 / 100 = 0,77

x3 = (17 . 77 + 43) mod 100 = 1352 mod 100 = 52


R3 = 52 / 100 = 0,52

Quais serão os próximos três valores da seqüência?


0,27; 0,02; 0,77

Exercício 2: E se x0 for igual a 13?


Simulação de Sistemas 15
Resposta Exercício 2
Xn-1 a b m Xn
Para x0 igual a 13: 13 17 43 100 64
64 31
31 70
70 33
33 4
4 11
11 30
30 53
53 44
44 91
91 90
90 73
73 84
84 71
71 50
50 93
93 24
24 51
51 10
10 13
13 64
64 31
31 70
70 33
33 4
. .
Simulação de Sistemas 16
Relações entre a, b, m e X0
‹ Para o alcance da máxima densidade (dentro do intervalo [0; 1]) e
para que se evite ciclos curtos, o período deve ser o maior possível.
‹ Segundo um teorema apresentado por Law e Kelton (1991) o
período (P) é máximo quando:
¾ Para m na potencia 2, ex: m = 2c e b ≠ 0, o maior P = m = 2c. Isto pode
ser alcançado se b é primo relativo de m (isto é, o maior fator comum
a eles é 1). Além disso, a = 1 + 4k, onde k é um inteiro;
¾ Se q é um número primo, que divide m, então q divide a -1;
¾ Se 4 divide m, então 4 divide a -1;
‹ Pode-se acrescentar ainda:
¾ Para m na potencia 2, ex: m = 2c e b = 0, o maior P = m/4 = 2c-2. Isto
pode ser alcançado se X0 for ímpar e o multiplicador a = 3 + 8k ou a =
5 + 8k, para algum k = 0, 1, ....

Simulação de Sistemas 17
Exercício 3
‹ Encontre os períodos para o gerador com os seguintes parâmetros: a = 13,
b = 0, m = 26, e X0 = 1, 2, 3 e 4.

Simulação de Sistemas 18
Exercício 3
‹ Observe como o período obtido é dependente dos parâmetros a,b,m e X0.

i xi xi xi xi
0 1 2 3 4
1 13 26 39 52
2 41 18 59 36
3 21 42 63 20
4 17 34 51 4
5 29 58 23
6 57 50 43
7 37 10 47
8 33 2 35
9 45 7
10 9 27
11 53 31
12 49 19
13 61 55
14 25 11
15 5 15
16 1 3
Simulação de Sistemas 19
Variação dos períodos para várias sementes

‹ Observa-se que com as sementes ímpares (1 e 3), é possível a


obtenção de períodos com 16 elementos (P = m/4 = 64/4 = 16).
‹ Para as sementes pares (2 e 4), os períodos obtidos tem
comprimentos 8 e 4, respectivamente.
‹ Observa-se, também que a = 5 + 8k, com k = 1, exigida para o
alcance de períodos máximos.

Simulação de Sistemas 20
Método Congruente Linear Multiplicativo (MCLM)

‹ Uma das derivações do MCL é o método congruente linear multiplicativo.


Neste método, o valor do incremento b = 0. Desta forma, o gerador fica
reduzido a seguinte expressão:

xn = axn −1 mod m
‹ Os geradores baseados no MCLM são mais eficiente do que aqueles com
base no MCL pois, uma vez que não existe o envolvimento de adições, o
tempo de processamento necessário se reduz.
‹ A eficiência pode ser ainda maior quando m assume uma potência de 2,
fazendo com que, desta forma, a operação mod seja trivial.

Simulação de Sistemas 21
Velocidade e Eficiência versus m

‹ Velocidade e eficiência sempre são beneficiadas quando a escolha de m é


uma potência de 2 ou muito próximo disso.
‹ Uma vez que a maioria dos computadores digitais usa uma representação
binária dos números, a operação de cálculo do resto, é sempre conduzida
mais eficientemente quando m = 2k.
‹ Um exemplo usando uma forma decimal ilustra, por analogia, tal
mecanismo. Assumindo m = 102 = 100, a = 19 e x0 = 63, gera-se uma
série de números aleatórios usando a equação do MLC.

x0 = 63
x1 = (19)(63) mod 100 = 1197 mod 100 = 97
x2 = (19)(97) mod 100 = 1843 mod 100 = 43
x3 = (19)(43) mod 100 = 817 mod 100 = 17
.

Simulação de Sistemas 22
Exemplo usando um gerador atual
‹ Exemplo de um gerador ainda em uso em muitas rotinas para a geração de
números aleatórios, presentes em programas comerciais.
‹ Os valores dos parâmetros satisfazem as condições para permitir P = m - 1
(maior do que 2 bilhões).
‹ Os valores dos parâmetros são: m = 231 - 1 = 2.147.483.647 (que é um
número primo), a = 75 = 16.807. A semente x0 = 123.456.

x1 = (75)(123.456) mod (231 - 1) = 2.074.941.799 mod (231 - 1) = 2.074.941.799

R1 = 2.074.941.799 / 231 = 0,9662

x2 = (75)(2.074.941.799) mod (231 - 1) = 559.872.160

R2 = 559.872.160 / 231 = 0,2607

x3 = (75)(559.872.160) mod (231 - 1) = 1.645.535.613

R3 = 1.645.535.613 / 231 = 0,7662

Simulação de Sistemas 23

Você também pode gostar