geraÇÃo de nÚmeros aleatÓriossandra/ms614/handouts/geracaonumerosaleatorios.pdf · qual serão...

23
1 Simulação de Sistemas GERAÇÃO DE NÚMEROS ALEATÓRIOS

Upload: others

Post on 20-Nov-2019

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

1Simulação de Sistemas

GERAÇÃO DE NÚMEROS ALEATÓRIOS

Page 2: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

2Simulação de Sistemas

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

10 x

f xx

( ),,=

≤ ≤⎧⎨⎩

1 0 10

outro valor

Page 3: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

3Simulação de Sistemas

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 , onde N é o número total de observações.

A probabilidade de observar um valor em um particular intervalo é independente dos valores previamente obtidos.

Nn

Page 4: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

4Simulação de Sistemas

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 é:

,...),( 21 −−= nnn xxfx

Page 5: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

5Simulação de Sistemas

Exemplo

16mod)15( 1 += −nn xxPara 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.

Page 6: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

6Simulação de Sistemas

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.

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.

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

Page 7: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

7Simulação de Sistemas

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.

Page 8: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

8Simulação de Sistemas

ObservaçõesOutra 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 cicloigual 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

Page 9: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

9Simulação de Sistemas

Propriedades Desejadas

As propriedades desejadas em um gerador de números aleatórios são as seguintes:

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;

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.

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.

Page 10: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

10Simulação de Sistemas

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.

x a mnn= mod

Page 11: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

11Simulação de Sistemas

Método Congruente Linear

Uma expressão equivalente usada para o cálculo de xn após calcular xn+1 é dada por:

x ax mn n= −1 mod

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.

Page 12: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

12Simulação de Sistemas

Generalizações

Muitas das propostas atuais são generalizações da proposta de Lehmer e seguem a seguinte fórmula:

mbaxx nn mod)( 1 += −

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.

Page 13: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

13Simulação de Sistemas

Exercício mbaxx nn mod)( 1 += −

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

Page 14: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

14Simulação de Sistemas

Resposta Exercício 1 mbaxx nn mod)( 1 += −

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?

Page 15: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

15Simulação de Sistemas

Resposta Exercício 1 mbaxx nn mod)( 1 += −

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?

Page 16: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

16Simulação de Sistemas

Resposta Exercício 2

Para x0 igual a 13:Xn-1 a b m Xn13 17 43 100 6464 3131 7070 3333 44 1111 3030 5353 4444 9191 9090 7373 8484 7171 5050 9393 2424 5151 1010 1313 6464 3131 7070 3333 4. .

Page 17: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

17Simulação de Sistemas

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

Page 18: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

18Simulação de Sistemas

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

Page 19: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

19Simulação de Sistemas

Exercício 3Observe como o período obtido é dependente dos parâmetros a,b,m e X0.

i xi xi xi xi

0 1 2 3 41 13 26 39 522 41 18 59 363 21 42 63 204 17 34 51 45 29 58 236 57 50 437 37 10 478 33 2 359 45 710 9 2711 53 3112 49 1913 61 5514 25 1115 5 1516 1 3

Page 20: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

20Simulação de Sistemas

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.

Page 21: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

21Simulação de Sistemas

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:

x ax mn n= −1 modOs 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.

Page 22: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

22Simulação de Sistemas

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 = 63x1 = (19)(63) mod 100 = 1197 mod 100 = 97x2 = (19)(97) mod 100 = 1843 mod 100 = 43x3 = (19)(43) mod 100 = 817 mod 100 = 17.

Page 23: GERAÇÃO DE NÚMEROS ALEATÓRIOSsandra/MS614/handouts/GeracaoNumerosAleatorios.pdf · qual serão os números na seqüência. Embora estes números sejam considerados aleatórios,

23Simulação de Sistemas

Exemplo usando um gerador atualExemplo 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