Avaliação de Desempenho de Sistemas Discretos Parte IV: Simulação Professor: Reinaldo Gomes reinaldo@dsc.ufcg.edu.br
Parte 4 Simulação P A R T E Etapas básicas em um estudo de simulação Geração de números e valores aleatórios Simulação acionada por eventos Análise de resultados 4
Desenvolvimento de um simulador Principais Questões Quais são os principais erros que podem levar as minhas simulações ao fracasso? Que tipos de simulação eu posso utilizar? Como os eventos no meu simulador devem ser escalonados? Como eu posso verificar e validar o modelo simulado? Quando posso parar as minhas simulações? Quantas rodadas são necessárias?
Desenvolvimento de um simulador Principais Questões Preciso considerar o estado estacionário do meu sistema? Como devo fazer a geração de variáveis aleatórias? Como verificar se a geração de variáveis aleatórias está correta? Como selecionar as sementes dos experimentos? Como gerar variáveis aleatórias seguindo uma distribuição? Que distribuições devem ser usadas e quando?
Desenvolvimento de um simulador Principais Questões Como posso implementar meu simulador? Tenho que começar tudo do zero??!!!! Uso de linguagem de simulação GPSS, SIMSCRIPT, ARENA Uso de pacotes de sub-rotinas escritas em linguagens usuais GASP (FORTRAN), SimJava Implementação desde o início na sua linguagem de programação preferida Excessivamente trabalhoso!
Uso de simuladores - Cuidados Tempo necessário para a execução dos experimentos Examinar precisão dos resultados (uma vez que simulador manipula VAs) Modelo elaborado pode ser inútil se simulador for muito extenso Esforço com testes pode ser inviável Aleatoriedade dos eventos dificulta depuração Facilidade em simular pode levar a um modelo muito realista (complexo)
Uso de simuladores - Cuidados Nunca esquecer das simplificações feitas e evitar generalizações Tratar regimes transitórios inicial e final adequadamente (se regime permanente é de interesse, desprezar) Possível auto-correlação de amostras (estudar efeitos) Custo de uso para otimização Esconde relações de causas-efeitos
Erros comuns em Simulação Nível de detalhamento errado Mais detalhes mais tempo mais bugs mais recursos mais parâmetros: não necessariamente mais preciso Linguagem inapropriada Falta de verificação do modelo Modelos fantasiosos Condições iniciais imprecisas Simulações muito curtas Gerador de números aleatórios não confiável Seleção errada das sementes dos experimentos
Etapas básicas de uma simulação
Etapas básicas de um estudo de simulação As etapas podem ser agrupadas em 4 fases: Descoberta e definições Criação e refinamento do modelo Execução do modelo Análise e documentação
Etapas básicas de um estudo de simulação Descoberta e Definições Etapa 1: Estudo do sistema e definição dos objetivos Formulação do problema Projeto do modelo Definição dos objetivos Idéia ainda vaga e confusa do sistema Refinamento e modificações do sistema já podem ser realizadas Novas iterações podem acontecer de outras fases
Etapas básicas de um estudo de simulação Criação e refinamento do modelo Etapa 2: Modelo Criação do modelo que será usado pelo simulador Coleta de dados de entrada do modelo (configurar) Etapa 3: Simulador Tradução do modelo Implementação do software responsável por representar o funcionamento do modelo Etapa 4: Depuração e testes do simulador (verificação) Testes / depuração para evitar situações absurdas (ex: tempo negativo) e assegurar integração de módulos
Etapas básicas de um estudo de simulação Criação e refinamento do modelo Etapa 5: Refinamento do simulador Ajustes necessários para melhor representação do modelo Correção de bugs da implementação Etapa 6: Validação do modelo Verificar consistência entre o simulador e o sistema real (naquilo de interesse) Se o sistema real não estiver disponível/não existir, podemos considerar as aproximações definidas para o modelo Como pode ser feito? Que parâmetros de comparação? Etapa 7: Refinamento do modelo A obtenção de todas as características de um sistema para a criação do seu modelo é extremamente difícil Validação e implementação de modelos muito complexos é extremamente complexa
Etapas básicas de um estudo de simulação Execução do Modelo Etapa 8: Estratégia de execução Definir o plano de experimentos a ser executado Existem muitos experimentos possíveis (variações nos parâmetros, entradas, características de projeto ou de configuração do sistema, etc.) Selecionar casos a serem estudados, número de rodadas Etapa 9: Execução Execução dos experimentos planejados para obter medidas do desempenho do modelo simulado Diversas execuções são necessárias para obtermos os resultados desejados (variabilidade das amostras)
Etapas básicas de um estudo de simulação Análise e documentação Etapa 10: Análise e interpretação dos resultados Uma vez terminados os experimentos os resultados devem ser estudados e apresentados adequadamente Análise vai além de apenas descrever os resultados obtidos Correlações, perspectivas de modificações, padrões de funcionamento, avaliação de opções,... Esse processo deve ser documentado para finalizar o estudo proposto
Geração de números e valores aleatórios Números Aleatórios (NAs) são elementos de Variáveis Aletórias (VAs), independentes com distribuição uniforme Variáveis Aleatórias são geradas através de outras distribuições Números Pseudo-aleatórios (NPAs) são números gerados a partir de uma regra pré-fixada de formação (números parecem aleatórios). Porém, a formação de um número a partir do anterior não pode ser pré-estabelecida (Cadeia de Markov)
Geração de números aleatórios Terminologia Semente (Seed) Número Pseudo-aleatório: valores podem ser repetidos dependendo dos parâmetros (funções determinísticas) Totalmente aleatório: Não existe repetição de valores Cycle length, Tail, Period
Características de um Gerador de NPAs Distribuição Uniforme [0,1) Aleatoriedade Reprodutibilidade Não repetir a série no intervalo de interesse OBS: números são repetidos a partir de certo ponto Ciclo = total de pontos antes da repetição Quanto maior o ciclo, melhor Velocidade de Geração
Tipos de geradores de NPAs Geradores lineares de congruência Geradores lineares de congruência combinados Sequências de números aleatórios Geradores de Tausworthe Geradores de Fibonacci estendido...
Métodos de Congruência Geralmente usados na geração de NPAs usando computadores digitais Características: Determinístico Aleatoriedade satisfatória Testes de freqüência e serial: análise do nível de confiança entre a distribuição gerada e aquela teórica, equivalente Seqüência de NPAs uniformemente distribuída
Métodos de Congruência X n+1 = K * X n (mod m) onde, X n, K e m são inteiros não negativos mod = módulo C(mod m) = resto da divisão C por m m = múltiplo de 2 (geralmente, # bits da palavra do computador) X 0 é a semente (escolha afeta qualidade do gerador (número primo) Se X 0 = 3, b=5 e m=8 temos a seqüência {3,7,3,7,...} Se X 0 = 3, b=5 e m=7 temos a seqüência {3,1,5,4,6,2,3,1,... } ciclo é 3 vezes o anterior
Métodos de Congruência Aditiva X n+1 = (X n + X n-k ) (mod m), onde, k = 1, 2, 3,... Multiplicativa X n+1 = K X n (mod m), onde, K, X e m são inteiros positivos Mista X n+1 = K (X n + X n-k )+ C (mod m), onde, k = 1, 2, 3,...
Métodos de Geração de Valores Aleatórios Gerador de números aleatórios segue uma distribuição uniforme Precisamos de outras distribuições para representar os eventos que desejamos Transformada Inversa Rejeição/Aceitação Composição Convolução Esses métodos usam um gerador de NAs com distribuição uniforme para gerar valores aleatórios ( random variates ) com uma dada distribuição
Métodos de Geração de Valores Aleatórios Conhecida a FDP de uma VA x - f(x) -, pode-se obter valores aleatórios desta VA Necessita-se da FDP [F(x)] associada a esta VA: F(x) = (-, x ) f(t) dt Prob [ x x] Como F(x) é definida em [0,1], pode-se gerar NAs uniformemente distribuídos e fazer r = F(x), onde r é uma VA entre 0 e 1
Método Transformada Inversa Se F(x) é contínua e cresce monotonicamente, existe uma função inversa F -1 (r) tal que se 0 r 1, então r = F(x), => x = F -1 (r) Logo, para calcular amostras de x conhecendo F(x), usar: x = F -1 (r)
Método Transformada Inversa r = r 0 X o = F -1 (r 0 )
Exemplo - Exponencial Gerar VAs conforme a distribuição exponencial com valor médio E[x] = 1/λ λ: freqüência usada para denotar a taxa de chegada. F(x) = 1 e -λx = r 1-r = e -λx ln(1-r) = -λx ln(e) x = -(1/λ) ln(1-r)
Geração de VAs exponenciais A distribuição exponencial é freqüentemente usada para gerar valores para o tempo de interchegada e tempo de atendimento de fregueses em modelos de Redes de Filas (i.e., computador, banco, supermercado, etc) Algoritmo 1. Gerar um NA r 2. Usar a Transformação: x = -(1/λ) ln(1-r)
Paradigmas de Simulação Métodos de Monte Carlo Simulações Trace-Driven Simulação Contínua Simulação Discreta Orientada a Eventos Simulação Combinada
Paradigmas de Simulação Métodos de Monte Carlo Tradicionalmente, usados para estimar probabilidades dos estados de um modelo através de experimentações conduzidas por amostras Estudos de fenômenos sociais e econômicos Simulação estática (não considera tempo) Modela fenômenos probabilísticos Usado para avaliar expressões não probabilísticas usando métodos probabilísticos
Paradigmas de Simulação Simulações Trace-Driven Trace Registro ordenado por tempo dos eventos de um sistema Simulações trace-driven utilizam traces como entrada Usado para avaliar condições já existente de um sistema que desejamos estudar
Paradigmas de Simulação Simulações Trace-Driven Vantagens Credibilidade representação da carga de trabalho Fácil validação Maior precisão Entrada real de dados pode reduzir a necessidade de repetições Desvantagens Complexidade mais detalhes podem ser passados Representatividade pode ser limitada (horário, equipamento, etc.) Restrição na quantidade de informação para estudo Tempo de dados armazenados e quantidade de traces Dificuldade de variar condições da avaliação
Paradigmas de Simulação Simulação Contínua A troca de estados do modelo ocorre continuamente no tempo - soluções, usualmente, usam equações diferenciais Simulação Discreta Permite trocas instantâneas nos estados do modelo que ocorrem em pontos discretos do tempo. Simulação Discreta Orientada a Eventos O processamento da simulação ocorre conforme a ocorrência de eventos
Paradigmas de Simulação Simulação Combinada Técnica que simula sistemas com características de sistemas discretos e contínuos. Ex.: Sistema de uma Rodovia Se variáveis são carros Sistema Discreto Se variáveis são distâncias Sistema Contínuo
Paradigmas de Simulação A Simulação Discreta caracteriza-se por: Modelagem do sistema em uma rede de fluxo O sistema possuir componentes (recursos) e cada um executar funções bem definidas Os componentes apresentarem capacidade finita no processamento dos itens e, uma vez esgotadas, os itens esperam em fila pelo atendimento, e O início e o fim das operações realizadas pelos componentes são disparados por eventos
Paradigmas de Simulação Elementos necessários para Simulação Discreta Clientes Servidores Filas Relógio Geradores de Variáveis Aleatórias Calendário de Eventos Acumuladores de Estatísticas Saída de resultados
Paradigmas de Simulação Componentes necessários para Simulação Discreta Escalonador Controla a geração, execução e remoção dos eventos no simulador Relógio de simulação e mecanismo de avanço de tempo O tempo pode ser controlado continuamente ou baseado nos eventos Variáveis de estado do sistema Informações globais e locais do sistema Podem ser usadas para armazenar informações durante e ao final da simulação Rotinas de eventos
Paradigmas de Simulação Componentes necessários para Simulação Discreta Rotinas de entrada Obtém parâmetros que devem ser passados para o modelo Rotinas de inicialização Configura o estado inicial do modelo e a semente da simulação Rotinas de armazenamento Podem ser criadas para armazenar as informações a medida que os eventos são gerados ou ao final da simulação Gerador de relatórios
Organização de um Simulador Módulo de Inicialização Rotinas de Entrada Rotinas de Inicialização (parâmetros de entrada) Módulos para manuseio de eventos Escalonador Rotinas de Eventos Rotinas de armazenamento (opcional) Módulos para saída de resultados Rotinas de armazenamento Gerador de relatórios
Simulação acionada por eventos
Eventos e atividades Diversos módulos devem ser executados em resposta (direta ou indireta) a eventos Eventos representam ocorrências que modificam o estado do sistema Executados instantaneamente assim que gerados ou que seu momento de execução chega Atividade é iniciada e terminada por eventos relacionados
Eventos e atividades da barbearia Exemplos de eventos E1 chegada de freguês E2 início do serviço pelo cabeleireiro E3 término do serviço (partida) Exemplos de atividades A1 - espera em fila (inicia c/e1 e termina c/e2) Se servidor desocupado, A1 inicia de imediato (E1 e E2 ocorrem simultaneamente) Se ocupado, E2 do próximo freguês ocorre com E3 do atual, em serviço A2 - recebe serviço do cabeleireiro
Eventos primários e secundários Simulador deve: Identificar eventos que podem ocorrer no sistema Avaliar os efeitos de cada evento no estado e atividades do sistema Permitir a ocorrência dos eventos e atualizar o estado e atividades do sistema à medida que eventos ocorram Evento primário é escalonado para ocorrer no simulador antes de sua ocorrência real Evento secundário ocorre em resposta a um primário
Escalonamento de Eventos Estado permanece inalterado entre eventos (ou durante atividades) Adiantar relógio para o instante do próximo evento ( iminente ) Atualizar estado (de acordo com evento) Escalonar próximo evento
Escalonamento de Eventos Evento primário Consequências Chegada de freguês 1. Escalona próxima chegada 2. Testa estado do servidor Livre: Mude estado para ocupado Escalone término de serviço Ocupado: Escalone evento colocar freguês na fila Término de serviço 1. Teste estado da fila de espera Vazia: Mude estado servidor para livre Não vazia: Remova freguês da fila Escalone evento Término de serviço
Relógio Simulado
47 Parte I: Introdução Prof. Reinaldo Gomes
Análise de resultados O que eu quero avaliar? De nada adianta executar experimentos se eu não sei quais são meus objetivos com eles Devemos identificar que informações são necessárias e como coletá-las Dados coletados!= métricas que serão avaliadas Obter o máximo possível de informações Quase nunca temos uma visão inicial clara do que queremos avaliar Evita refazer todo o trabalho em muitas situações A avaliação dos resultados não é uma mera descrição de gráficos e resultados de tabelas Devemos tentar identificar o que esta por traz dos números e linhas Entender ou algumas vezes até mesmo especular o que isso significa é o ponto chave da avaliação
Resumo Problemas que podem causar o fracasso das simulações Tempo de simulação inadequado (regime transitório e ciclo do gerador de NA) Definição clara e precisa dos objetivos Objetivo pode ser alcançado? Objetivo pode ser alcançado? Escolha de métricas adequadas Falta de conhecimento necessário Modelagem (ferramentas, validação, etc.) Programação (linguagem, framework de desenvolvimento, ) Conhecimento do sistema Nível inadequado de detalhes no modelo/simulador Mau planejamento dos experimentos Resultados misteriosos
Resumo Cuidados com os experimentos A duração da simulação é apropriada? Existe parada? Os estados transientes do sistema foram removidos? O modelo foi verificado para evitar inconsistências? O simulador foi validado com os resultados teóricos do modelo? Resultados surpreendentes foram analisados para verificar a sua causa? Eles são possíveis ou ocorreram por problema na modelagem/implementação? Foram utilizadas sementes diferentes nos experimentos para avaliar a aleatoriedade dos eventos?