Avaliação de Desempenho Aulas passadas Modelagem de sistemas via cadeias de Markov Aula de hoje Introdução à simulação Gerando números pseudo-aleatórios 1
O Ciclo de Modelagem Sistema real Criação do Modelo aproximação Influência no sistema Solução do Modelo 2
Modelando um Sistema Abstração do sistema simplificação necessária Representação matemática do sistema com aleatoriedade avaliação precisa do desempenho 3
Cadeias de Markov Técnica de modelagem abstração matemática do sistema muito utilizada (porque?) Propriedade de Markov estados futuros não depende do passado! prob. de transição para um estado depende apenas do estado atual porque isto é possível? Andrey Markov (1856-1922) 4
Cadeias de Markov Vantagens modelo facilmente compreendido fácil solução (e exata) medidas de interesse Desvantagens limitada a eventos exponenciais não comporta sistemas mais complexos 5
Fila Genérica requisições CPU Processo de chegada não é Poisson Tempo de serviço não é exponencial Como avaliar o desempenho desta fila? ex. qual o tamanho médio da fila? Simulação 6
Simulando uma Fila Genérica requisições CPU O que é uma simulação? programa que imita comportamento do sistema Como simular este sistema? programa deve gerar eventos de chegadas e serviço, manter estado da fila, calcular medidas de interesse 7
Simulando uma Fila Genérica requisições CPU N(t) Sistema ocioso Sistema ocupado t Imitar evolução do sistema: N(t) Obter medidas de interesse Utilização, E[N], etc. 8
Simulação Vantagens Pode lidar com modelos mais compexos Melhor representação do sistema real Desvantagens Difícil interpretar e verificar resultados Longo tempo de execução Eterno debate entre simulação e avaliação matemática 9
Caracterizando um Simulador Determinístico ou Estocástico Modelo contém eventos aleatórios? Estático ou Dinâmico Evolução do tempo influi no sistema? Contínuo ou Discreto Estado do sistema evolui continuamente ou em pontos discretos no tempo? Simulação Discreta de Eventos estocástica, dinâmica e discreta 10
Primeiro Passo para Simulação Como gerar números aleatórios? seu computador possui gerador de números aleatórios? Computador é fundamentalmente determinístico! Gerar números pseudo-aleatórios que pareçam aleatórios algoritmos determinísticos 11
Gerador de Números Pseudo- Aleatórios Um bom gerador de números aleatórios: Geraçao não possui ciclos ou se repete Boa distribuição numérica Ausência de previsões (a não ser conhecendo seed e fórmula!) 12
Gerador de Números Pseudo- Aleatórios Algoritmo que gera uma sequência de números inteiros U 1, U 2,..., que pareçam ser: Uniformemente distribuídos no intervalo [0, M-1] (para algum M fixo) Estatisticamente independentes pareçam ser : sequência deve ter propriedades relevantes de uma sequência de v.a. uniforme 13
Exemplo Supor a=3 e M=11 x i =3 x i 1 m o d1 1 Quantos números diferentes podemos gerar? Supor x 0 =4 (semente) x 1 =3 x 0 m o d1 1 x 2 =3 x 1 m o d1 1 = = 1 2m o d1 1 1 = = 3 m o d 1 1 3 14
Exemplo Supor a=3 e M=11 x i =3 x i 1 m o d1 1 x 0 =4 x 1 =1 x 2 =3 x 3 =9 Gerador entra em loop depois de 5 amostras E se x 0 for diferente? x 4 =5 x 5 =4 x 6 =1... 15
Propriedades do Gerador M =2 3 1 1 Todos números são gerados? Qual o tamanho de uma sequência? Escolher a e M tal que para qualquer x 0 Sequência pareça aleatória Longo ciclo antes de repetição Cálculo seja eficiente Sugestão (para máquina de 32 bits) x i =a x i 1 mod M a=7 5 16
Método Congruente Linear Três parâmetros a, c e M (números inteiros) Dado x (semente) 0 x i = a x i 1 c m o d M x 0 determina a sequência inteira Maior mixagem dos bits diferença do outro método Bastante utilizado 17
Exemplo Supor a = 3, M = 11, c = 2 Semente x 0 = 4 x i = 3 x i 1 2 m o d1 1 x 0 =4 x 1 =3 x 2 =0 x 3 =2 x 1 = 3 x 0 2 m o d1 1 x 4 =8 = = 1 4m o d 1 1 3 x 5 =4 x 6 =3... 18
Método Congruente Linear 19
Gerando Números Uniformes [0,1) Gerador de números aleatórios básico Utilização do método congruente linear, dividindo o valor o obtido por M x i = a x i 1 c m o d M U i = x i M Dividindo por M-1 [0,1] Como M é grande, M-1 e M fornecem o mesmo resultado 20
Geradores na Prática Linguagens de programação oferecem geradores C ou C++ (gnu) lrand48() - retorna long [0, 2 31 ] drand48() - retorna float [0, 1) método Congruente Linear usuário define semente (x 0 ) M =2 4 8 a =2 5 2 1 4 9 0 3 9 1 7 c =1 1 21
Variáveis Aleatórias com Distribuição Uniforme Uma vez gerados números uniformemente distribuídos entre [0,1] Variável aleatória contínua uniformemente distribuída entre (a,b) Variável aleatório discreta uniformemente distribuída entre [a,b] 22
Variável Aleatória Contínua X: v.a contínua, uniformemente distribuída entre (a,b) U: v.a contínua, uniformemente distribuída entre [0,1] 23
Variável Aleatória Contínua Usando proporcionalidade: 24
Variável Aleatória Discreta X: v.a discreta, uniformemente distribuída entre [a,b] U: v.a contínua, uniformemente distribuída entre [0,1] X assume valores: 25
Como garantir que estamos gerando números aleatórios uniformemente distribuídos? Testes Estatísticos (Qui-square) Kolmogorov-Smirnov 26
Teste 27
Teste 28
Teste 29
Teste Como 3.4 < 16.9, aceitamos a hipótese, ou seja, que o gerador retornou números uniformemente distribuídos entre [0,1] 30