Introdução à Simulação
O que é simulação? Wikipedia: Simulação é a imitação de alguma coisa real ou processo. O ato de simular algo geralmente consiste em representar certas características e/ou comportamentos cruciais de um sistema físico ou abstrato. Simulação: utilizar o computador para imitar o comportamento de um sistema (entidades e processos do mundo real)
Alguma áreas com ampla utilização de simulação Projeto e análise de sistema de manufatura Avaliação de requisitos não funcionais de hardware e software Avaliação de novas armas e táticas militares Reposição de estoque Projeto e operação de sistemas de transporte Avaliação de serviços (hospitais, correios, restaurantes fast-food) Análise de sistemas financeiros e econômicos
Por que contruir um simulador? Permite testar várias alternativas a um custo geralmente mais baixo que no mundo real Melhor entendimento do problema
Por que estudar simulação? Embora seja um conceito simples, frequentemente os projetos de simulação falham: resultados sem utilidade ou enganosos Principal motivo [Jain]: equipe Bons desenvolvedores sem base estatística Bons estatísticos sem conhecimento de engenharia de software
Erros mais comuns em simulação Nível inapropriado de detalhes Simulação permite a inclusão de mais detalhes que modelagem analítica Porém, a inclusão de detalhes aumenta a chance de bugs e o tempo de construção e execução do simulador Um modelo mais detalhado tem menos suposições, mas não necessariamente é melhor Pode necessitar de mais parâmetros de entrada (se não for bem conhecido, piora o resultado) Melhor começar com poucos detalhes, obter resultados, estudar sensibilidades, e introduzir detalhes nas áreas com maior impacto
Erros mais comuns em simulação Escolha da linguagem de programação Impacto significativo no tempo de desenvolvimento Linguagens próprias para simulação exigem menos tempo de desenvolvimento e facilitam tarefas de verificação e análise estatística Porém, linguagens de uso geral são mais portáveis, fornecem mais controle de eficiência, e são mais flexíveis
Erros mais comuns em simulação Modelos não verificados Simuladores são geralmente programas grandes, portanto cuidados com bugs devem ser tomados Modelos não validados De nada adianta implementação correta se o modelo faz suposições incorretas Todo resultado de simulação é suspeito até que seja confirmado por modelos analíticos, medições ou intuição
Erros mais comuns em simulação Manipulação inadequada de condições iniciais O início de uma simulação geralmente não representa o comportamento estável de um sistema, portanto esta parte inicial deve ser descartada Execuções muito curtas Para economizar tempo, o analista pode encerrar a simulação precocemente O tempo ideal depende da precisão desejada (largura do intervalo de confiança)
Erros mais comuns em simulação Gerador de números aleatórios ruim Melhor utilizar geradores difundidos, por terem sidos amplamente testados Porém, mesmo geradores amplamente utilizados podem ser ruins!! Se vai começar a utilizar um gerador, faça testes! Seleção ruim de sementes para os geradores Escolha ruim pode inserir correlações nas execuções do simulador (sequências sobrepostas)
Terminologia Um sistema é uma coleção de entidades (pessoas, máquinas) que interagem para a realização de um objetivo. Schmidth e Taylor Na prática, apenas as entidades que impactam na questão de interesse são consideradas O estado de um sistema é o conjunto de variáveis necessárias para descrevê-lo em um dado instante
Exemplo Qual o número de caixas de modo que o atendimento do banco seja satisfatório? Entidades: caixas e clientes na fila dos caixas Excluir outros funcionários, máquinas e clientes O estado das máquinas é relevante??? Estados: número de atendentes, número de clientes no banco (fila + em atendimento), instante de chegada de cada cliente
Tipos de sistemas Discreto: variáveis de estado modificam-se instantaneamente em pontos separados no tempo Ex.: número de clientes no banco Contínuo: variáveis de estado modificam-se continuamente no tempo Ex.: posição e velocidade de um avião Na prática poucos sistemas são puramente discretos ou contínuos, mas um dos tipos predomina
Tipos de sistemas Discreto Contínuo Número de clientes na fila Velocidade Tempo Tempo
Maneiras de estudar um sistema Para a maioria dos sistemas, em algum momento vamos precisar estudá-lo para determinar: relação entre componentes previsão de desempenho quando submetido a novas condições Experimento com o sistema real Sistema Modelo físico Experimento com um modelo do sistema Solução analítica Modelo matemático Simulação
Sistema real x Modelo do sistema Um modelo sempre provoca questionamentos sobre sua validade Se for possível (e financeiramente viável), é preferível realizar experimentos diretamente com o sistema real: confiança no resultado Raramente é viável utilizar o sistema real: Muito caro ou prejudicial ao sistema existente O sistema pode ainda nem existir
Modelos físicos x Modelos matemáticos Modelo físico é a construção simplificada do que é o sistema real Ex.: maquete, protótipo, aero-modelo Os modelos matemáticos são mais amplamente utilizados em engenharia e nos processos de tomada de decisão
Solução analítica x Simulação Se o modelo matemático é suficientemente simples, podemos utilizar algum método (algebra, probabilidade, cálculo) para obter informações exatas sobre as questões de interesse (solução analítica) Em alguns casos uma solução analítica existe, mas é computacionalmente cara de obter. Ex.: calcular a inversa de uma matriz grande não esparsa Neste caso, é necessário utilizar simulação Se a solução analítica pode ser obtida de forma eficiente, ela é preferível a simulação (por ser exata)
Solução analítica x Simulação Porém, a maioria dos sistemas no mundo real são complexos demais para uma avaliação analítica, exigindo necessariamente simulação A simulação avalia numericamente um modelo, e dados são coletados para estimar o valor real de uma dada característica de interesse
Classificação dos modelos de simulação Estáticos x Dinâmicos: se o tempo é ou não uma variável. Ex.: F=m.a (estático), banco (dinâmico) Determinísticos x Estocásticos: modelo contém ou não variáveis aleatórias Ex. determinístico: um sistema de equações diferenciais (analiticamente intratável) Contínuos x Discretos: variáveis contínuas ou discretas
Classificação dos modelos de simulação Modelos estáticos/determinísticos são casos particulares de modelos dinâmicos/estocásticos Este curso trata de modelos de simulação discretos, dinâmicos e estocásticos (simulação de evento discreto)
Tipos de simulação: Simulação Monte Carlo Modelos estáticos que requerem o uso de números aleatórios Serve para modelos deteminísticos e estocásticos Utilizada para o cálculo aproximado de expressões sem solução analítica Ex.: I 2 x e 0 dx, X v.a. uniforme entre 0 e 2, logo tem densidade f(x)=1/2, 0 <= x <= 2 2 2 x E[ y] 2e (1/ 2) dx I 0 y 2e x2 2
Tipos de simulação: Simulação baseada em trace Um trace é um registro ordenado no tempo dos eventos ocorridos em um sistema real A simulação baseada em trace utiliza este registro durante a simulação, ao invés de sortear estes eventos Podemos então avaliar como o modelo teria se comportado diante desta sequência de eventos
Tipos de simulação: Simulação baseada em trace Vantagens: Credibilidade Facilita validação: além dos eventos, algumas medidas podem ser coletadas Menos aleatoriedade: menos repetições são necessárias para atingir precisão desejada Comparação justa: todas as alternativas testadas com a mesma sequência de eventos
Tipos de simulação: Simulação baseada em trace Desvantagens: Representatividade: apenas uma possível sequência de eventos Geralmente um trace é uma sequência longa: exige muito armazenamento e acesso à memória secundária durante execução (mais lento) Ex.: log de um servidor web
Tipos de simulação: Simulação de evento discreto As variáveis de estado modificam-se apenas pela ocorrência de eventos Os eventos ocorrem instantaneamente em pontos separados no tempo Portanto, as variáveis de estado são discretas Alguns eventos podem não provocar modificações nas variáveis Ex.: evento que escalona o fim da simulação
Etapas Formulação do problema e planejamento do estudo Coleta de dados e definição do modelo Validação Implementação e verificação Validação Execução em produção Análise da saída Documentação e apresentação Formulação do problema e planejamento do estudo Declaração clara dos objetivos e questões a responder Ex.: qual o número mínimo de caixas de modo que a chance do cliente esperar mais de 15min é inferior a 20%? Delinear as configurações alternativas, e como avaliar a eficácia de cada alternativa Ex.: número de caixas, tempo média de espera na fila. Planejamento: pessoas, custo e tempo de cada etapa
Etapas Formulação do problema e planejamento do estudo Coleta de dados e definição do modelo Validação Implementação e verificação Validação Execução em produção Análise da saída Documentação e apresentação Coleta de dados e definição do modelo Se o sistema existir, coletar dados e ajustar distribuições Ex.: distr. do tempo entre chegadas e do tempo de atendimento Se possível, coletar dados sobre a performance (validação) Ex.: tempo dos clientes na fila Construção do modelo (suposições): uma arte Começe com poucos detalhes, sofistique depois se necessário Capture a essência do sistema, tendo o problema em mente
Etapas Formulação do problema e planejamento do estudo Coleta de dados e definição do modelo Validação Implementação e verificação Validação Execução em produção Análise da saída Documentação e apresentação Validação Deve ocorrer durante todo o processo (porém crítico aqui) Discuta o modelo com pessoas familiarizadas com a operação do sistema Envolva a pessoa que tomará a decisão: credibilidade Faça testes estatísticos de ajuste das distribuições
Etapas Formulação do problema e planejamento do estudo Coleta de dados e definição do modelo Validação Implementação e verificação Validação Execução em produção Análise da saída Documentação e apresentação Implementação e verificação Decidir qual linguagem utilizar: geral ou de simulação Caso utilize um novo gerador de números aleatórios, realize testes
Etapas Formulação do problema e planejamento do estudo Coleta de dados e definição do modelo Validação Implementação e verificação Validação Execução em produção Análise da saída Documentação e apresentação Validação Realize uma execução piloto do simulador Compare resultados com o sistema (se existir) Verifique a reação da saída para pequenas mudanças nas entradas Caso seja muito sensível a alguma, faça uma estimativa melhor
Etapas Formulação do problema e planejamento do estudo Coleta de dados e definição do modelo Validação Implementação e verificação Validação Execução em produção Análise da saída Documentação e apresentação Execução em produção Planeje a execução Alternativas Critérios para as condições iniciais e duração da simulação Número de replicações
Etapas Formulação do problema e planejamento do estudo Coleta de dados e definição do modelo Validação Implementação e verificação Validação Execução em produção Análise da saída Documentação e apresentação Análise da saída Construa intervalos de confiança para as medidas de performance de cada alternativa Decida qual a melhor alternativa
Etapas Formulação do problema e planejamento do estudo Coleta de dados e definição do modelo Validação Implementação e verificação Validação Execução em produção Análise da saída Documentação e apresentação Documentação e apresentação Frequentemente simuladores são utilizados para mais de um propósito Portanto, documente as suposições e o programa Se seu trabalho for bem feito (convincente), seu modelo poderá tomar forma no mundo real...