Avaliação de Desempenho de
Sistemas Discretos
Parte IV: Simulação
Professor: Reinaldo Gomes [email protected]
P
A
R
Etapas básicas em um estudo de simulação
Geração de números e valores aleatórios
Parte 4 – Simulação
R
T
E
4
Simulação acionada por eventos
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á 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?
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
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
Uso de simuladores - Cuidados
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)
interesse, desprezar)
Possível auto-correlação de amostras (estudar
efeitos)
Custo de uso para otimização
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 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
As etapas podem ser agrupadas em 4 fases:
Descoberta e definiçõesCriação e refinamento do modelo
Etapas básicas de um estudo de
simulação
Execução do modelo
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
Etapas básicas de um estudo de
simulação
Definição dos objetivos
Idéia ainda vaga e confusa do sistema
Refinamento e modificações do sistema já podem ser realizadas
Criação e refinamento do modelo
Etapa 2: ModeloCriação do modelo que será usado pelo simulador Coleta de dados de entrada do modelo (configurar)
Etapa 3: Simulador
Etapas básicas de um estudo de
simulação
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
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
Etapas básicas de um estudo de
simulação
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
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
Etapas básicas de um estudo de
simulação
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)
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
Etapas básicas de um estudo de
simulação
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
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
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
Tipos de geradores de NPAs
Geradores lineares de congruência
Geradores lineares de congruência combinados Sequências de números aleatórios
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
Xn+1 = K * Xn (mod m)
onde, Xn, K e m são inteiros não negativos
Métodos de Congruência
mod = módulo
C(mod m) = resto da divisão C por m
m = múltiplo de 2 (geralmente, # bits da palavra do computador) X0 é a “semente” (escolha afeta qualidade do gerador (número primo) Se X0 = 3, b=5 e m=8 temos a seqüência {3,7,3,7, ...}
Se X0 = 3, b=5 e m=7 temos a seqüência {3,1,5,4,6,2,3,1, ... } ciclo é 3 vezes o anterior
Aditiva
Xn+1 = (Xn + Xn-k ) (mod m), onde, k = 1, 2, 3,...
Métodos de Congruência
Multiplicativa
Xn+1 = K Xn (mod m), onde, K, X e m são inteiros positivos
Mista
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 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
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)
r = F(x), => x =
F
-1(r)
Logo, para calcular amostras de x’ conhecendo
F(x), usar:
Método Transformada Inversa
r = r0
Xo = F-1(r
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
F(x) = 1
– e
-λx= r
1-r =
e
-λxln(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 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
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
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
Paradigmas de Simulação
A Simulação Discreta caracteriza-se por:
Modelagem do sistema em uma rede de fluxoO 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
ClientesServidores Filas
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 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
Paradigmas de Simulação
Componentes necessários para Simulação Discreta
Rotinas de entradaObtém parâmetros que devem ser passados para o modelo
Rotinas de inicialização 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
Organização de um Simulador
Módulo de Inicialização
Rotinas de EntradaRotinas 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
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
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 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
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 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)
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 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”
47
Prof. Reinaldo Gomes Parte I: Introdução
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
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
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 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?