7. Geração de Números e Variáveis Aleatórias Aspectos Gerais A geração de variáveis aleatórias em simuladores é uma função fundamental; Usualmente, parte-se de uma sequência de números, com distribuição uniforme entre 0 e 1; f(x) 1 0 1 x A partir desta sequência, é possível gerar outras sequências com distribuições arbitrárias. É importante destacar que uma sequência de números, gerada deterministicamente por computador é necessariamente determinística (pseudoaleatória). Simulação de Sistemas Dinâmicos 1 7. Geração de Números e Variáveis Aleatórias Possíveis problemas: •Os números gerados podem não estar uniformemente distribuídos; •Os números gerados podem assumir valores discretos, em vez de contínuos; •Desvio na média; •Desvio na variância; •Podem haver variações ciclícas: *autocorrelação entre números; *números crescentes ou decrescentes; *muitos números acima da média seguidos de muitos números abaixo da média. Características desejáveis: •Rapidez; •Portabilidade; •Ciclo longo; •Reprodutibilidade; •Uniformidade e independência. Simulação de Sistemas Dinâmicos 2 7. Geração de Números e Variáveis Aleatórias Técnicas de Geração de Números Aleatórios Método Congruencial Linear: Xi+1 = (aXi + c) mod m Xi Ri = m i = 1, 2, ... X0 = semente; a = constante multiplicativa; c = incremento; m = módulo. c = 0 → método congruencial multiplicativo; c ≠ 0 → médodo congruencial misto. A escolha dos valores de a, c, m, X0 influencia drasticamente as propriedades estatísticas e o comprimento do ciclo. Simulação de Sistemas Dinâmicos 3 7. Geração de Números e Variáveis Aleatórias A sequência Ri assume valores exclusivamente no conjunto: m − 1 1 2 I = 0, , , L , m m m Consequentemente, o valor de m determina: •o máximo ciclo; •a máxima densidade. Obs.: é possível que a ciclicidade seja menor que m, basta que algum elemento de I se repita. É desejável portanto que m seja máximo, embora isto não garanta todas as propriedades. Do ponto de vista prático, m é limitado pelo máximo inteiro representável no computador. P. ex. num computador com palavras de 32 bits, m ≤ 231 − 1 ≅ 2,15 × 109 Simulação de Sistemas Dinâmicos 4 7. Geração de Números e Variáveis Aleatórias Em geral: X i+k k a k −1 = a X i + c mod m a −1 Esta fórmula permite deduzir: m c 2b 2b ≠0 0 primo 0 a ciclo outras condições 1+4j 3+8j ou 5+8j m m/4 c,m primos entre si X0 impar ver cond. m−1 o menor inteiro j tal que aj − 1 é divísivel por m é j = m−1 obs.: as escolhas m = 2b e c = 0 resultam em algoritmos mais rápidos e são de uso comum. ( se m = 2b, a operação X mod m resume-se a manter os b bits mais à direita, quando X está codificado na base 2) Ex.: 100010100 mod 10000 = 0100 Simulação de Sistemas Dinâmicos 5 7. Geração de Números e Variáveis Aleatórias Exemplo: a =13; m = 26; c = 0 i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Xi 1 13 41 21 17 29 57 37 33 45 9 53 49 61 25 5 1 Xi 2 26 18 42 34 58 50 10 2 Xi 3 39 59 63 51 23 43 47 35 7 27 31 19 55 11 15 3 Xi 4 52 36 20 4 Exemplo em uso: a = 75; m = 231 − 1; c = 0; X0 = 123457 ciclo: m − 1 obs.: o uso de m+1 não altera muito o resultado. Simulação de Sistemas Dinâmicos 6 7. Geração de Números e Variáveis Aleatórias Geradores Congruenciais Lineares Combinados: É possível obter séries com periodicidade maior combinando vários geradores congruenciais Sejam Xi,1, Xi,2, ..., Xi,k as saídas de k geradores congruenciais lineares multiplicativos (c = 0), de modo que o k-ésimo gerador, Xi,j tenha como parâmentros, aj, mj, e periodicidade mj − 1 A série: k j−1 X i = ∑ (−1) X i , j mod(m1 − 1) j=1 Xi m , se X i > 0 1 Ri = m1 − 1 , se X = 0 i m1 tem como máximo período: (m1 − 1)(m 2 − 1) L ( m k − 1) P= 2 k −1 Simulação de Sistemas Dinâmicos 7 7. Geração de Números e Variáveis Aleatórias Exemplo: Sequência prática para máquinas de 32 bits: k = 2 (número de geradores) m1 = 2147483563 a1 = 40014 m2 = 2147483399 a2 = 40692 X1,0 ∈ [1,2147483562] X2,0 ∈ [1,2147483398] O período obtido é máximo: P = (m1 − 1)(m2 − 2)/2 ≅ 2 × 1018 Simulação de Sistemas Dinâmicos 8 7. Geração de Números e Variáveis Aleatórias Testes para sequências de números aleatórios: 1. Testes de Frequência: Comparam a distribuição obtida com a distribuição uniforme através do teste χ-quadrado ou Kolmogorov-Smirnov; 2. Testes de "Corrida": Verificam se a ocorrência de sequências crescentes e decrescentes apresentam número e comprimento aleatórios; verifica também se sequências acima e abaixo da média são aleatórias 3. Testes de Autocorrelação: Detectam se de m em m valores os números gerados tendem a se aproximar, produzindo uma "ciclicidade" Simulação de Sistemas Dinâmicos 9 7. Geração de Números e Variáveis Aleatórias 4. Testes de Gap: Verificam se os espaços entre ocorrências de um dígito estão apropriadamente distribuídos; 5. Teste "Poker" Verifica se a ocorrências de sequências de dígitos estão apropriadamente distribuídos Simulação de Sistemas Dinâmicos 10 7. Geração de Números e Variáveis Aleatórias Geração de Variáveis Aleatórias As técnicas propostas pressupõem a possibilidade de gerar uma v.a. uniformemente distribuída entre 0 e 1. Transformação Inversa: F(x) 1 U x X = F−1(U) U = F(X), portanto: P[X ≤ x] = P[F-1(U) ≤ x] = P[U ≤ F(x)] mas, P[U ≤ u] = u, portanto P[U ≤ F(x)] = F(x) e finalmente: P[X ≤ x] = F(x) Simulação de Sistemas Dinâmicos 11 7. Geração de Números e Variáveis Aleatórias Convolução Supõe-se que X é a soma de n v.a.'s i.i.d.: X = Y1 + Y2 + ... + Yn Cada v.a. Yi pode ser obtida pelo método anterior (A densidade de probabilidade da variável aleatória X é a convolução das densidades das v.a.'s Yi) Este método é útil quando aproveita as propriedades estruturais da variável X Exemplo: Distribuição de Erlang mµ mµ estágio 1 estágio 2 ... mµ estágio n 1 mµ(mµt ) m −1 e − mµt f (t) = (m − 1)! Simulação de Sistemas Dinâmicos 12 7. Geração de Números e Variáveis Aleatórias Composição Seja X a v.a. cuja distribuição é a combinação convexa de n distribuições: F(x) = p1F1(x) + p2F2(x) +... + pnFn(x); n ∑p i =1 i =1 X pode ser vista como a variável gerada a partir de Fi com probabilidade pi. 1. Gera-se a var. discreta M tal que P[M = i] = pi 2. Gera-se X a partir de FM (x) P[X ≤ x] = ΣP[X ≤ x | M = i] P[M = i] = i = ΣFi(x)pi = F(x) i Simulação de Sistemas Dinâmicos 13 7. Geração de Números e Variáveis Aleatórias Exemplo: Distribuição hiperexponencial µ1 p1 estágio 1 p2 µ2 estágio 2 .. . pn µn estágio n n F( t ) = ∑ p i (1 − e −µi t ) i =1 Como no caso anterior, explora-se uma propriedade estrutural da variável X. Simulação de Sistemas Dinâmicos 14 7. Geração de Números e Variáveis Aleatórias Aceitação-Rejeição Supõe-se que uma função g(x) ≥ f(x) ∀x é conhecida (função majorante). Supõe-se que: ∞ ∫ g(x)dx = c −∞ A função h(x) = g(x)/c é portanto um função de densidade de probabilidade. Algoritmo: 1)Gerar uma v.a. Y com densidade h(x) 2)Gerar um número aleatório U, independente de Y f (Y) 3)Se U ≤ então aceitar Y (isto é X=Y); g(Y) Senão rejeitar Y 4)Voltar ao passo 1 Simulação de Sistemas Dinâmicos 15 7. Geração de Números e Variáveis Aleatórias f(x) g(x) f(x) x rejeitado aceito pontos (Y, Ug(Y)) Pode-se mostrar que P[U ≤ f(Y)/g(Y)] = 1/c Portanto a probabilidade de aceitação é inversamente proporcional a c. Quanto maior a probabilidade de aceitação, mais eficiente é o algoritmo. Simulação de Sistemas Dinâmicos 16