Escolar Documentos
Profissional Documentos
Cultura Documentos
Brauliro G Leal
Quarta Edição
Juazeiro – BA
2021
Modelagem e Simulação Discreta 2
Copyright© 2016, 2017, 2018, 2019, 2020, 2021 by Brauliro Gonçalves Leal
O conteúdo deste livro eletrônico é livre para uso de qualquer natureza desde que citado a
fonte. Toda e qualquer parte desta publicação pode ser reproduzida, distribuída ou
transmitida de qualquer forma ou por qualquer meio, ou armazenada de qualquer forma ou
em qualquer sistema desde que reconhecida a autoria.
e-mail: ccmp0057@gmail.com
Quarta Edição Eletrônica: dezembro de 2021
ISBN: a ser feito#
O autor
e-mail: brauliro.leal@univasf.edu.br
site: www.univasf.edu.br/~brauliro.leal
Prefácio
O objetivo principal deste livro é servir de texto para a disciplina Modelagem e Simulação do
curso de Engenharia da Computação do Colegiado de Engenharia da Computação da
Universidade Federal do Vale do São Francisco.
Os grandes temas deste livro são: Sistemas de Fila, Simulação de Sistemas de Fila, Análise de
Resultados Simulados, Verificação e Validação de Modelos, Geração de Números Aleatórios e
Geração de Variáveis Aleatórias.
O uso de modelos é amplamente aceito pois permite estudar problemas aos poucos –
ampliando o escopo quando necessário, maior facilidade para testar um sistema antes de lhe
dar forma final – reduz custos, melhora a comunicação entre os membros de uma equipe –
aumento da eficiência das equipes, e contribui com a publicidade dos seus resultados –
favorece o entendimento do público de interesse.
O autor espera que tenha contribuído com o ensino destes conteúdos de modo a torná-los
mais atraentes, visuais, dinâmicos e aplicados nas diversas áreas de conhecimento, quando
cabível. Na esperança de que os estudantes descubram a expressão racional que se
descobriu no mundo e que os ajude a reinventá-la.
Os softwares e material didáticos auxiliares foram incluídos no texto e tem como finalidade
pedagógica, destinam-se a ilustrar os conceitos da disciplina, estão sendo melhorados e
otimizados e são de uso livre. O autor não assume quaisquer responsabilidades pelo seu uso
e/ou pelas consequências de seu uso.
Modelagem e Simulação Discreta 5
Cabe aqui uma ressalva, a de que variáveis aleatórias diferem das variáveis deterministas
habituais (da ciência e engenharia em geral). Variáveis deterministas apresentam um valor
único a qual associa-se um erro de medida, como a aceleração da gravidade em um ponto
deste planeta. Por outro lado, variáveis aleatórias têm seus valores associadas a distribuição
de probabilidade, que devem ser interpretados tendo em vista estatísticas de cada resultado
possível, antecipar a face de uma moeda em dado lance ou obter certa carta de um baralho.
Uma outra ressalva é que nossos modelos científicos são apenas modelos, simplificações,
aproximações que funcionam muito bem e, quando surge algo novo, o modelo é aprimorado.
Esse é o modo de progresso da Ciência pois ela é inacabada, em eterna construção, como
nós mesmos e a sociedade, mas busca diminuir as incertezas enquanto lida com a
complexidade deste universo material.
Modelagem e Simulação Discreta 6
1. Identificar uma variável aleatória de interesse X e desenvolver um software para sua simulação
2. Gerar as amostras X1, ..., Xn independentes e igualmente distribuídas (iid) e com a mesma distribuição de
probabilidade
3. Estimar estatísticas de X1 e avaliar a precisão da estimativa2
A Figura 1 apresenta uma visão dos principais tópicos do livro. O tema central é a simulação
discreta, ponto de convergência de quatro outros tópicos, discutidos abaixo:
A simulação é uma técnica reducionista e sua grande vantagem é que, a partir de um modelo
de um sistema e uns poucos dados representativos deste sistema, ela permite gerar
variáveis aleatórias em grande quantidade e que são capazes de reproduzir a dinâmica deste
sistema. Atendendo bem as necessidades dos engenheiros: fazer mais com menos
atendendo aos critérios de qualidade estabelecidos.
Peço antecipadas desculpas por eventuais erros neste texto, que certamente existem,
agradeço antecipadamente toda e qualquer correção ou sugestão de melhoramentos, que
deverão ser enviadas para o e-mail da disciplina: ccmp0057@gmail.com.
1 Em geral, a média de X.
2 Em geral, intervalo de confiança.
Modelagem e Simulação Discreta 7
Tabela de Símbolos
3 O termo pacote será adotado neste texto para indicar as unidades recebidas, processadas e retornadas pelos Sistemas de
Fila; são sinônimos de pacote os termos tarefa, transação, trabalho, instrução, flops e operação, dentre outras denominações
encontradas na literatura da área.
Modelagem e Simulação Discreta 8
Índice
1 Introdução............................................................................................................................11
1.1 Sistema.............................................................................................................................12
1.2 Modelo..............................................................................................................................13
1.3 Dinâmica Temporal de Sistemas Computacionais.............................................................15
1.4 Simulação.........................................................................................................................15
1.5 Sistemas de Fila................................................................................................................17
1.6 Simulação de Sistemas de Eventos Discretos...................................................................17
1.7 Simulação de Sistemas Computacionais...........................................................................19
1.8 Etapas de um Estudo de Simulação..................................................................................20
1.9 Revisão.............................................................................................................................22
1.10 Questões.........................................................................................................................22
1.11 Exercícios........................................................................................................................22
2 Sistemas de Fila...................................................................................................................23
2.1 Sistemas de Fila M/M/1.....................................................................................................25
2.2 Revisão.............................................................................................................................29
2.3 Questões...........................................................................................................................29
3 Modelo Analítico de Sistemas de Fila...................................................................................31
3.1 Modelo de Sistemas de Fila M/M/1....................................................................................32
3.2 Modelo Analítico de Sistemas de Fila M/M/1.....................................................................33
3.3 Revisão.............................................................................................................................35
3.4 Questões...........................................................................................................................36
3.5 Exercícios..........................................................................................................................36
4 Modelo Conceitual de Sistemas de Fila................................................................................37
4.1 Dados de Entrada para Simulação....................................................................................40
4.2 Valores Iniciais da Simulação............................................................................................43
4.3 Cálculo de cpf...................................................................................................................43
4.4 Cálculo de eps...................................................................................................................43
4.5 Cálculo de sps...................................................................................................................44
4.6 Estatísticas do Modelo Conceitual de Sistemas de Fila.....................................................45
4.7 Algoritmo para Calcular nf.................................................................................................46
4.8 Algoritmo para Calcular U.................................................................................................47
4.9 Sumário do Modelo Conceitual de Sistemas de Filas........................................................48
4.10 Revisão...........................................................................................................................50
4.11 Questões.........................................................................................................................51
4.12 Exercícios........................................................................................................................51
5 Modelo Computacional de Sistemas de Fila.........................................................................53
5.1 Técnica para Gerar ic e ts.................................................................................................54
5.2 Software SF.MM1.cpp........................................................................................................55
5.3 Revisão.............................................................................................................................61
5.4 Questões...........................................................................................................................62
5.5 Exercícios..........................................................................................................................62
6 Verificação e Validação de Modelos.....................................................................................64
6.1 Técnicas de Validação de Modelo......................................................................................65
6.2 Técnicas de Verificação de Modelos..................................................................................65
6.3 Revisão.............................................................................................................................67
6.4 Questões...........................................................................................................................67
6.5 Exercícios..........................................................................................................................67
7 Análise de Resultados Simulados.........................................................................................68
7.1 Remoção de Transientes...................................................................................................69
7.1.1 Estimação por Intervalos de Confiança..........................................................................70
7.1.2 Método das Médias de Lotes..........................................................................................72
7.1.3 Método de Replicação Independente (MRI)....................................................................73
7.2 Critério de Parada.............................................................................................................75
7.2.1 Intervalo de Confiança como Critério de Parada............................................................75
7.2.2 N como Critério de Parada.............................................................................................75
7.3 Que Nível de Confiança Estatística Usar...........................................................................76
Modelagem e Simulação Discreta 9
1 INTRODUÇÃO
1.1 Sistema
O termo sistema pode ser definido como um conjunto estruturado de componentes entre os
quais pode-se definir alguma relação de funcionalidade seus elementos constituintes. O valor
dos atributos dos seus componentes, variáveis de estado e parâmetros, em um dado instante
de tempo, define o estado do sistema, Figura 1.1.
Para os propósitos deste livro, os sistemas de interesse são os Sistemas Computacionais, que
são sistemas orientados a eventos de entrada, processamento e saída, constituídos por
recursos de software e de hardware, tomados em parte ou no todo, de modo isolado ou em
conjunto. Nosso estudo é focado em Sistemas de Fila para representar Sistemas
Computacionais, pois são capazes de reproduzir estas estruturas e seu comportamento.
Exemplo 1.1 O circuito TTL 7400 da Figura 1.2 é um exemplo de um sistema, um dispositivo que contém quatro
portas NAND, cada uma delas com duas entradas e uma saída. As portas são independentes; suas variáveis de
estado são os valores das entradas e saída e seus parâmetros são os dados do fabricante.
Fonte: https://materialpublic.imd.ufrn.br/curso/disciplina/1/17/3/7
O primeiro passo na aplicação do conceito de sistema a um problema específico é definir o que constitui o
sistema. Um segundo ponto a ser considerado, é a escolha do nível de descrição desejado.
O conceito de sistema geral pode ser considerado como o menor nível de descrição de um sistema em que
somente as possíveis interações com o mundo exterior são retidas, ficando definida sua constituição e aquilo
que lhe é externo. Um sistema geral é definido por um conjunto de relações entre as entidades que
caracterizam as interações com o mundo exterior.
Assim. sistema geral é uma relação entre as variáveis que ligam um sistema ao mundo exterior. Se forem
definidas as variáveis usadas como excitação (entrada) e as variáveis usadas como resposta (saída), tem-se
um sistema orientado. Um sistema orientado, pode ser caracterizado por uma relação entre o conjunto de
entradas e saídas.
Os conceitos de sistemas geral e orientado não incluem o tempo como intrínseco ao sistema, e as entradas e
saídas são tratadas como eventos.
Modelagem e Simulação Discreta 13
1.2 Modelo
Para os propósitos deste livro, os modelos de interesse são os modelos de Sistemas de Fila,
que são modelos matemáticos capazes de representar os processos de Sistemas
Computacionais de modo geral, simular seu comportamento, descrever seus aspectos
relevantes, permitir sua análise e fazer predição de seu comportamento.
O Modelo de Sistemas de Fila tem uso prático (valor de uso), tem predicabilidade (valor
preditivo), representa os sistemas computacionais (valor de face) e permite construir
modelos computacionais (valor de simulação), enfim, é útil para os fins propostos.
Exemplo 1.3 A Figura 1.4 é um modelo do circuito TTL 7400, com suas quatro portas NAND, cada uma delas
com duas entradas e uma saída.. Pode-se verificar que os elementos desnecessários para caracterização do
sistema da Figura 1.2 foram propositalmente abstraídos, restando tão somente aqueles que são relevantes e
úteis para os propósitos da eletrônica digital. Note que foram adicionados símbolos pictóricos ao modelo, que
são necessários à sua manipulação.
Fonte: https://materialpublic.imd.ufrn.br/curso/disciplina/1/17/3/7
Desafios
1. Na música Minha História, de Chico Buarque, tem o verso: “Com seu único velho vestido cada dia mais
curto”. Considerando este verso, identifique e relação causa/efeito e faça um modelo matemático para
quantificar esta relação.
2. Encontre o modelo matemático implícito no texto bíblico: “a quem tem, mais será dado, mas a quem não
tem, até o que tiver lhe será tirado”.
Modelagem e Simulação Discreta 14
O professor de física Lyman Page explica como nosso modelo de Universo é baseado apenas
em seis parâmetros. Todas as evidências e teorias baseadas em observações do universo
podem ser reunidas em um modelo padrão de cosmologia que tem apenas seis parâmetros.
O segundo parâmetro descreve a matéria escura, um tipo de partícula elementar nova que
ainda não entendemos, que representa 25% do Universo.
O quarto parâmetro é a profundidade óptica, ou quão opaco o Universo era para os fótons
que viajam por ele.
O quinto e o sexto parâmetros descrevem as origens das diminutas flutuações que deram
origem a toda a estrutura que observamos hoje no Universo.
Em suma, não importa como olhamos para o cosmos — por meio de sondagens de galáxias,
de estrelas em explosão, da abundância de elementos de luz, das velocidades das galáxias
ou da CMB —, nós só precisamos de todos os seis parâmetros explicados acima, e processos
físicos conhecidos, para descrever o Universo que observamos.
O que significa ser capaz de descrever algo de forma tão simples e quantitativa? Significa
que entendemos como as peças do Universo se encaixam para formar o todo. Entendemos
algumas conexões profundas na natureza.
Há poucos sistemas estudados por cientistas que podem ser descritos de forma tão simples,
completa e com tanta precisão. Temos sorte de o Universo observável ser um deles.
Extraído em 07/03/2021 de: https://www.bbc.com/portuguese/geral-55936974
Modelagem e Simulação Discreta 15
O circuito TTL 7400 da Figura 1.4 será usado para representar da dinâmica temporal de um
Sistema Computacional, suas variáveis de estado (valor das entradas e saída) e parâmetros
(dados do fabricante). Neste caso, sinais entram nas portas lógicas, são processados e
enviados para as saídas.
Uma característica importante dos sinais, é que não se sabe quando chegarão. Suas
chegadas ocorrem ao acaso, é uma variável aleatória.
Uma vez que o sinal chegou, ele é processado. Cada porta lógica tem uma taxa de
processamento, um dos seus parâmetros de fábrica. A combinação dos valores de entrada,
em número de quatro, e as variações no sincronismo das duas chegadas podem gerar
diferentes demandas de processamento e, como não se sabe que valores de entrada
chegarão e como estão sincronizados, a taxa de processamento também é aleatória.
1.4 Simulação
Figura 1.5 Representação gráfica da relação mundo real, sistema, modelo e simulação.
Suas aplicações são amplas e podem focar tantos nas Ciências quanto nas Engenharias. Nela
podem ser enfatizados aspectos tecnológicos como projetos, protótipos e inovação; e bom
como os científicos e econômicos. Incluiriam também alguns os aspectos sociais.
A simulação pode ser classificada de várias maneiras, a mais comum usa quatro categorias:
a) simulação contínua; b) simulação Monte Carlo; c) simulação de eventos discretos e d)
simulação baseada em trace.
Um processo pode ser de estado discreto ou contínuo. Se os valores que suas variáveis de
estado podem assumir é finito e enumerável, o processo é chamado de processo de estado
discreto. Por exemplo, o número de pacotes em um sistema de fila pode ter valores discretos
iguais a 1, 2, 3 e assim por diante, portanto, a formação de filas é um processo de estado
discreto.
Por outro lado, se as variáveis de estado podem assumir qualquer valor real ele é um
processo de estado contínuo. O tempo de espera numa fila, teoricamente, pode assumir
qualquer valor real é, portanto, um processo de estado contínuo. Já o processo de chegada
na fila é discreto, não ocorre continuamente, ocorre em momentos sucessivos do tempo.
A simulação contínua é utilizada para modelar sistemas cujo estado varia continuamente no
tempo, sendo comum a utilização de equações diferenciais. A simulação discreta usa
modelos sistemas cujo estado varia de modo discreto no tempo, utiliza o conceito de
eventos.
Traces são úteis para conhecer o comportamento de sistemas computacionais, são fontes de
dados para obtenção de funções de distribuição de probabilidade de dados para uso em
simulação. Como são valores medidos, podem também ser usados na validação e verificação
de resultados de simulações. Para serem úteis e ter valor estatístico, traces devem ser
amostras representativas do comportamento do sistema.
Os sistemas discretos são constituídos por sequência de eventos discretos no tempo. Cada
evento ocorre em um determinado instante de tempo e marca uma mudança de estado no
sistema. Entre eventos consecutivos, o sistema não muda 4 e a simulação pode ser feita de
evento em evento, sequencialmente, do início ao fim.
4 As mudanças que ocorrerem não afeta o comportamento do modelo do sistema e nem seus resultados.
Modelagem e Simulação Discreta 17
Os Sistemas de Fila são modelos matemáticos da Teoria da Filas usados para representar
Sistemas Computacionais.
Os Sistemas de Fila são descritos por seis parâmetros, utilizando a notação de Kendall
(A/S/m/K/N/Q em que A – distribuição dos tempos entre as chegadas, S – distribuição dos
tempos de serviço, m – número de servidores, K – capacidade do sistema, N – tamanho da
população, e Q – disciplina de atendimento).
6. seus eventos são: chegada de pacotes na Fila, entrada de pacotes no Servidor e saída
de pacotes do Servidor
A dinâmica do SF, que determina seu comportamento, é feita por simulação dos seus
eventos, que são discretos no tempo.
Os modelos de Simulação de Eventos Discretos (SED) mais simples possuem uma única Fila e
um único Servidor. Cada pacote possui três atributos: tempo de chegada no sistema, tempo
de entrada no servidor e tempo de saída do servidor. O estado do sistema é definido pelo seu
fluxo de pacotes; e o estado dos pacotes é definido pelos seus atributos.
1) chegar no sistema
2) entrar na Fila
3) aguardar na Fila, se necessário
4) entrar no Servidor
5) ser processado no Servidor
6) sair do Servidor
5 O termo pacote é adotado neste texto para indicar as unidades operacionais dos Sistemas de Fila; são sinônimos de
pacote termos: tarefa, transação, requisição e instrução. Outras denominações para pacote são encontradas na literatura
técnico-científica.
Modelagem e Simulação Discreta 18
O estado do SED muda em três situações, que podem ocorrer de forma isoladas ou
conjuntas. A primeira situação é quando o pacote chega na Fila. A segunda é quando o
pacote entra no Servidor. A terceira situação é quando o pacote sai do Servidor.
As mudanças de estado dos SED são imprevisíveis pois ocorrem ao acaso. São três eventos
discretos aleatórios no tempo cronológico, a saber:
A Figura 1.6 ilustra o fluxo de pacotes, eventos e tempos dos eventos em Sistema e Eventos
Discretos. Vale ressaltar que o fluxo de pacotes é a variável independente e que o tempo é
variável dependente.
Figura 1.6 Fluxo de pacotes, eventos e tempos dos eventos em Sistema e Eventos Discretos;
o eixo do tempo na vertical indica que ele é variável dependente.
Figura 1.7 Sequência de três Pacotes e seus respectivos eventos discretos: chegar na Fila (∎),
entrar no Servidor (∎) e sair do Servidor (∎).
Pode-se ver que, na Figura 1.7, o eixo X, da variável independente, refere-se a Pacotes que
chegam ao sistema sucessivamente. Já o eixo Y, da variável dependente, é o tempo e os
respectivos eventos discretos de cada Pacote: tempo de chegada na Fila, tempo de entrada
no Servidor e tempo de saída do Servidor.
Um evento discreto acontece em um momento do tempo. Neste caso, o tempo deixa de ser a
variável independente. Como o estado de um Pacote no sistema (na Fila ou no Servidor)
permanece constante entre os eventos, uma descrição completa do estado do sistema pode
ser obtido inserindo e processando Pacotes sucessivamente no sistema.
Quanto tempo leva para ir de carro de São Paulo ao Rio de Janeiro? Depende da velocidade do automóvel,
certo? Quanto mais rápido nos movermos, menos tempo levaremos para chegar ao destino. Na escola, muita
gente aprendeu uma relação chamada de “velocidade média”, que é a razão entre a distância e o tempo
necessário para percorrê-la. Usando essa equação, podemos estimar a velocidade média de um carro, de um
ônibus ou de um avião. Se, ao contrário, soubermos a velocidade média, podemos usar a mesma equação para
determinar, aproximadamente, o tempo da viagem. Fazendo isso, estamos, na verdade, usando um modelo
matemático simples (a definição matemática da velocidade média) para tentar prever determinado fenômeno
(tempo de viagem de São Paulo ao Rio).
Essa é a grande importância dos “modelos” na ciência. Eles permitem fazer previsões sobre determinados
fenômenos e processos. No caso da viagem, quanto melhor for a nossa estimativa inicial para a velocidade
média, melhor será a previsão sobre o tempo do percurso. Para estimarmos da melhor forma possível esse
valor, precisamos levar em conta um conjunto grande de parâmetros, como a possibilidade de haver
congestionamentos, acidentes, paradas para descanso, trechos de subida ou descida, e assim por diante.
Como não conseguimos ter certeza sobre todos esses parâmetros, nossa previsão de tempo de viagem, obtida
pelo modelo, sempre terá uma margem de erro. Em outras palavras, toda modelagem possui algum grau de
simplificação. A natureza é difícil demais.
Ao longo da história, cientistas têm tentado driblar essas dificuldades fazendo modelos cada vez mais
robustos, e temos tido bastante sucesso. Veja que, atualmente, uma sonda lançada para outro astro do
sistema solar terá seu caminho traçado com bastante precisão. É possível saber, de antemão, o dia e a hora da
chegada ao destino final.
Os modelos são tão importantes que estão por toda a parte na ciência. Podemos usar modelos matemáticos
em astrofísica, por exemplo, para estudar o comportamento futuro de um sistema de milhares de estrelas e
centenas de galáxias. Como esses corpos se comportarão no futuro? Quantos colidirão, ou se fundirão?
Quantos serão ejetados para fora de seus sistemas? E quanto tempo esse processo vai levar?
Podemos também fazer previsões acertadas sobre a forma correta de produzir um circuito elétrico num
aparelho de rádio capaz de transmitir e receber sinais eletromagnéticos, sustentando adequadamente as
comunicações, por exemplo. Usamos modelos para fazer a previsão do tempo pra amanhã e para estimar
cenários futuros para o clima do planeta. Também é possível usar modelos para reações químicas para tentar
entender como elas ocorrem. Em uma sala de raios-X, podemos usar modelos que nos auxiliam a determinar a
proteção adequada para diminuir a exposição do operador da máquina à radiação. Os exemplos são
incontáveis.
Sim, a natureza é complicada, e os modelos são simplificações. Mas essas simplificações, embora inevitáveis,
não tornam o processo pouco importante ou inútil, como todos esses exemplos demonstram. Modelar a
natureza é um dos grandes trunfos da humanidade, por meio da ciência.
À medida que vamos aprendendo mais e obtendo mais dados, cientistas que trabalham com os modelos da
área estão de prontidão para implementar esses dados e atualizar as previsões. Esse é o poder da ciência.
Adaptado de: Schappo, Marcelo Girardi. Por que confiamos em modelos matemáticos? Revista Questão de
Ciência. 2020. Disponível em: <https://www.revistaquestaodeciencia.com.br/questionador-questionado/
2020/04/09/por-que-confiamos-em-modelos-matematicos>. Acesso em: 9 Abr 2020.
Modelagem e Simulação Discreta 22
1.9 Revisão
(a) (b)
Figura 1.8 a) Simulação e seus conceitos e b) Modelo de Sistemas Computacionais.
1.10 Questões
1. Relacione as perguntas abaixo com os estágios da construção de modelos para simulação de sistemas
da Tabela 1.1, justificando sua resposta:
a) Como se relacionam os resultados com os objetivos?
b) Por que o problema está sendo estudado?
c) Quais são as hipóteses e pressupostos?
d) Quais serão as respostas que o estudo espera alcançar?
2. Relacione as Figura 1.8-a e Figura 1.8-b.
3. Faça uma única figura representando as Figura 1.8-a e Figura 1.8-b.
4. Faça um resumo do texto do Exemplo 2.2 com até 1000 caracteres?
5. Crie 7 palavras-chaves para o texto do Exemplo 2.2?
6. Relacione a Figura 1.7 com o texto do Exemplo 2.2.
1.11 Exercícios
1. Uma caixa d’água cúbica de aresta 2 m recebe água na taxa de 2 L/s. Faça um modelo matemático para
calcular o volume de água na água em função do tempo.
2. Uma caixa d’água, de formato cônico equilátero, recebe água na taxa x L/s. Faça um modelo matemático
para calcular o volume de água na água no cone em função do tempo.
3. Dois automóveis, em uma estrada, distam L m um do outro. Faça um modelo matemático para descrever
a trajetória destes veículos, sabendo que um tem o dobro da velocidade do outro. Quando eles se
encontram?
4. Que suposições e simplificações foram necessárias para modelar os problemas anteriores e resolvê-los?
5. Aplicar as etapas do processo de construção de modelos nos problemas anteriores.
6. Aplicar as etapas do processo de construção de modelos na Pilha de Execução de Programas C (Heap,
Stack, Global, Program Code).
7. Aplicar as etapas do processo de construção de modelos na Linguagem SQL (DDL, DML, DCL).
Modelagem e Simulação Discreta 23
2 SISTEMAS DE FILA
Em termos conceituais, Sistemas de Fila são compostos por uma ou mais Filas e por um
ou mais Servidores, como exposto na Tabela 2.1. O Pacote é a unidade que requer
atendimento.
A Figura 2.1 representa graficamente a estrutura de um Sistema de Fila, nela pode-se ver
seus componentes, suas inter-relações e seus parâmetros. Nesta figura estão identificados
seis parâmetros básicos dos Sistemas de Fila, que são descritos na Tabela 2.2: 1) processo de
chegada; 2) distribuição do tempo de serviço; 3) número de Servidores; 4) capacidade do
Sistema; 5) tamanho da população; 6) disciplina de Serviço.
Figura 2.1 Representação gráfica de um Sistema de Fila única com múltiplos servidores, sua
estrutura, parâmetros básicos e inter-relações entre seus componentes (Jain, 1991).
Modelagem e Simulação Discreta 24
Os seis parâmetros dos Sistemas de Fila, apresentados na Figura 2.1 e na Tabela 2.2, são
resumidos pela Notação de Kendall através dos símbolos A/B/c/K/m/Z, descritos na Tabela
2.3.
Tabela 2.3 Descrição dos parâmetros da notação de Kendall para Sistemas de Fila e valores
dos seus parâmetros
Símbolo Descrição Valores
distribuição estatística dos intervalos de M – Processo de Markov (os pacotes chegam e
A
tempo entre chegadas saem um de cada vez)
B distribuição estatística do tempo de serviço M – Processo de Markov
número de servidores ou capacidade de
c 1, 2, ..., ∞6
atendimento
número máximo de pacotes permitidas no
K 1, 2, ..., ∞
sistema
m tamanho da população de pacotes 1, 2, ..., ∞
FIFO – o primeiro que chega é o primeiro a ser
Z Disciplina da fila
atendido
A disciplina de fila FIFO (primeiro que chega é o primeiro a sair do sistema) será a adotada
para os Sistemas Computacionais, por ser uma simplificação razoável.
Exemplo 2.1 Escalonamento FIFO (First in First out – Primeiro a Chegar – Primeiro a Sair)
O escalonamento FIFO (não-preemptivo7) é o de implementação mais simples. Desta forma, o primeiro pacote
que chega é o primeiro a ser enviado para o Servidor. Os pacotes são organizados em uma fila, que funciona
6 Os valores infinitos adotados para c, K e m são simplificações para evitar cálculos de probabilidade com reposição, simplificam os mode-
los sem afetar suas aplicações e suas interpretações – os resultados justificam tais aproximações.
7 No escalonamento não-preemptível um pacote não pode ser retirado do Servidor.
Modelagem e Simulação Discreta 25
Para este conjunto de pacotes o tempo de espera do pacote p 1 é de 0 (zero) unidades de tempo; para o pacote
p2 de 3 unidades de tempo; para o pacote p3 de 9 unidades de tempo; e para o pacote p 4 de 13 unidades de
tempo. O tempo médio de espera na fila é de (0+3+9+13)/4, que é igual a 6,25 unidades de tempo.
A disciplina de fila SJF(Shortest Job First – Menor Tarefa Primeiro), o pacote da Fila que tem o
menor tempo de serviço é encaminhado ao Servidor, Exemplo 2.2.
Exemplo 2.2 Escalonamento SJF – Shortest Job First (Menor Tarefa Primeiro)
Neste escalonamento, o pacote da Fila que tem o menor tempo de serviço é encaminhado ao Servidor.
Considere o seguinte conjunto de pacotes:
Pacote na Fila Tempo de Serviço (ut)
p1 3
p2 6
p3 4
p4 5
Supondo que a ordem de chegada dos pacotes seja: p 1, p2, p3 e p4, e que todos eles estão na Fila. Conforme a
política SJF, a ordem de execução dos pacotes é mostrado diagrama de tempo abaixo.
Neste escalonamento, o tempo de espera do pacote p 1 é de 0 unidade de tempo (ut); para o pacote p 3 é de 3
ut; para o pacote p4 é de 7 ut; e para o pacote p 2 é de 12 ut. O tempo médio de espera na Fila é de 5,5 ut,
(0+3+7+12)/4.
Segundo Silberschatz, trata-se de um escalonamento ótimo, em média, neste escalonamento, os pacotes
esperam menos para serem processados pelo Servidor.
O modelo Fila+Servidor é o mais simples dos Sistemas de Fila, possui uma única Fila e
apenas um Servidor, a Figura 2.2 é o seu símbolo.
Modelagem e Simulação Discreta 26
Figura 2.2 Representação gráfica de Sistemas de Fila simples destacando sua estrutura, os
processos de chegada e saída, a formação da Fila com pacotes em espera e o Servidor.
Este modelo é a unidade básica da simulação discreta, embora possua estrutura simples, ele
é bem estudado e tem sido bem-sucedido em representar o comportamento dos Sistemas
Computacionais. Este modelo pode ser associados em série e, ou, em paralelo para simular
Sistemas Computacionais, como circuitos integrados, componentes de hardware e software e
rede de computadores. Ele pode ser usado para analisar os recursos individuais de sistemas
de computação, por exemplo: se instruções a serem processadas por uma CPU são mantidas
em uma memória. A CPU pode ser modelada por um Sistema de Fila, onde a memória é a Fila
e a CPU é o Servidor do sistema.
Inicialmente, o Sistemas de Fila está ocioso, não há pacote na Fila e nem no Servidor. A Fila
está vazia e o Servidor ocioso. O primeiro pacote que chega no sistema passa pela Fila e vai
para o Servidor. A Fila continua vazia e o Servidor fica ocupado. À medida que chegam mais e
mais pacotes, em geral, há formação de Fila e o Servidor processa continuamente os pacotes
que chegam.
Vale destacar que os eventos discretos, chegar na Fila, entrar no Servidor e sair do Servidor,
serão de grande valia nos Modelos Conceitual e Computacional de Sistemas de Fila M/M/1.
Em Sistemas de Fila M/M/1, pode-se considerar dois tipos de grandezas para descrever seu
comportamento. A primeira é o número de pacotes na Fila e no Servidor. A segunda é o
tempo dos pacotes na Fila e no Servidor. Essas variáveis são aleatórias e são denominadas
variáveis fundamentais dos Sistemas de Fila M/M/1, e estão representadas na Figura 2.3 e
descritas na Tabela 2.4.
1. no nível superior, tem-se os processos que ocorrem nestes sistemas, a chegada, a espera, o serviço
e a saída
2. no nível abaixo, destacam-se as taxas de chegada (λ) e de serviço (μ)
3. nível intermediário, estão os números do sistema, nq, ns e n, número de pacotes na Fila, no
Servidor e no Sistema de Fila, respectivamente, n = nq + ns
4. no próximo nível, estão os eventos discretos do sistema, a saber, chegar na Fila, entrar no Servidor
e sair do Servidor
5. no último nível estão os tempos do sistema, w, s e r, tempo de espera na Fila, tempo de
permanência no Servidor e tempo total no Sistema de Fila, respectivamente, sendo r = w + s. O
intervalo entre chegadas é a diferença entre os tempos de duas chegadas sucessivas.
Modelagem e Simulação Discreta 27
Figura 2.3 Representação gráfica das variáveis aleatórias fundamentais dos Sistemas de Fila
M/M/1, adaptado de Jain (1991).
Exemplo 2.3 Representação gráfica das variáveis aleatórias temporais relacionadas aos eventos dos Sistemas
de Fila M/M/1
Estas variáveis temporais permitem calcular as estatísticas do sistema e seu estudo detalhado.
Tabela 2.4 Variáveis aleatórias fundamentais dos Sistemas de Fila Simples (Jain, 1991)
Variável Descrição
λ taxa média de chegada na Fila por unidade de tempo
μ taxa média de serviço por Servidor por unidade de tempo
n número de pacotes no Sistema de Fila, na Fila e no Servidor
nq número de pacotes esperando na Fila ou comprimento da Fila
ns número de pacotes no Servidor ou número de pacotes sendo atendidos
r tempo de resposta do sistema ou tempo no Sistema de Fila
w tempo de espera na Fila
s tempo de permanência no Servidor
Modelagem e Simulação Discreta 28
Na Tabela 2.5 estão as Leis de Little, Equações 2.1, 2.2 e 2.3. Em termos práticos, estas leis
permitem converter valores de Tempo no Sistema em seus respectivos valores de Número no
Sistema.
Condição de estabilidade
• se pacotes não são perdidos devido à capacidade do sistema, o número médio de pacotes em um
sistema está relacionado com seu tempo médio de resposta pela equação:
Modelagem e Simulação (M&S) são importantes na Ciência & Tecnologia & Inovação pois são capazes de
representar sistemas reais por meio de modelos matemáticos, permitem representar sua dinâmica por meio de
simulação, explorar o seu comportamento de uma forma articulada que muitas vezes não é possível, ou
envolve riscos no mundo real.
A M&S usa diversas áreas de Ciência da Computação, bem como são influenciadas pela Teoria de Sistemas,
Engenharia de Sistemas e Engenharia de Software, dentre outras áreas do conhecimento. Esta base é tão
diversa quanto a da Gestão e da Engenharia, reunindo elementos de arte, engenharia e ciência de uma forma
complexa e única.
A M&S está calcada em modelos, que podem ser compostos de diferentes unidades vinculadas ao
cumprimento de um objetivo específico. Por isso M&S também pode ser chamadas de soluções de modelagem.
De modo mais geral, modelagem e simulação são metodologias chave para atividades de engenharia de
sistemas, pois a representação de sistema em um modelo legível por computador permite que os engenheiros
reproduzam o comportamento do sistema, uma maneira de apoiar as atividades de engenharia de sistemas
em seu processo de tomada de decisão.
Fonte: Adaptado de Modeling and simulation (en.wikipedia.org/wiki/Modeling_and_simulation).
2.2 Revisão
2.3 Questões
Na Teoria das Filas, os pacotes entram e saem no sistema de modo aleatório. Diferentes
pacotes chegam de modo imprevisível, ao acaso. O sistema os processa, um a um,
demorando mais tempos com uns do que com outros. O tempo dedicado a cada pacotes
também é imprevisível, é um tempo aleatório. Toda vez entra ou sai pacote do sistema ele
muda de estado. Pode-se afirmar que o estado de sistema é sua quantidade de pacotes.
Estes processos aparecem em inúmeras aplicações, como Sistemas de Filas, redes de
comunicação de computadores e engenharia de desempenho. Nestas aplicações, os
processos estocásticos têm estados discretos.
Para representar os SFs, seus estados e suas transições, é usado o Modelo de Markov, uma
maneira de representar sistemas e processos estocásticos do mundo real que codificam
dependências e atingem um estado estacionário ao longo do tempo. Sistemas de Markov são
modelados como uma sequência de estados e, a medida que o tempo passa, o sistema que
se move entre os estados com uma probabilidade específica. Como os estados estão
conectados, eles formam uma cadeia, essa forma de modelar o mundo é chamada de Cadeia
de Markov.
Uma Cadeia de Markov é o tipo mais simples de Modelo de Markov, onde todos os estados
são observáveis e as probabilidades convergem ao longo do tempo. Com isso, pode-se
descreve o comportamento de um SF ao longo do tempo. Observe que a Cadeia de Markov
tem um único estado, o valor de n, a cada ponto do tempo pode-se ter transições para n+1
ou n-1. Diz-se que Cadeias de Markov tem memória de curto prazo, dela pode-se saber a
última transição (chegou ou partiu pacote) ou a próxima transição (chegará ou partirá
pacote). Com isso, a trajetória até o estado atual não afeta a próxima transição, a única coisa
que pode influenciar a próxima transição é o estado atual. Um outro fato observável é que,
pode-se chegar ao estado atual de muitas maneiras diferentes, sempre combinando
chegadas/partidas.
As Cadeias de Markov nos quais as transições são discretas e restritas aos estados vizinhos
são Processos Nascimento Morte. Eles são utilizados para modelar sistemas nos quais os
pacotes chegam uma de cada vez e não em lotes. Por exemplo, o número de pacotes em
uma Fila com um único Servidor e chegadas individuais (e não em lotes) pode ser
Modelagem e Simulação Discreta 32
representada como um Processo Nascimento Morte. Uma chegada na Fila (nascimento) faz
com que o estado mude parar n+1 e uma partida da Fila (morte), faz com que o estado mude
para n-1.
Os estados futuros são condicionados pelo estado da cadeia antes de cada transição. Uma
característica das Cadeias de Markov regular é que, ao longo de um número grande o
suficiente de iterações, todas as probabilidades de transição convergirão para um valor e
permanecerão inalteradas. Isso significa que, após um número suficiente de iterações, a
probabilidade de terminar em qualquer estado da cadeia é a mesma, independentemente de
onde ela começou. Então, quando a cadeia atinge este ponto, podemos dizer que as
probabilidades de transição atingiram um estado estacionário. O intervalo de tempo em que
a cadeia atinge um estado estacionário depende das transições possíveis entre os estados e
de suas probabilidades.
Apenas Cadeias de Markov regulares convergem com o tempo, permitindo obter resultados e
tomar decisões a respeito dos sistemas por elas modelados. As demais, as Cadeias de
Markov que não convergem com o tempo, não são de interesse da Engenharia pois não
geram resultados aplicáveis.
Os Sistemas de Fila M/M/m podem ser modeladas através de Cadeias de Markov, e neste
caso, considera-se que os tempos entre chegadas e atendimento são independentes,
igualmente distribuídos (iid) e exponencialmente distribuídos.
O Sistema de Fila M/M/1 é o mais simples, constituído por uma Fila e um Servidor, em que os
pacotes chegam de acordo com uma Cadeia de Markov e o tempo para atendê-las é
distribuído exponencialmente, Figura 3.1. O modelo também assume capacidade infinita do
sistema, os pacotes são provenientes de uma população infinita e a disciplina da fila é FIFO.
Quando o sistema está no estado n, os novos processos chegam a taxa λ n-1 e partem com
taxa de serviço μn, n > 0. Assumindo que os intervalos entre chegadas e os tempos de
serviço são exponencialmente distribuídos, a probabilidade de estado estacionário de um
Processo Nascimento e Morte de estar no estado n é dada pelo Teorema 1.1.
Teorema 1.1 A probabilidade do estado estacionário p n de um processo nascimento morte
estar no estado n, n > 0, é dada pela Equação 3.1
Modelagem e Simulação Discreta 33
λ λ λ ⋯λ λ
pn = p 0 μ0 μ1 μ2 ⋯μn−2 μn−1 3.1
1 2 3 n−1 n
A Fila de Sistemas de Fila M/M/1, em que os pacotes podem aumentar ou diminuir um pacote
de cada vez. Este sistema pode ser modelado pelo Processo Nascimento Morte com taxas
homogêneas de nascimento λ e de morte μ. O diagrama de estado das taxas de transição
deste caso é mostrado na Figura 3.2.
Figura 3.2 Diagrama de transição de estado de Sistemas de Fila M/M/1 destacando o tamanho
da Fila e os valores constantes das taxas de transição λ e μ.
O estado desta Fila é dado pelo seu número de pacotes n, teoricamente n ∈ [0,∞) pois a
capacidade do sistema é infinita. Para λi = λ e μi = μ, i ∈ [0,n), o Teorema 1.1 nos dá a
seguinte expressão para a probabilidade de n pacotes do sistema:
n
pn= p0 λn 3.2
μ
A quantidade λ/μ é chamada de intensidade de tráfego e é indicada pelo símbolo ρ. Assim,
λ
ρ= μ 3.3
n
pn = p 0 ρ 3.4
Uma vez que a soma de todas probabilidades deve ser igual a 1, tem-se a seguinte
expressão para a probabilidade de zero pacotes na Fila do sistema, cuja demonstração está
no Capítulo 16 :
p0 =1−ρ 3.5
Na Tabela 3.1 estão os resultados do Modelo Analítico da Teoria das Filas aplicados a
Sistemas de Fila M/M/1. Estas estatísticas são obtidas a partir das equações acima
(demonstração no Capítulo 16 ), seu uso permite determinar várias medidas da efetividade
destes sistemas, com a finalidade de indicar seu desempenho.
Tabela 3.1 Resultados do Modelo Analíticos de Sistemas de Fila M/M/1 segundo a Teoria das
Filas (Jain, 1991)
Modelagem e Simulação Discreta 34
- Parâmetros λ, μ
- Intensidade de tráfego λ
ρ= μ
- Condição de estabilidade ρ< 1
1 Probabilidade de zero pacote no Sistema de Fila p0=(1−ρ)
2 Probabilidade de n pacotes no Sistema de Fila pn=(1−ρ)ρn , n∈ℕ
ρ
3 Número médio de pacotes no Sistema de Fila E[n]=
1−ρ
ρ
4 Variância do número médio de pacotes no Sistema de Fila V [ n]= 2
(1−ρ)
{
2
1−ρ ,n q=0
5 Probabilidade de nq pacotes na Fila P[nq ]= n +1
(1−ρ)ρ , nq >0 q
ρ2
6 Número médio de pacotes na Fila E[nq ]=
1−ρ
2 2
ρ (1+ρ−ρ )
7 Variância do número médio de pacotes na Fila V [nq ]=
(1−ρ)2
−μ(1−ρ)r
8 FDA do tempo de resposta F( r)=1−e
1
9 Tempo médio de resposta E[r ]=
μ (1−ρ)
1
10 Variância do tempo de resposta V [r ]= 2 2
μ (1−ρ)
100
11 Percentil q do tempo de resposta w q=E [r ]ln ( )
100−q
12 Percentil 90 do tempo de resposta w 90=2,3 E[r ]
13 FDA do tempo de espera F( w)=1−ρ e−μ (1−ρ)w
ρ
14 Tempo médio de espera E[w ]= =ρ E[r ]
μ (1−ρ)
(2−ρ)ρ
15 Variância do tempo de espera V [w]=
μ 2 (1−ρ)2
E[w ] 100 ρ
16 Percentil q do tempo de espera max {0, ρ ln ( )}
100−q
1
20 Número médio de pacotes executadas no período
1−ρ
ρ(1+ρ)
21 Variância do número médio de pacotes executados no período
(1−ρ)3
1
22 Duração média do período
μ (1−ρ)
1 1
23 Variância da média do período − 2
μ (1−ρ) μ (1−ρ)2
2 3
3.3 Revisão
Modelagem e Simulação Discreta 36
3.4 Questões
3.5 Exercícios
1) Pacotes que chegam em um Sistema de Fila M/M/1 com intervalo entre chegadas λ = { 8, 5, 12, 15, 8,
11, 9, 10, 7, 6 } e tempos de serviço μ = { 11, 10, 9, 12, 9, 11, 14, 8, 9, 10 }, calcule os resultados
analíticos deste sistema conforme a Tabela 3.1.
2) Compare os resultados analíticos do exercício 2 considerando os seguintes cenários:
3) Repita o Exemplo 3.1 para pacotes que chegam a uma taxa média de 600 pps em um gateway que
processa um pacote em 1 milissegundo.
4) Qual a tamanho do buffer para que a perda de pacotes em um gateway (λ = 800 pps e µ = 700 pps) seja
menor do que um pacote por milhão?
Modelagem e Simulação Discreta 37
O modelos de Sistemas de Fila A/B/c/K/m/Z podem ser simulados por computador e, para
isso, é necessário desenvolver os modelos conceituais e computacionais destes sistemas.
Inicialmente, por uma questão de simplicidade, será desenvolvida uma metodologia para
realizar simulação de Sistemas de Fila M/M/1.
A Figura 4.1 ilustra a representação gráfica de Sistemas de Fila M/M/1 e seus elementos
constituintes: o Sistema de Fila (SF), uma Fila (F) e um Servidor (S). Os pacotes chegam na
Fila, um por vez, o Servidor os atendem também um por vez. Um pacote aguardará na Fila se
o Servidor estiver ocupado, caso contrário, será atendido. Uma vez atendido, o pacote deixa
o Sistema de Fila.
Figura 4.1 Modelo de Sistemas de Filas M/M/1 (SF) e seus elementos constituintes: a Fila (F), o
Servidor (S) e os pacotes aguardando processamento (retângulos cinzas).
A partir do Sistema de Fila M/M/1, pode-se derivar modelos dos demais Sistemas de Fila
M/M/c/K/m. Embora simples, os Sistemas de Fila M/M/1 fornecem informações úteis sobre o
desempenho de sistemas reais.
Primeiramente será apresentado e discutido o Modelo Conceitual dos Sistemas de Fila M/M/1
e, em seguida, o seu Modelo Computacional será apresentado e implementado em C++ e
Javascript. Por fim, será simulado e apresentado seus resultados na forma de tabela. A
dinâmica temporal dos resultados também será apresentada em HTML5, permitindo o
acompanhamento gráfico de suas variáveis de entrada, de estado, de saída e suas
estatísticas.
Os pacotes chegam nos Sistemas de Fila um por vez e são processadas em um Servidor
também um por vez. Os pacotes não chegam em lotes nem são processadas em lotes. Desta
forma, os Sistemas de Fila possuem as variáveis básicas:
Variável Descrição
τ tempo entre chegadas, isto é, o intervalo de tempo entre duas chegadas sucessivas
λ taxa média de chegada por unidade de tempo
s tempo de serviço, tempo requerido para processar pacotes ou tempo no Servidor
μ taxa média de serviço do Servidor por unidade de tempo
1. a relação entre a taxa de chegada (λ) e o intervalo entre chegadas (τ) é λ = 1/E[τ]8
2. a relação entre a taxa de serviço (μ) e o tempo de serviço (s) é μ = 1/E[s]
A Figura 4.2 ilustra o Modelo Conceitual de Sistemas de Fila M/M/1 adaptado de Jain (1991) e
nela pode-se destacar cinco níveis:
1. no nível superior, tem-se os processos que ocorrem nestes sistemas, a chegada, a espera, o serviço
e a saída
2. no nível abaixo, destacam-se as taxas de chegada (λ) e de serviço (μ)
3. nível intermediário, estão os números do sistema, nf, ns e nsf, número de pacotes na Fila (F), no
Servidor (S) e no Sistema de Fila (SF), respectivamente, sendo nsf = nf + ns
4. no próximo nível, estão os eventos discretos do sistema, a saber, tempo de chegada na Fila ( cpf),
início do serviço no Servidor (eps) e fim do serviço no Servidor (sps)
5. no último nível estão os tempos do sistema, tf, tps e tsf, tempo de espera na Fila, tempo de
permanência no Servidor e tempo total no Sistema de Fila, respectivamente, sendo tsf = tf + tps.
O intervalo entre chegadas é a diferença o tempo de chegada e o tempo da chegada anterior.
Figura 4.2 Modelo Conceitual de Sistemas de Fila M/M/1 com seus processos, variáveis de
entrada e saída, números e eventos em cinco níveis, adaptado de Jain (1991).
A Figura 4.2 é uma ilustração estática do Modelo Conceitual de Sistemas de Fila M/M/1. Mas
nela está implícito os aspectos dinâmicos deste modelo. Pacotes chegam continuamente no
8O símbolo E(x) é a esperança matemática ou valor esperado da variável aleatória x. Dada uma fdp f(x) ou p(x i), E(x) pode
+∞ n
ser calculada pelas equações E( X )= ∫ x f ( x )dx , X ∈ℝ e E(X )=∑ x i p (x i) , X ∈ℕ , respectivamente.
−∞ i=1
Modelagem e Simulação Discreta 39
sistema, os pacotes um a um, são encaminhados para o Servidor e após, ser processadas,
saem do sistema. Este fluxo permite gerar uma tabela com os valores de cpf, eps e sps,
discutida abaixo9.
O Exemplo 4.1 ilustra uma aplicação do Modelo Conceitual de Sistemas de Fila M/M/1 com
suas entradas (ic = 1/λ e ts = 1/μ), os tempos de eventos (cpf, eps e sps) são suas
variáveis de estado e a dinâmica do sistema obtida a partir dos seus eventos (chegada, início
do serviço e fim do serviço). A partir dos valores destas variáveis é possível calcular os
indicadores do Sistema de Fila e avaliar seu comportamento.
Exemplo 4.1 Sejam N = 10 pacotes que chegam em um Sistema de Fila M/M/1 com intervalo entre chegadas ic
= { 8, 5, 12, 15, 8, 11, 9, 10, 7, 6 } e tempos de serviço ts = { 11, 10, 9, 12, 9, 11, 14, 8, 9, 10 }, ic e ts em
segundos (s). A simulação do sistema é feita conforme mostrado na Tabela 4.1.
9As variáveis aleatórias, intervalo médio entre chegadas sucessivas (ic) e o tempo médio para processar um pacote (ts), é
que são usadas no Modelo Conceitual de Sistema de Fila M/M/1. Seus valores são ic = 1/λ e ts = 1/μ. A unidade adotada
tanto para λ quanto para μ é pacote/segundo (p/s ou pps) – taxa temporal. A unidade tanto de ic quanto de ts é
segundo/pacote (s/p) – a frequência destes processos.
Modelagem e Simulação Discreta 40
Os dados de entrada para a simulação de Sistemas de Fila M/M/1 são a taxa média de
chegada ou os valores de ic de cada pacote e também a taxa média de serviço ou os valores
de ts de cada pacote. As unidades de ic e ts são segundo/pacote (s/p). Os valores de ic =
1/λ e ts = 1/μ.
O número de simulação (N) também é um dado de entrada. No Exemplo 4.1 foram simulados
10 pacotes. O valor adequado de N será estudado mais adiante.
Dados medidos podem ser encontrados na web. O infográfico da Nasdaq de 2020 e 2021
apresentados na Figura 4.3, é o tráfego por minuto de plataformas e aplicativos mundiais
nestes anos. Com estes dados pode-se estimar o valor de ic destas plataformas e aplicativos,
como mostra o Exemplo 4.2.
Modelagem e Simulação Discreta 41
(a) (b)
Figura 4.3 Tráfego em plataformas e aplicativos a cada minuto em: (a) 2020 e (b) 2021 (Domo 8, 2020; Domo 9,
2021).
Exemplo 4.2 Com os dados da Figura 4.3a, referente ao tráfego por minuto de plataformas e aplicativos
mundiais no ano de 2020, pode-se estimar o valor de ic destas plataformas e aplicativos, como ilustra a Tabela
4.2.
Tabela 4.2 Estimativas dos valores ic de alguns aplicativos obtidos a partir da Figura 4.3a
Plataforma Pacotes por Minuto λ (p/s) ic (s/p)
Amazon 6.659 111 0,00900
Facebook 150.000 2500 0,0004000
Zoom 208.333 3472 0,0002880
Instagram 347.222 5787 0,0001728
Comprimentos máximos de itens de uma mensagem do aplicativo Instagram, em caracteres, são destacados
abaixo10:
Comprimentos máximos de itens de uma mensagem do aplicativo Twitter, em caracteres, são destacados
abaixo (sem DM):11
Exemplo 4.6 A memória RAM GDDR6X da Nvidia GeForce RTX 3080 tem taxa de transferência de 19 Gb/s. Qual
o tempo de serviço desta RAM para pacotes de 5 MB?
Tamanho do pacote = 5 MB
Taxa de serviço:
10 Fonte: https://sproutsocial.com/insights/contador-de-caracteres-nas-redes-sociais/#instagram
11 Fonte: https://sproutsocial.com/insights/contador-de-caracteres-nas-redes-sociais/#twitter
Modelagem e Simulação Discreta 42
Exemplo 4.7 Sabe-se que a HD Samsung 860 EVO de 1 TB, com 550 MB/s (leitura sequencial) e 520 MB/s
(escrita sequencial) está sendo usada para leitura e gravação de arquivos de tamanhos médio iguais a 2,5 MB.
Qual o tempo de serviço (ts) desta HD quando usada para leitura (ts leitura)? Qual o valor de tsgravação? Qual o
tempo de serviço médio desta HD?
Exemplo 4.8 A Nvidia GeForce RTX 3080 tem taxa bruta de 29,77 Teraflops (TFLOPS 12) de performance
computacional. Qual o tempo de serviço desta placa para multiplicação de matrizes quadradas de tamanho
5000?
Exemplo 4.9 A Nvidia GeForce RTX 3080 tem taxa bruta de 29,77 Teraflops (TFLOPS) de performance
computacional. Qual o tempo de serviço desta placa para multiplicação de matrizes quadradas de tamanho
5000 utilizando o algoritmo de Strassen ≈ O(n2,807)?
12 FLOPS - FLoating-point Operations per Second (operações de ponto flutuante por segundo), usado para determinar o
desempenho de um computador, especificamente no campo de cálculos científicos; similar a instruções por segundo.
Modelagem e Simulação Discreta 43
O estado inicial do Sistema de Fila é de Fila vazia e Servidor ocioso 13 (nf = ns = 0). Para
iniciar a contagem do tempo, o cronômetro é zerado (cpf = eps = sps = 0). No Exemplo 4.1,
após 8 s chega o primeiro pacote (p = 1, ic = 8 s/p, ts = 11 s/p), ele chega na Fila em cpf =
8 s. Como o Servidor está ocioso, ele recebe o pacote em eps = 8 s e demora 11 s para
processá-lo, assim sps = 8+11 = 19 s.
Para fins computacionais, uma maneira prática de tratar o primeiro pacote é fazer:
ic = ts = cpf = eps = sps = nf = ns = 0
Quando o segundo pacote chega no Sistema de Fila no Exemplo 4.1, o Servidor pode estar
ocioso ou ocupado. Se ele estiver ocioso, ele recebe o pacote e o valor de eps é igual ao de
cpf, ambos do segundo pacote, Figura 4.4.a. Se ele estiver ocupado, esta situação perdurará
até o tempo sps do pacote anterior e, assim, eps é igual ao valor de sps do pacote anterior,
Figura 4.4.b.
13 O estado inicial do Sistema de Fila para o início da simulação (Fila vazia, Servidor ocioso, cronômetro zerado) é de ordem
prática e busca contornar as condições iniciais reais do sistema. Como consequência, a simulação apresenta grande
variabilidade nos resultados iniciais, denominado período transiente, no qual observa-se fortes flutuações nos valores
simulados com tendência de crescimento. Em seguida, o comportamento da simulação apresentam flutuações menores e
em torno de valores médios, é o denominado período estacionário.
Modelagem e Simulação Discreta 44
Desta forma, para o cálculo de eps[p], p ∈ [2,N], é necessário considerar duas alternativas,
a saber:
1. cpf[p] > sps[p-1] então eps[p] = cpf[p], o Servidor está ocioso e o pacote é enviado a ele (Figura
4.4.a)
2. cpf[p] ≤ sps[p-1] então eps[p] = sps[p-1], o pacote aguarda na Fila e será enviado ao Servidor
assim que ele finalizar o pacote anterior (Figura 4.4.b)
(a) (b)
Figura 4.4 Pacote chegando em Sistemas de Fila: a) Servidor ocioso quando cpf[p] > sps[p-1]
e eps[p] = cpf[p]; b) Servidor ocupado quando cpf[p] ≤ sps[p-1] e eps[p] = sps[p-1].
Quando o segundo pacote sai do Servidor do Sistema de Fila no Exemplo 4.1 o tempo
transcorrido é igual ao valor de eps acrescido de ts, ambos do segundo pacote.
As variáveis aleatórias dos Sistemas de Fila M/M/1, suas equações ou seus valores esperados
estão listadas nas Tabela 4.3, adaptado de Chung (2004). Estas equações podem ser
adaptadas para Sistemas de Filas A/B/c/K/m/Z.
Tabela 4.3 Valores das variáveis aleatórias dos Sistemas de Fila M/M/1 e seus valores médios,
para p ∈ [1,N].
1
E(nf) número médio de pacotes na Fila E(n f )=
N
∑ n f [ p] 4.5
1
E(ns) número médio de pacotes no Servidor E(n s)=
N
∑ ns [ p] 4.6
1
E(nsf) número médio de pacotes no Sistema de Fila E(n sf )=
N
∑ n sf [ p] 4.7
1
E(tf) tempo médio de espera de pacotes na Fila E(t f )=
N
∑ tf [ p ] 4.8
1
E(ts) tempo médio de processamento de pacotes no Servidor E(t s )=
N
∑ t s [ p] 4.9
1
E(tsf) tempo médio de processamento de pacotes no Sistema de Fila E(t sf )=
N
∑ t sf [ p] 4.10
1
U utilização do Servidor U=
T
∑ ts[ p ] 4.11
Os pacotes no Sistema de Fila incluem as que estiverem na Fila e também a que estiver no
Servidor. Os pacotes na Fila excluem o que estiver no Servidor. Os pacotes no Servidor
excluem os que estiverem na Fila.
A simulação processa tempos e eventos, não são medidas operacionais, são etapas
intermediárias para estimar tf, tps, nf, ns e U, estatísticas úteis de Sistemas de Fila que
permitem sua avaliação técnica e suas aplicações em engenharia.
Modelagem e Simulação Discreta 46
Para calcular o valor de nf é necessário comparar os valores de cpf de um dado pacote com
os de sps dos pacotes anteriores. Considerando o Servidor inicialmente ocioso, tem-se:
• o pacote p = 1, o primeiro a chegar no Sistema de Fila e vai para o Servidor, isto é nf[1] = 0
• quando o segundo pacote (p = 2) chegar no Sistema de Fila, o Servidor pode estar ocioso ou ocupado.
Se o Servidor estiver ocioso, não há pacote na Fila, então cpf[2] ≥ sps[1] e nf[2] = 0. Se o Servidor
estiver ocupado então cpf[2] < sps[1] e nf[2] = 1
• o terceiro pacote (p = 3), ao chegar no Sistema de Fila, se cpf[3] ≥ sps[2] então o Servidor está ocioso e
nf[3] = 0, caso contrário nf[3] = 1, pelo menos o pacote 2 está na Fila. Se cpf[3] < sps[1] então o
primeiro pacote ainda está na Fila e nf[3] = 2.
Generalizando, quando o p-ésimo pacote chega no Sistema de Fila, o tamanho da Fila n f[p]
será igual à contagem dos casos em que cpf[p] < sps[c], c ∈ [1,p-1], Equação 4.13 e Figura
4.5.
p−1
n f [ p ]=∑ 1 , cpf [ p ]<sps [c ] 4.13
c=1
A Figura 4.5 mostra 5 pacotes na reta do tempo na qual são destacados seus valores de cpf,
eps e sps. Ao sair do Sistema de Fila, o pacote p-4 dá lugar ao processamento do pacote p-3
e, sequencialmente, chegam os pacotes p-2, p-1 e p. Como o valor de cpf[p] é menor do
que sps[p-1], sps[p-2] e sps[p-3], o valor de nf[p] é igual a 3.
Figura 4.5 Valor de cpf do pacote p em relação aos valores de sps dos pacotes anteriores,
indicando 3 pacotes na Fila, ou seja, cpf[p] > sps[p-4].
Exemplo 4.11 Representação gráfica dos valores de n f relacionadas aos eventos e pacotes dos Sistemas de Fila
M/M/1
Modelagem e Simulação Discreta 47
Na figura acima estão representados seis pacotes de um Sistema de Fila, P i-5, Pi-4, Pi-3, Pi-2, Pi-1 e Pi. Cada pacote
com seus três tempos dos eventos discretos: ∎ - tempo de chegada na Fila (cpf), ∎ - tempo de início de serviço
(eps) e ∎ - tempo de fim de serviço (sps).
Um pacote, ao chegar no Sistema de Fila, pode ir para o Servidor ou esperar na Fila. Ele espera sempre que
cpfi ≤ spsi-1. Pode ter mais de um pacote na Fila e, para contá-los é necessário comparar os valores de cpf
com os valores de eps de todos os pacotes que o antecederam. A começar pelo seu antecessor.
Na figura acima, cpfi é menor do que epsi-1, epsi-2, epsi-3 e epsi-4, logo nf = 5, ou seja, quando o Pacote P i entra
na Fila ele encontra outros 5 esperando para serem atendidos.
A função void Nf( int ), Algoritmo 4.1, implementa a Equação 4.13 para calcular nf dos
pacotes simulados.
Algoritmo 4.1 Código em C++ para calcular nf de Sistemas de Fila M/M/1: a) usando o
comando for e b) usando o comando while (mais eficiente).
void Nf( int p ){ void Nf( int p ){
nf[p] = 0; int c = p-1;
for( int c = 0; c < p-1; c++ ) nf[p] = 0;
if( cpf[p] < sps[c] ) nf[p] += 1; while( cpf[p] < sps[c] ){
} nf[p] += 1;
c--;
}
}
(a) (b)
∑ t s [ p] 1
N
4.15
U=
p=1
T
=
T
∑ t s[ p ]
p=1
p0 =1−U 4.16
O algoritmo Algoritmo 4.2 implementa a Equação 4.15 para calcular U e depois calcular p0.
As Tabela 4.4, Tabela 4.5 e Tabela 4.6 resumem o Modelo Conceitual dos Sistemas de Fila
M/M/1.
Exemplo 4.12 No Sistema de Fila M/M/1 simulado abaixo, com N = 10 pacotes, ic(s/p) = {3, 5, 4, 3, 8, 5, 9, 8,
7, 6 } e ts(s/p) = { 12, 12, 10, 9, 2, 2, 1, 3, 2, 5 }:
14O desvio padrão da variável aleatória x é dada por DP( x)= √( E(x 2)−[E (x)]2 ) .
Modelagem e Simulação Discreta 49
4 3 9 15 37 46 2 22 31
5 8 2 23 46 48 3 23 25
6 5 2 28 48 50 3 20 22
7 9 1 37 50 51 3 13 14
8 8 3 45 51 54 4 6 9
9 7 2 52 54 56 1 2 4
10 6 5 58 58 63 0 0 5
∑ 58 58 19 108 166
4.10 Revisão
Valores iniciais (p = 0) e valores dos eventos dos sucessivos pacotes (0 < p < N):
Pacote SF
ic0 = X(λ)
ts0 = X(μ)
0 cpf0 = ic0
eps0 = cpf0
sps0 = eps0 + ts0
icp = X(λ)
tsp = X(μ)
p cpfp = icp + cpfp-1
epsp = cpfp > spsp-1 ? cpfp : spsp-1
spsp = epsp + tsp
Simulação:
Com:
p−1
n f [ p ]=∑ 1 , cpf [ p ]<sps [c ] ,
c=0
N−1
1
U = ∑ {sps [ p ]−eps[ p ]} e
T p=0
T =sps [ N−1] .
Estatísticas:
N−1
1
∑ {eps [ p]−cpf [ p]} DP [tf ]=√( E(tf )−[ E(tf )] ) ,
2 2
E[tf ]= e
N p=0
N −1
1
∑ {sps [ p]−cpf [ p]} DP [tsf ]=√( E(tsf )−[ E(tsf )] ) ,
2 2
E[tsf ]= e
N p=0
N −1
1
∑ nf [ p ] DP [nf ]= √( E (nf )−[ E(nf )] ) .
2 2
E[ nf ]= e
N p=0
Modelagem e Simulação Discreta 51
4.11 Questões
4.12 Exercícios
1. Sabe-se que a HD Samsung 970 EVO de 1 TB, com 3.500 MB/s (leitura sequencial) e 2.500 MB/s (escrita
sequencial) está sendo usada para leitura e gravação de arquivos de tamanhos médio iguais a 5 MB.
Qual o tempo de serviço (ts) desta HD quando usada para leitura (tsleitura)? Qual o valor de tsgravação?
2. No Exemplo 4.8, o tempo de serviço para multiplicação de matrizes quadradas com a Nvidia GeForce
RTX 3080 foi de 0,00420 s/p, para matrizes de ordem 5000 e algoritmos convencionais com O(n³). Qual
é o ganho se usar o algoritmo de Strassen ≈ O(n2,807)?
3. Em abril de 2020, um projeto de computação alcançou 2,3 Eflop/s, combinando PlayStation 3, CPU e
GPU. Qual o tempo de serviço deste projeto para multiplicação de matrizes quadradas de ordem 5000?
4. Considere a figura abaixo e calcule: a) o valor de n f do pacote 8; b) situe a coluna eps no pacote 10; e c)
o tempo total da simulação até o pacote 12.
Modelagem e Simulação Discreta 52
Modelagem e Simulação Discreta 53
O Modelo Computacional de Sistemas de Fila M/M/1 está representado pela classe clSF da
Tabela 5.1 e pelo Algoritmo 5.1 escrito em C++. Esta classe encapsula os dados de estrada
nos vetores ic e ts, as variáveis de estado nos vetores cpf, eps e sps, e o parâmetro N, para
o número de simulações a realizar.
Tabela 5.1 Classe clSF do Modelo Computacional dos Sistemas de Fila M/M/1.
clSF
N, ic[N], ts[N], cpf[N], eps[N], sps[N]
clSF( int N, vector<double> l, vector<double> m )
void Empacotar( int )
void Simular( void )
A classe clSF possui o parâmetro N, os dados de entrada ic e ts, e as variáveis de estado
cpf, eps e sps, o construtor clSF e os métodos Empacotar e Simular, conforme a Tabela
5.1. Estas variáveis, exceto N, são vetores de tamanho N.
Algoritmo 5.1 Código básico em C++ para simulação de Sistemas de Fila M/M/115
//------------------------------------------------------------------------------
#include <vector>
//------------------------------------------------------------------------------
using namespace std;
//------------------------------------------------------------------------------
class clSF{
private:
int N;
vector<double> ic, ts, cpf, eps, sps;
public:
clSF ( int, vector<double>, vector<double> );
void Empacotar( int );
void Simular ( void );
};
clSF::clSF( int N, vector<double> l, vector<double> m ){
this->N = N;
ic .resize(N);
ts .resize(N);
cpf.resize(N);
eps.resize(N);
sps.resize(N);
for( int i = 0; i < N; i++ ){
15 No Modelo Conceitual de Sistemas de Fila p ∊ [1,N] e no correspondente Modelo Computacional p ∊ [0,N-1], isto se deve
ao uso das características da linguagem C++.
Modelagem e Simulação Discreta 54
ic[i] = 1/l[i];
ts[i] = 1/m[i];
}
}
void clSF::Empacotar( int p ){
cpf[p] = ic [p] + cpf[p-1];
eps[p] = cpf[p] > sps[p-1] ? cpf[p] : sps[p-1];
sps[p] = eps[p] + ts [p];
}
void clSF::Simular( void ){
cpf[0] = ic [0];
eps[0] = cpf[0];
sps[0] = eps[0] + ts[0];
for( int p = 1; p < N; p++ )
Empacotar(p);
}
int main( void ){
int N = 10;
vector<double> l = { 8, 5, 12, 15, 8, 11, 9, 10, 7, 6 },
m = { 11, 10, 9, 12, 9, 11, 14, 8, 9, 10 };
clSF SF(N,l,m);
SF.Simular();
return 0;
}
Até agora foram utilizando os valores medidos de ic e de ts diretamente nos modelos mas,
para simular um número de pacotes maior do que o número de dados observados, é
necessário gerar variáveis aleatórias:
• ic a partir de λ, ic = 1/λ16
• ts a partir de μ, ts = 1/μ17
A geração de variáveis é feita a partir dos valores médios de dados medidos ou estimados.
Para isso será usada uma função distribuição de probabilidade exponencial para gerar
variáveis aleatórias a partir dos valores médios 18. As técnicas para gerar variáveis aleatórias
(GVA) a partir de geradores de números aleatórios (GNA) serão estudadas nos próximos
capítulos.
A função double X(double p) do Algoritmo 5.2 gera variáveis aleatórias da função distribuição
de probabilidade exponencial. Ela requer o parâmetro p (valor médio dos dados observados
ou estimados), neste caso p assume os valores de ic ou de ts. Quando p assume o valor de
ic, a função X gera variáveis aleatórias para intervalo entre chegadas. Quando p assume o
valor de ts, a função X gera variáveis aleatórias para tempo de serviço.
Algoritmo 5.2 Função C++ para gerar variáveis aleatórias com distribuição de probabilidade
exponencial
double X( double p ){
double u = (rand()+1.0)/(RAND_MAX+2.0); // u in (0,1)
return -log(u)/p;
}
Os termos srand(), rand(), RAND_MAX fazem parte da biblioteca de números aleatórios das
linguagens C e C++ e serão estudados nos próximos capítulos.
Os valores ic e ts gerados pela função X variam para cada simulação realizada pois são
obtidas a partir de u, que é gerado aleatoriamente. Desta forma são gerados valores de ic e
de ts em torno de cada média fornecida.
16 Note que a unidade de medida de λ é p/s (pacote/segundo) e a unidade de medida de ic é s/p (segundo/pacote).
17 Note que a unidade de medida de μ é p/s e a unidade de medida de ts é s/p.
18 Pode-se usar qualquer função distribuição de probabilidade para gerar variáveis aleatórias, o uso da fdp exponencial está em
conformidade com os resultados do Modelo Analítico da Teria de Filas (M/M/1).
Modelagem e Simulação Discreta 55
Podem ser usadas outras funções além da exponencial, basta incluir a função de interesse,
que será estudado mais adiante.
• λ é o número de pacotes que chegam na Fila por unidade de tempo – taxa de chegada - dado medido ou
estimado
• μ é o número de pacotes processadas pelo Servidor por unidade de tempo – taxa de serviço - dado
medido ou estimado
• ic é o intervalo médio entre chegadas de pacotes na Fila
• ts é o tempo médio de serviço de pacotes do Servidor
• l é usado em lugar de λ, sendo ic = 1/l
• m é usado em lugar de μ, sendo ts = 1/m
Eventos
cpf tempo de chegada de pacote na Fila (s)
eps tempo de chegada de pacote no Servidor (s)
sps tempo de saída de pacote do Servidor (s)
Estatísticas
nf número de pacotes da Fila
tf tempo de espera na Fila (s)
ts tempo de permanência no Servidor (s)
tsf tempo de permanência no Sistema de Fila (s)
T duração da simulação (s)
U utilização do Servidor
Indicadores
E[X] E[nf], E[tf], E[ts], E[tsf]
DP[X] DP[nf], DP[tf], DP[ts], DP[tsf]
Exemplo 5.1 Foi executado o Algoritmo 15.1, com entradas N = 10, l = 6 p/s e m = 5,2 p/s, com os resultados
apresentados abaixo:
Resumo
N 10
T 1,991
E[ic] 0,168
DP[ic] 0,057
E[ts] 0,148
DP[ts] 0,050
E[nf] 2,100
DP[nf] 2,767
E[tf] 0,313
DP[tf] 0,067
E[tsf] 0,461
DP[tsf] 0,058
U 0,743
Valores de ic gerados
A execução de ic = X(l) = 0,167 s/p) gera os N = 10 valores de ic a partir de X(l) conforme listados na tabela
acima. A figura abaixo é o gráfico de ic versus p. A linha ic (em cor preta) é constante e as colunas de ic (em
cor verde) varia ora acima ora abaixo do valor de λ, o que denota a aleatoriedade da simulação.
Modelagem e Simulação Discreta 57
Valores de ts gerados
A execução de ts = X(m) = 0,191 s/p ) gera os N = 10 valores de ts a partir de X(m) conforme listados na
tabela acima. O gráfico de ts versus p estão no gráfico abaixo. A linha ts (em cor preta) é constante e a coluna
de ts (em cor laranja) varia em torno de μ e denota a aleatoriedade da simulação.
Os valores de ic e ts das figuras acima variam para cada simulação que for realizada pois são obtidas a partir
de u, que é gerado aleatoriamente. Desta forma são gerados valores de ic e de ts em torno da média p
fornecida.
Valores de nf simulados
Os valores de nf (cinza) versus p está no gráfico abaixo. Para p = 0 e p = 6 não tem pacote na Fila. Quanto
maior o valor das colunas, maior será o tamanho da Fila.
Modelagem e Simulação Discreta 59
Exemplo 5.2 Utilize o SF.MM1.cpp (Algoritmo 15.1), para avaliar a capacidade do servidor HPE ProLiant ML110
E5-2640v4, com vazão de 8,0 GT/s19, em processar as mensagens do Instagram.
No Exemplo 4.4 foi estimado o tamanho do pacote do Instagram como sendo 3100 B e na Tabela 4.2 está sua
demanda que é λ = 5787 p/s.
Tamanho do pacote = 3100 B
Taxa de serviço:
3
GB pacote 8GB pacote 8 GB 8×1024 B 6
μ=8 GT / s=8 = = pps= =2770946 pps=2,8×10 pps
s pacote pacote s 3100 B 3100 B
Configuração do SF.MM1.cpp: N = 5000, l = 5787.0, m = 2770946.0
Resultados obtidos:
l = 5787
m = 2770946
N = 5000
T = 0,876
E(ic ) = 0,000175
E(tf) = 0,0000000012
E(ts) = 0,000000359
E(tsf) = 0,000000361
E(nf ) = 0
DP(ic) = 0,0001743472
DP(tf) = 0,0000000322
DP(ts) = 0,0000003632
DP(tsf) = 0,0000003648
DP(nf ) = 0,0489309718
U = 0,0020491593
19 Fonte: https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c04617738#N10057
Modelagem e Simulação Discreta 60
Exemplo 5.3 Sabendo que o pacote do Whatsapp é igual a 2,68 MB 20 e que λ = 483333,3 p/s21, utilize o
SF.MM1.cpp para avaliar a capacidade do servidor HPE ProLiant ML110 E5-2640v4, com vazão de 8,0 GT/s, em
processar as mensagens do Whatsapp.
Conclusão: a simulação resultou em U = 100%; sendo assim, o servidor HPE ProLiant ML110 E5-2640v4 não é
recomendado para o processamento de mensagens do Whatsapp.
20 Fonte: https://melhorplano.net/blog/whatsapp-internet/
21 Fonte: https://macmagazine.com.br/post/2018/11/14/cerca-de-29-milhoes-de-mensagens-sao-enviadas-por-minuto-no-whatsapp/
Modelagem e Simulação Discreta 61
5.3 Revisão
Modelagem e Simulação Discreta 62
5.4 Questões
5.5 Exercícios
Modelagem e Simulação Discreta 63
1. Compare os indicadores obtidos por simulação com os do correspondente modelo analítico sabendo que
λ = { 8 5 12 15 8 11 9 10 7 6 } e μ = { 11 10 9 12 9 11 14 8 9 10 }.
2. Pacotes que chegam em um Sistema de Fila M/M/1 com intervalo entre chegadas λ = { 8 5 12 15 8 11 9
10 7 6 } e tempos de serviço μ = { 11 10 9 12 9 11 14 8 9 10 }, simule 5 vezes e calcule a média e a
variância dos nos indicadores estimados (tf, tps e tsf)? Compare os indicadores obtidos por simulação (a)
com os do correspondente modelo analítico (b), utilize o erro relativo percentual 22, erp(%) = 100 (a-b)/b,
para comparação.
3. Repita o exercício 2 para as séries de dados: λ = { 5,7 7,8 8,0 7,7 5,0 6,1 8,0 2,6 3,2 3,4 7,7 7,6 7,2 3,2
7,6 3,3 6,8 6,8 } e μ = { 4,4 5,2 4,5 5,5 4,1 6,9 7,9 5,1 3,7 5,3 3,3 4,1 5,7 5,6 4,4 7,1 4,1 7,2 }
4. Repita o exercício 2 para as séries de dados: λ = { 22 22 31 13 12 29 32 19 17 20 13 23 13 20 27 18 22
1 20 14 19 6 22 17 27 24 } e μ = { 33 44 13 19 28 24 35 36 34 27 14 30 23 17 23 5 20 39 37 35 23 34
22 28 42 27 }
5. Repita o exercício 2 para as séries de dados: λ = { 24 28 20 24 28 15 24 24 23 16 28 28 32 23 22 21 19
27 28 23 36 24 } e μ = { 19 14 18 9 29 9 25 17 30 19 12 15 9 22 22 31 19 12 12 16 30 2 }
6. Segundo HTTP Archive (site que rastreia o desempenho da web e suas tecnologias), o tamanho médio de
uma página web em 03/2020 foi de 2 MB. A taxa de transferência de 2 MB com tecnologia 4G é de
menos de 1 s. Analise o Panorama de tráfego da RNP -
https://www.rnp.br/sistema-rnp/ferramentas/panorama-de-trafego - e estime a quantidade máxima de
usuário, com tecnologia 4G, que pode usar a web com estas taxas.
7. Altere o software SF.MM1.cpp de modo que sua disciplina da fila seja “Menor Tarefa Primeiro” (SJF –
shortest job first) – o pacote que tem o menor tempo de serviço será encaminhado ao Servidor. Ou seja,
implemente e software SF.M/M/1/∞/∞/SIF.cpp.
8. Compare os resultados dos softwares SF.MM1.cpp e SF.M/M/1/∞/∞/SIF.cpp.
22 Dadas duas medidas a e b, o erro relativo percentual (erp) de a em relação a erp (%) = 100 (a-b)/b, usado para indicar a percentagem
que a > b (erp > 0) ou que a < b (erp < 0) ou que a = b (erp=0).
Modelagem e Simulação Discreta 64
Uma vez que uma série de suposições sobre o comportamento de sistemas do mundo real
são feitas no desenvolvimento de modelos, há duas etapas para medir sua qualidade:
Como pode ser visto na Figura 6.2, validação e verificação são conceitos diferentes. A
verificação também pode ser chamada de depuração, ou seja, avalia se o modelo
computacional realiza o que se espera do modelo conceitual. A validação permite ajustar o
comportamento do modelo conceitual ao sistema do mundo real.
Figura 6.2 Relação entre os conceitos de validação e verificação, o mundo real e os modelos
conceitual e computacional.
Tabela 6.1 Categorias dos modelos relativa à implementação das hipóteses e realismo dos
pressupostos.
Implementação das Hipóteses
Pressupostos
correta incorreta
realistas validado e verificado validado e não verificado
não realistas não validado e verificado não validado e não verificado
As técnicas de validação dependem dos pressupostos e, portanto, do sistema que está sendo
modelado. Assim, ao contrário de técnicas de verificação que são de aplicação geral, as
técnicas de validação utilizadas na simulação de um modelo podem não se aplicar a outro.
• Suposições
• Valores dos parâmetros de entrada e distribuições
• Valores de saída e conclusões
Cada um destes três aspectos pode ser submetido a um teste de validade, comparando-a
com o obtido a partir das seguintes possíveis três fontes:
é a forma mais prática e comum para validar um modelo. Os pressupostos
do modelo devem ser validados por especialistas. Os valores de entrada e
Intuição do
Especialista
distribuição devem ser discutidos e validados durante o desenvolvimento
do modelo. A saída deve ser validada, logo que existir um executável do
modelo
comparação com sistemas do mundo real é a maneira mais confiável e
preferida para validar um modelo de simulação. Suposições, valores de
Medidas Reais do
Sistema
entrada, valores de saída, cargas de trabalho, configurações e
comportamento do sistema devem ser comparados com os observados no
mundo real utilizando técnicas estatísticas
em alguns casos, é possível resolver analiticamente o modelo do sistema
sob hipóteses simplificadoras. Também pode ser possível determinar
Resultados
Teóricos
analiticamente as distribuições de entrada. Nesses casos, a semelhança de
resultados teóricos e os resultados da simulação é usada para validar o
modelo de simulação
Isto leva a nove testes de validação possíveis. Claro, pode não ser viável a utilização de
algumas dessas possibilidades. Por exemplo, medições reais do sistema podem estar
disponíveis ou não, resultados teóricos podem estar disponíveis ou não. O analista deve, pelo
menos, validar o modelo para configurações simples.
A qualidade dos dados de entrada também é de extrema importância. Estes dados podem
ser utilizados com três finalidades básicas: construção do modelo conceitual, validação de
resultados e experimentação. Desta forma, se os dados de entrada do modelo estão
incorretos, não há como melhorar o modelo ou mesmo gerar resultados corretos.
6.3 Revisão
6.4 Questões
1. Proponha uma metodologia para validar o Modelo Conceitual de Sistemas de Filas M/M/1 apresentado
anteriormente.
2. O que significa "modele simples - pense complicado" no contexto da Modelagem e Simulação.
3. O que significa "o incremento da qualidade obedece a Lei dos Rendimentos Decrescentes, já os custos
crescem exponencialmente" no contexto da Modelagem e Simulação.
6.5 Exercícios
1. Considere λ = { 5,7 7,8 8,0 7,7 5,0 6,1 8,0 2,6 3,2 3,4 7,7 7,6 7,2 3,2 7,6 3,3 6,8 6,8 } e μ = { 4,4 5,2
4,5 5,5 4,1 6,9 7,9 5,1 3,7 5,3 3,3 4,1 5,7 5,6 4,4 7,1 4,1 7,2 } e avalie o Modelo Conceitual de Sistemas
de Filas M/M/1 apresentado anteriormente usando: a) teste de continuidade, b) testes de
degenerescência, c) teste de consistência, e d) teste da independência da semente.
Modelagem e Simulação Discreta 68
Neste capítulo serão apresentadas técnicas estatísticas que permitem avaliar resultados de
simulações, sua qualidade, pertinência e assegurar seu uso. A análise de saída é um dos
aspectos mais importantes de qualquer estudo de simulação adequado e completo. Como os
processos de entrada da simulação são variáveis aleatórias, notadamente tempos entre
chegadas e tempos de serviços, deve-se considerar a saída da simulação também como
variável aleatória. Assim, simulações resultam apenas em estimativas de medidas de
desempenho do sistema. Esses estimadores são, eles mesmos, variáveis aleatórias sujeitos
ao erro amostral, o qual deve ser levado em conta para se fazer inferências válidas em
relação aos valores dos resultados simulados.
Na maioria dos sistemas simulados, os valores iniciais das suas variáveis de estado e de
saída podem apresentar grandes variações e mesmo oscilações, esta parte inicial é chamada
de estado transiente, após o que o sistema pode atingir um estado estável, denominado
estado estacionário, Figura 7.1. Há simulações cujo foco é o estado transiente e há outras
cujo interesse é o estado estacionário, há ainda aquelas que buscam estudar ambos estados.
Há também sistemas simulados que apresentam oscilações cíclicas, periódicas ou não.
Sistemas de comportamento caótico23 ou divergente são de pouco interesse prático em
sistemas computacionais.
23Séries caóticas e séries aleatórias são parecidas no sentido de que não possuem regularidade, a característica que
identifica o comportamento caótico é a sua dependência das condições iniciais, condições iniciais indistinguíveis podem
gerar comportamentos imprevisíveis, o que inviabiliza a repetibilidade bem como a previsibilidade do comportamento do
sistema
Modelagem e Simulação Discreta 69
Figura 7.1 Indicação dos estados transiente e estacionário de uma simulação típica.
• remoção de transientes – quantos pacotes iniciais devem ser descartadas para garantir que a
simulação chegue a um estado de equilíbrio?
• critério de parada – quantos pacotes serão necessários para executar a simulação?
Antes que uma simulação possa ser executada, devem-se definir valores iniciais para suas
variáveis de estado. Como, em princípio, os valores iniciais apropriados destas variáveis de
estado não são conhecidos, esses valores devem ser escolhidos arbitrariamente, utilizando-
se de alguns critérios como, por exemplo, iniciar uma Fila vazia e seu Servidor ocioso por
questões de conveniência. As condições iniciais de uma simulação podem ter uma influência
significativa nos seus resultados, podendo levar a erros na análise da saída de estado
estacionário.
o primeiro método é simplesmente usar execuções muito longas, ou seja, execuções que
são suficientemente longas para garantir que a presença de condições iniciais não
Execuções Longas
afetará o resultado. A desvantagens neste método é que é difícil garantir que o
comprimento da execução escolhido é suficiente
este e todos os métodos subsequentes são baseados no pressuposto de que a
variabilidade durante o estado de equilíbrio é menor do que durante o estado transiente,
o que geralmente é verdade. No método de truncamento, a variabilidade é medida em
Truncamento
termos de alcance mínimo e máximo de observações. Se uma trajetória mostrando
observações sucessivas em um gráfico, um intervalo de observações pode ser visto
quando a simulação estabilizar e entrar na fase estacionária
este método requer a execução de várias simulações muito longas. Cada simulação é
Replicações
chamada de replicação. A média das amostras finais retiradas de cada replicação é
Independentes
chamada de médias amostrais das replicações.
este método requer a execução de uma única simulação muito longa e dividi-la em
várias partes de igual tamanho. Cada parte é chamada de lote. A média de observações
Média de Lotes
em cada lote é chamada média de lote. Este método permite estudar a variação destas
médias em função do tamanho do lote
Se X = { x1, x2, ..., xn } são elementos de uma amostra aleatória, retirada de uma população,
o intervalo definido pela Equação 7.1 é denominado intervalo de confiança da média com
significância estatística α, com 1-α de probabilidade de contê-la, isto é, P[Li < m < Ls]=1-α.
s s s
(m−t 1−α ,n−1 ; m+t 1−α ,n−1 ) ou m∓t 1−α ,n−1 7.1
√n √n √n
s s
Li =m−t 1−α ,n−1 ; Ls =m+t 1−α ,n−1 7.2
√n √n
Em que t1-α,n-1 é ponto crítico da distribuição t-Student bicaudal, com n-1 graus de liberdade.
Os valores dos limites inferior Li e superior Ls (Equação 7.2) são calculados a partir das
observações X da amostra e 1-α é o nível de confiança associado ao intervalo.
Exemplo 7.1 Seis cargas de trabalho semelhantes foram utilizados em um sistema. As observações são {5,4
6,6 3,6 4,4 5,6}. Estime o intervalo de confiança da média destas observações com significância de 5%.
xc
Considerando a simetria da distribuição t-Student, estes valores podem ser calculados a partir de
xc
∫ f ( x) dx= 1−α
2
ou obtidos de tabelas estatísticas (que são feitas com soluções destas equações
0
integrais).
Modelagem e Simulação Discreta 72
Em geral, o Método de Médias de Lotes é usado para se estimar a variância ou calcular ICs
para a média μ de processos de estado estacionário. Ele consiste em dividir uma longa
rodada de simulação em um número de lotes contíguos e utilizar o Teorema Central do Limite
para supor que as médias de lotes sejam aproximadamente normais e iid.
Suponha que se particione {x1, x2, ..., xn} em l lotes contíguos, disjuntos, cada um com b
observações, sendo n = l⋅b. Assim, o i-ésimo lote, i ∈ [1,l], consiste nas variáveis aleatórias
b
1
x(i-1)b+1, x(i-1)b+2, ..., xi⋅b. A média do i-ésimo lote é zi = ∑ x(i−1)b+ j , a média amostral das b
b j=1
observações do lote i.
A Tabela 7.2 apresenta um quadro com os l lotes do Método de Média de Lotes organizadas
em linhas, cada lote com b pacotes organizados por coluna; num total de l x b pacotes. As
médias dos lotes são calculadas por linha.
Tabela 7.2 Quadro com os l lotes do Método de Média de Lotes, cada lote com b pacotes e
suas respectivas médias
Lote (i) Pacote (i+b) Média
1 x1 x2 ... xj ... xb z1
2 xb+1 xb+2 ... xb+j ... x2·b z2
... ... ... ... ... ... ... ...
l
1
Definindo o estimador V l = ∑
l−1 i=1
2
(z i −m) para as médias amostrais dos lotes,
l
1
m= ∑ zi . Se b é grande, então as médias amostrais dos lotes são aproximadamente
l i=1
Normais e iid. O valor de IC aproximado para a média populacional, μ, com 100(1-α)% de
Para melhorar o problema do viés da iniciação, pode-se truncar alguns dos dados ou fazer
uma longa rodada. Além disso, a falta de independência ou de normalidade das médias dos
lotes pode ser contornada pelo aumento do tamanho do lote, b.
Exemplo 7.2 Calcule o Intervalo de Confiança bilateral da média da população a partir das Médias de Lotes
Modelagem e Simulação Discreta 73
abaixo, α = 5%:
Lote Pacote Média
1 13,4 9,8 11,6 10,8 11,4
2 9,2 12,0 13,6 9,9 11,2
3 8,9 9,7 10,3 13,0 10,5
4 11,0 12,4 8,8 11,4 10,9
l=4
b=4
Cálculo dos zi:
z1 = (13,4 + 9,8 + 11,6 + 10,8)/4 = 11,4
z2 = (9,2 + 12,0 + 13,6 + 9,9)/4 = 11,2
z3 = (8,9 + 9,7 + 10,3 + 13,0)/4 = 10,5
z4 = (11,0 + 12,4 + 8,8 + 11,4)/4 = 10,9
Cálculo de m:
m = (11,4 + 11,2 + 10,5 + 10,9)/4 = 32,6/4 = 11,0
Cálculo de Vl:
Vl = [(11,4-11,0)2 + (11,2-11,0)2 + (10,5-11,0)2 + (10,9-11,0)2]/3 = 0,159
Cálculo de t1-0,5;3 = t0,95;3 = 3,1824 (valores tabelados – tabela bicaudal)
Cálculo do IC:
μ = 11,0 ∓ 3,1824 x (0,159/4)1/2 = 11,0 ∓ 3,1824 x 0,199 = 11,0 ∓ 0,634
Conclusão: média da população μ ∈ [10,4;11,6] com 95% de confiança.
Tabela 7.3 Quadro com as r rodadas do Método de Replicação Independente, cada repetição
com b pacotes e suas respectivas médias
Pacote (j)
Repetição (i) Média
1 2 ... j ... b
1 x1,1 x1,2 ... x1,j ... x1,b z1
2 x2,1 x2,2 ... x2,j ... x2,b z2
... ... ... ... ... ... ... ...
i xi,1 xi,2 ... xi,j ... xi,b zi
... ... ... ... ... ... ... ...
r xr,1 xr,2 ... xr,j ... xr,b zr
Se cada rodada se inicia com as mesmas condições operacionais (como filas vazias e
servidores ociosos), então as médias amostrais das replicações {z 1, z2, ..., zr} são variáveis
aleatórias iid e, então, o estimador da variância das médias amostrais, V r, é
r r
1 1
V r= ∑
r−1 i=1
( zi −m) em que m= ∑ zi . Como as médias amostrais das replicações são
2
r i=1
iid, Vr, em geral, é muito menos viesado do que s 2/n para estimar Vr, desta forma Vr/r é um
estimador razoável para Vr. Além disso, se o número de observações por replicação, r, é
suficientemente grande, o Teorema Central do Limite afirma que as médias amostrais das
replicações são aproximadamente Normais e iid.
Exemplo 7.3 Calcule o Intervalo de Confiança bilateral da média da população a partir das Replicações
m∓t 1−α ,r−1
√ Vr
r
.
r=4
b=6
Cálculo dos zi:
z1 = (12,2 + 14,3 + 9,7 + 11,4 + 13,1 + 11,3)/6 = 72,0/6 = 12,0
z2 = (11,4 + 10,2 + 9,3 + 13,1 + 12,0 + 11,8)/6 = 67,8/6 = 11,3
z3 = (10,7 + 11,1 + 13,0 + 10,4 + 11,3 + 11,4)/6 = 67,9/6 = 11,3
z4 = (13,2 + 10,4 + 10,7 + 11,5 + 9,2 10,2)/6 = 65,2/6 = 10,9
Cálculo de m:
m = (12,0 + 11,3 + 11,3 + 10,9)/4 = 45,48/4 = 11,4
Cálculo de Vr:
Vr = [(12,0-11,4)2 + (11,3-11,4)2 + (11,3-11,4)2 + (10,9-11,4)2]/3 = (0,396+0,005+0,003+0,254)/3 = 0,658/3 =
0,219
Cálculo de t1-0,05;3 = t0,95;3 = 3,1824 (valores tabelados – tabela bicaudal)
Cálculo do IC:
μ = 11,4 ∓ 3,1824 x (0,219/4)1/2 =11,4 ∓ 3,1824 x 0,230 = 11,4 ∓ 0,750
Conclusão: média da população μ ∈ [10,6;12,12] com 95% de confiança.
Modelagem e Simulação Discreta 75
Figura 7.2 Variação de E[tsf] versus o número de pacotes numa simulação de Sistema de Fila
M/M/1.
Softwares que utilizam N fixo são mais simples do que os que usam intervalos de confiança
como critério de parada (N variável).
Tem sido usado o nível de confiança estatística de 95%. Isso não deve levar a conclusão que
os níveis de confiança devem ser sempre altos. A escolha do nível de confiança baseia-se na
relação entre a perda se o parâmetro está fora do intervalo e o ganho se o parâmetro está
dentro do intervalo. Se a perda é alta em comparação com o ganho, os níveis de confiança
devem ser elevados. Se a perda é insignificante em comparação com o ganho, um nível de
confiança menor é suficiente.
Foi desenvolvido o software SF.MM1-ML-RI.cpp, Algoritmo 15.2 do item 15.3 , para gerar
dados para os Métodos de Médias de Lotes (ML) de Replicações Independentes (RI).
Tabela 7.5 Resultado de uma execução da Média de Lotes do software SF.MM1-ML-RI.cpp para
l = 40, m = 50, L = 10 e B = 500.
B Pi Pf T E[tsf] E[nf] U
1 0 499 11,766 0,125 4,910 0,909
2 500 999 13,057 0,087 3,208 0,779
3 1000 1499 12,344 0,076 2,994 0,755
4 1500 1999 13,197 0,121 4,510 0,810
5 2000 2499 11,694 0,070 2,714 0,801
6 2500 2999 12,185 0,079 2,990 0,845
Modelagem e Simulação Discreta 77
7.5 Revisão
7.6 Questões
Modelagem e Simulação Discreta 79
7.7 Exercícios
1. Foram realizadas 4 rodadas de simulação, cada uma com 300 pacotes. Os dados de E[n f], E[tsf] e p0
estão listados abaixo. Calcule:
E[nf]
i/j 1 2 3 4 5 6 7 8 9 10
1 4 3 2 2 3 3 3 4 3 2
2 7 5 4 5 5 4 4 7 4 4
3 12 18 7 2 8 8 6 9 10 6
4 20 3 13 5 4 12 9 7 8 9
E[tsf]
i/j 1 2 3 4 5 6 7 8 9 10
1 1.83 1.83 1.83 1.71 1.83 1.98 1.86 1.83 1.71 1.74
2 2.13 2.04 2.01 2.16 2.13 1.86 2.07 2.07 1.98 2.07
3 2.40 2.52 2.4 2.34 2.34 2.31 2.46 2.25 2.46 2.40
4 2.64 2.94 2.58 2.88 2.70 2.55 2.85 2.55 2.79 2.58
p0
i/j 1 2 3 4 5 6 7 8 9 10
1 0.373 0.346 0.385 0.374 0.362 0.347 0.397 0.340 0.408 0.475
2 0.256 0.252 0.341 0.264 0.275 0.355 0.330 0.231 0.322 0.374
3 0.181 0.108 0.200 0.171 0.216 0.230 0.197 0.195 0.149 0.278
4 0.116 0.008 0.165 0.033 0.022 0.134 0.078 0.116 0.031 0.190
2. Foi realizada uma rodada de simulação com 50 pacotes, abaixo relacionados. Calcule a) Intervalo de
Confiança da média (μ) de tsf para α = 10%, α = 5% e α = 1%.
29 0,155 79 4,526 129 1,431 179 2,912 229 3,210 279 1,251
30 0,195 80 0,026 130 1,960 180 0,143 230 0,081 280 1,006
31 4,262 81 0,088 131 0,764 181 0,359 231 0,061 281 3,183
32 1,030 82 0,010 132 5,004 182 6,021 232 0,052 282 0,091
33 3,494 83 0,053 133 0,093 183 0,236 233 0,582 283 0,036
34 3,851 84 0,014 134 0,430 184 0,009 234 0,016 284 0,917
35 0,285 85 4,128 135 1,163 185 0,128 235 0,013 285 0,013
36 5,334 86 0,190 136 2,220 186 0,055 236 0,537 286 0,026
37 0,110 87 0,092 137 1,041 187 1,142 237 0,018 287 0,410
38 0,023 88 0,081 138 0,011 188 0,023 238 5,487 288 0,009
39 0,747 89 0,352 139 2,125 189 2,876 239 0,018 289 0,126
40 2,567 90 0,901 140 0,014 190 0,055 240 2,864 290 0,022
41 0,100 91 3,335 141 4,777 191 2,458 241 3,516 291 0,009
42 2,170 92 3,692 142 6,056 192 0,429 242 4,778 292 0,016
43 0,186 93 0,129 143 0,081 193 0,016 243 5,460 293 0,057
44 2,922 94 0,033 144 0,418 194 5,417 244 1,292 294 0,022
45 1,588 95 0,016 145 0,146 195 0,126 245 0,507 295 0,422
46 0,049 96 0,010 146 0,526 196 0,223 246 4,404 296 2,829
47 0,492 97 1,631 147 0,365 197 0,468 247 0,035 297 0,364
48 1,356 98 0,304 148 0,021 198 0,230 248 0,115 298 0,020
49 0,353 99 0,775 149 0,052 199 0,022 249 0,029 299 0,028
50 0,400 100 0,045 150 0,252 200 0,125 250 0,804 300 0,242
3. Utilize o software SF.MM1-ML-RI.cpp descrito no Anexo para realizar B rodadas de simulação, cada uma
com M eventos e calcule os Intervalos de Confiança da média (μ) e da variância (σ 2) de nf, tf, tps e tsf
para α = 10%, α = 5% e α = 1% nos casos:
a) B = 10 e M = 2000
b) B = 10 e M = 4000
c) B = 10 e M = 6000
a) B = 10 e M = 2000
b) B = 10 e M = 4000
c) B = 10 e M = 6000
a) N = 1000
b) N = 10000
c) N = 100000
Figura 8.1 Sistema computacional, Servidor Web (Sw) conectado a rede internet por meio de
um Switch (S).
O sistema computacional da Figura 8.1 pode ser modelado por dois sistemas de filas em série
como mostrado na Figura 8.2, o primeiro para o processo de chegada no Switch e o segundo
para o Servidor Web. A taxa de entrada de serviços do Switch é a que chega da Internet.
Após processar os serviços, o Switch os envia para o Servidor Web. A taxa de entrada de
serviços no Servidor Web é a taxa de saída do Switch. Após processar os serviços, o Servidor
Web os envia para o Switch. A taxa de entrada de serviços no Switch é a mesma que sai do
Servidor Web. Por fim, após processar os serviços, o Switch os envia para a Internet.
Figura 8.3 Diagrama de blocos do Sun Fire X4150 Server com Serial Attached SCSI – SAS (Sun
Microsystems, 2016).
mais de um SF, o primeiro SF terá dados de entrada e, a partir do segundo SF, os dados de
entrada serão os dados de saída do SF anterior, Figura 8.4.
Figura 8.4 Rede de Sistemas de Fila indicando o fluxo de dados de entrada (ic) do primeiro
Sistema de Fila e a sua saída (is – intervalo entre saída) como entrada para o próximo
Sistema de Fila.
Um Modelo Conceitual de uma RSF de Filas M/M/1 será apresentado e discutido e, a partir
dele, modelos envolvendo Filas M/M/c/K/m podem ser derivados dele.
Nos Sistemas de Fila das RSFs, os pacotes chegam um por vez e são processados igualmente
um por vez. Desta forma, os Sistemas de Fila de uma RSF possuem três variáveis básicas:
1. taxa de chegada (λ) e seu correspondente intervalo entre chegadas (ic), ic = 1/E[λ]
2. taxa de serviço (μ) e seu correspondente tempo de serviço (ts), ts = 1/E[μ]
3. taxa de saída (γ) e seu correspondente intervalo entre saídas (is), is = 1/E[γ]
A Figura 8.5 ilustra o Modelo Conceitual de um Sistemas de Fila M/M/1 de uma RSF. Conforme
enfatizado, a saída dos SFs torna-se importante no caso de RSFs.
Numa Rede de Sistemas de Filas (RSF), os pacotes deve ser processados em cada um dos
Sistemas de Filas, sequencialmente, de acordo com a arquitetura da rede. A saída do
Servidor anterior serve de entrada para a Fila do próximo Sistema de Fila. Os dados de
entrada da Rede de Filas são os intervalos entre chegadas na primeira Fila e os dados de
saída de cada Servidor do Sistema de Filas. Os parâmetros da Rede de Filas são:
Modelagem e Simulação Discreta 84
Será utilizado um estudo de caso da Figura 8.6 para apresentar o modelo conceitual de
Redes de Sistemas de Filas tendo em vista que há muitas combinações possíveis de Sistemas
de Filas. A partir de deste estudo de caso, pode-se generalizar o modelo proposto.
A RSF da Figura 8.6 possui 4 SF, numeradas de 0 a 3: SF 0, SF1, SF2 e FS3. Os parâmetros desta
rede são:
Em resumo, os parâmetros da RSF da Figura 8.6, para 5000 pacotes: N = 5000, l0, m = [ m0,
m1, m2, m3 ] e r = [ 0, 1, 2, 1, 3, 0 ].,
O nível de detalhes do modelo de sequência dos pacotes é a visão de pior caso, à maneira da
Ciência da Computação Clássica. A trajetória de um pacote numa rede pode variar com a
natureza do próprio pacote e da rede, assim há várias sequências possíveis para os pacotes.
Visando uma modelagem simples sem perder precisão, adotou-se o critério de pior caso:
todos pacotes seguem a maior sequência possível na rede. Esta abordagem simplifica:
• a compreensão do problema
• o modelo conceitual
• o modelo computacional
Esta abordagem também é a favor da segurança da solução uma vez que superestima os
resultados mas não dispensa a supervisão de engenheiro após a implantação da solução,
para ajustes que se fizerem necessários.
A condição mais simples para iniciar a simulação de uma RSF é zerar o cronômetro com as
Filas vazias e os Servidores ociosos. Ou seja, zerar tudo, o cronômetro e o número de pacotes
na RSF.
Como visto na Figura 8.4, uma RSF é um encadeamento de SF, a sequência dos pacotes
neste encadeamento é dado pelo vetor r, que define o roteamento dos pacotes desde a
entrada até a saída do sistema.
Um pacote entra na RSF no r0, segue para o r1 e assim por diante, percorrendo todo vetor r,
ou seja: r0 → r1 → r2 → … → ri → … Pode-se pensar também que ri é o mesmo que r[i]. O índice
i será associado ao roteamento.
Observe que ri é algum dos SF de RSF, para este texto r 0 é o SF0. Vale ressaltar que r0 pode
ser um outro SF, depende apenas da configuração da RSF.
Os pacotes percorrem uma RSF de acordo com o encadeamento dado pelo vetor r. Os
pacotes são processados em cada SF da rede, nos quais são calculados seus eventos e
demais variáveis de estado.
O primeiro pacote (p=0) que entra na RSF requer tratamento diferenciado pois não há pacote
antes dele. Por outro lado, r0 também requer tratamento diferenciado pois não há SF antes
dele.
Os pacotes que sucedem o primeiro na RSF, podem ser tratados de modo genérico como p, p
∊ (0,N).
O pacote p, p > 0, que entra na RSF no r 0 é especial no tocante a r0.icp pois não tem SF que o
antecede e, neste, r0.icp = X(r0.λ), caso contrário r0.icp = ri-1.isp, ou seja, o valor de is do SF
que o antecede. Os demais valores destes pacotes dependem do mesmo SF e do pacote
anterior.
N, SF = [0, 1, 2, …, s, …], λ0, μ = [μ0, μ1, μ2, …, μs, …], r = [r0, r1, r2, …, ri, …], ri ∊ SF
r
Pacote
0 i
r0.ic0 = X(r0.λ) ri.ic0 = ri-1.is0
r0.cpf0 = r0.ic0 ri.cpf0 = ri.ic0
0 r0.eps0 = r0.cpf0 ri.eps0 = ri.cpf0
r0.sps0 = r0.eps0 + X(r0.μ) ri.sps0 = ri.eps0 + X(r0.μ)
r0.is0 = r0.sps0 ri.is0 = ri.sps0
r0.icp = X(r0.λ) ri.icp = ri-1.isp
r0.cpfp = r0.icp + r0.cpfp-1 ri.cpfp = ri.icp + ri.cpfp-1
p > 0 r0.epsp = r0.cpfp > r0.spsp-1 ? r0.cpfp : r0.spsp-1 ri.epsp = ri.cpfp > ri.spsp-1 ? ri.cpfp : ri.spsp-1
r0.spsp = r0.epsp + X(r0.μ) ri.spsp = ri.epsp + = X(ri.μ)
r0.isp = r0.spsp + r0.spsp-1 ri.isp = ri.spsp + ri.spsp-1
O modelo computacional de RSF de Sistemas de Fila M/M/1 pode ser visto na Tabela 9.1. Ele é
constituído por três classes, a saber: clPacote, clSF e clRSF. A classe clRSF possui um
vetor de classes clSF e clSF possui um vetor de classes clPacote. O método Configurar
configura os dados da RSF, Iniciar calcula os valores iniciais dos SFs, Simular executa as
simulações fazendo uso do método Empacotar. Por fim, Nf calcula os valores de nf de cada
SF. O cálculo das estatísticas não está implementado.
Tabela 9.1 Classe clRSFMM1 do Modelo Computacional dos Sistemas de Fila M/M/1
clPacote
ic clRSF
cpf r[]
eps clSF SF[]
sps X(p)
is Iniciar( l, m[], r[] )
nf Empacotar(i)
clSF Simular(N)
l Nf()
m Estatistica()
clPacote Pacote[]
Tabela 9.2 Descrição das classes do Modelo Computacional dos Sistemas de Fila M/M/1
clPacote pacotes dos SF com as variáveis de estado ic, cpf, eps, sps, is e nf
clSF são os SF da RSF, seus parâmetros l e m, e o vetor Pacote
O Algoritmo 9.1 implementa em C++ o modelo computacional básico de uma RSF M/M/1.
Modelagem e Simulação Discreta 88
Algoritmo 9.1 Código básico em C++ para simulação de Redes de Sistemas de Fila M/M/1
//-------------------------------------------------------------------------------
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <string>
#include <vector>
//-------------------------------------------------------------------------------
using namespace std;
//-------------------------------------------------------------------------------
class clPacote{
public:
int nf;
double ic, cpf, eps, sps, is;
};
class clSF{
public:
double l, m;
vector<clPacote> Pacote;
};
class clRSF{
private:
vector<int> r;
vector<clSF> SF;
double X ( double );
void Empacotar( int );
void Nf ( void );
public:
clRSF ( void );
void Iniciar ( double, vector<double>, vector<int> );
void Simular ( int );
};
clRSF::clRSF( void ){
srand(time(nullptr));
}
double clRSF::X( double p ){
double u = (rand()+1.0)/(RAND_MAX+2.0); // u in (0,1)
return -log(u)/p;
}
void clRSF::Iniciar( double l, vector<double> m, vector<int> r ){
this->r = r;
SF.clear();
for( size_t s = 0; s < m.size(); s++ ){
clSF X;
X.l = l;
X.m = m[s];
X.Pacote.clear();
SF.push_back(X);
}
for( size_t s = 0; s < r.size(); s++ ) // p = 0
SF[r[s]].Pacote.push_back({0,0,0,0,0,0,0});
}
void clRSF::Empacotar( int i ){
clPacote P, Pa;
if( i > 0 ){
Pa = SF[r[i-1]].Pacote[ SF[r[i-1]].Pacote.size()-1 ];
P.ic = Pa.is;
}
else P.ic = X( SF[r[i]].l );
Pa = SF[r[i]].Pacote[ SF[r[i]].Pacote.size()-1 ];
P.cpf = P.ic + Pa.cpf;
P.eps = P.cpf > Pa.sps ? P.cpf : Pa.sps;
P.sps = P.eps + X(SF[r[i]].m);
P.is = P.sps - Pa.sps;
SF[r[i]].Pacote.push_back(P);
}
void clRSF::Simular( int N ){
for( int p = 1; p < N; p++ )
for( size_t i = 0; i < r.size(); i++ )
Empacotar(i);
Nf();
}
void clRSF::Nf( void ){
for( size_t s = 0; s < SF.size(); s++ )
for( size_t p = 1; p < SF[s].Pacote.size(); p++ ){
size_t c = p-1;
SF[s].Pacote[p].nf = 0;
Modelagem e Simulação Discreta 89
clRSF RSF;
RSF.Iniciar(l,m,r);
RSF.Simular(N);
return 0;
}
RSF l m
0 60,000 30,000
1 - 30,000
2 - 30,000
3 - 30,000
SF: 0
p ic cpf eps sps nf is
Modelagem e Simulação Discreta 90
SF: 1
p ic cpf eps sps nf is
0 0,000 0,000 0,000 0,000 0 0,000
1 0,000 0,000 0,000 0,000 0 0,000
2 0,000 0,000 0,000 0,000 0 0,000
3 0,000 0,000 0,000 0,000 0 0,000
4 0,065 0,065 0,065 0,068 0 0,068
5 0,073 0,138 0,138 0,146 0 0,078
6 0,242 0,380 0,380 0,385 0 0,239
7 0,140 0,520 0,520 0,533 0 0,148
8 0,021 0,541 0,541 0,553 0 0,020
9 0,015 0,556 0,556 0,560 0 0,007
10 0,049 0,605 0,605 0,633 0 0,073
11 0,001 0,605 0,633 0,661 1 0,028
12 0,026 0,631 0,661 0,723 2 0,062
13 0,061 0,692 0,723 0,728 1 0,005
14 0,008 0,700 0,728 0,799 2 0,071
15 0,051 0,752 0,799 0,800 1 0,001
16 0,093 0,845 0,845 0,866 0 0,066
17 0,084 0,929 0,929 0,974 0 0,109
18 0,125 1,054 1,054 1,073 0 0,098
19 0,068 1,122 1,122 1,174 0 0,102
20 0,028 1,150 1,174 1,260 1 0,086
21 0,117 1,266 1,266 1,295 0 0,035
22 0,013 1,279 1,295 1,303 1 0,008
23 0,002 1,281 1,303 1,342 2 0,038
24 0,078 1,359 1,359 1,361 0 0,019
25 0,043 1,402 1,402 1,409 0 0,048
26 0,119 1,521 1,521 1,539 0 0,130
27 0,032 1,553 1,553 1,553 0 0,014
28 0,001 1,554 1,554 1,561 0 0,008
29 0,020 1,574 1,574 1,588 0 0,026
30 0,224 1,798 1,798 1,848 0 0,260
31 0,101 1,898 1,898 1,922 0 0,075
32 0,041 1,940 1,940 1,955 0 0,032
33 0,009 1,949 1,955 2,002 1 0,048
34 0,020 1,969 2,002 2,011 1 0,009
35 0,107 2,076 2,076 2,138 0 0,127
36 0,064 2,140 2,140 2,168 0 0,029
37 0,036 2,176 2,176 2,186 0 0,018
38 0,014 2,190 2,190 2,211 0 0,026
39 0,042 2,232 2,232 2,318 0 0,107
SF: 2
p ic cpf eps sps nf is
0 0,000 0,000 0,000 0,000 0 0,000
1 0,000 0,000 0,000 0,000 0 0,000
Modelagem e Simulação Discreta 91
SF: 3
p ic cpf eps sps nf is
0 0,000 0,000 0,000 0,000 0 0,000
1 0,000 0,000 0,000 0,000 0 0,000
2 0,078 0,078 0,078 0,167 0 0,167
3 0,239 0,317 0,317 0,332 0 0,165
4 0,007 0,324 0,332 0,336 1 0,004
5 0,073 0,397 0,397 0,409 0 0,073
6 0,005 0,402 0,409 0,427 1 0,018
7 0,071 0,473 0,473 0,478 0 0,051
8 0,109 0,582 0,582 0,633 0 0,154
9 0,098 0,680 0,680 0,689 0 0,056
10 0,035 0,715 0,715 0,738 0 0,049
11 0,008 0,723 0,738 0,739 1 0,001
12 0,048 0,772 0,772 0,775 0 0,036
13 0,130 0,902 0,902 0,902 0 0,128
14 0,026 0,928 0,928 1,104 0 0,202
15 0,260 1,188 1,188 1,215 0 0,112
16 0,048 1,236 1,236 1,237 0 0,022
17 0,009 1,245 1,245 1,341 0 0,104
18 0,018 1,263 1,341 1,369 1 0,028
19 0,026 1,288 1,369 1,399 2 0,030
Legenda
Um Sistema Cliente/Sevidor Web em uma camada física está ilustrada na Figura 9.1, com 3
SF, numeradas de 0 a 2, SF0, SF1 e SF2. A arquitetura desta rede está mostrada na Figura
9.2. É uma rede aberta com os parâmetros:
Figura 9.1 Sistema Cliente/Servidor Web em uma camada física composta por um Firewall (F),
um Switch (S) e um Servidor Swab (Web, Aplicação e Banco de Dados).
Em resumo, os parâmetros da RSF da Figura 9.10, para simulação de 5000 pacotes são: r = [
0, 1, 2, 1, 0 ], N = 5000, l, m = [m0, m1, m2]. Os valores de l e m devem ser fornecidos pelo
usuário.
Exemplo 9.1 Considere a rede abaixo com demanda de 5 milhões de pacotes por hora, considere pacotes de 2
MB.
Modelagem e Simulação Discreta 93
Um Sistema Cliente/Sevidor Web em duas camadas físicas é ilustrada na Figura 9.4, com 4
SF, numeradas de 0 a 3, SF0, SF1, SF2 e SF3. A arquitetura desta rede está mostrada na
Figura 9.5. É uma rede com os parâmetros:
24 https://www.sophos.com/en-us/medialibrary/PDFs/factsheets/sophos-xg-series-appliances-brna.pdf
25 Fonte: https://dl.ubnt.com/datasheets/unifi/UniFi_PoE_Switch.pdf
26 Fonte: https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c04617738
Modelagem e Simulação Discreta 94
Figura 9.4 Sistema Cliente/Servidor Web em duas camadas físicas compostas por um Firewall
(F), um Switch (S), um Servidor Web (Sw) e um Servidor Sab (Aplicação e Banco de Dados).
Em resumo, os parâmetros da RSF da Figura 9.12, para simulação de 5000 pacotes são: r = [
0, 1, 2, 1, 3, 1, 2, 1, 0 ], N = 5000, l, m = [m0, m1, m2, m3]. Os valores de l e m devem ser
fornecidos pelo usuário.
Exemplo 9.2 Considere a rede abaixo com demanda de 5 milhões de pacotes por hora, considere pacotes de 2
MB.
São 3 SF com r = [0, 1, 2, 1, 3, 1, 2, 1, 0]. Com uma demanda de 5 milhões de pacotes por hora, tem-se l =
5E6/3600 = 1388,8.
O Servidor Web Apache HTTP Server 2.4 deve ser instalado em um Hardware com CPU de 16 núcleos, cada
núcleo processando 108 req/s31.
Logo m = [1812.5, 2250, 7500, 4000].
Os parâmetros desta RSF, para uma simulação de 5000 pacotes são:
27 Fonte: https://www.sophos.com/en-us/medialibrary/PDFs/factsheets/sophos-xg-series-appliances-brna.pdf
28 Fonte: https://dl.ubnt.com/datasheets/unifi/UniFi_PoE_Switch.pdf
29 Fonte: https://documentation.commvault.com/commvault/v11/article?p=1662.htm
30 Fonte: https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c04617738
31 Fonte: https://serverguy.com/comparison/apache-vs-nginx/
Modelagem e Simulação Discreta 95
Um Sistema Cliente/Servidor Web em três camadas físicas é ilustrada na Figura 9.7, com 5
SF, numeradas de 0 a 4, SF0, SF1, SF2, SF3 e SF4. A arquitetura desta rede está mostrada na
Figura 9.8. É uma rede com os parâmetros:
Figura 9.7 Sistema Cliente/Servidor Web em três camadas físicas compostas por um Firewall
(F), um Switch (S), um Servidor Web (Sw), um Servidor de Aplicação (Sa) e um Servidor de
Banco de Dados (Sd).
Em resumo, os parâmetros da RSF da Figura 9.9, para simulação de 5000 pacotes são: r =
[ 0, 1, 2, 1, 3, 1, 4, 1, 3, 1, 2, 1, 0 ], N = 5000, l, m = [m0, m1, m2, m3, m4]. Os valores de l
e m devem ser fornecidos pelo usuário.
Exemplo 9.3 Considere a rede abaixo com demanda de 5 milhões de pacotes por hora, considere pacotes de 2
MB.
Os resultados da simulação que os equipamentos estão adequados para o projeto, com certa ociosidade dos
servidores Sw, Sa e Sb.
Exemplo 9.4 Considere a rede abaixo com demanda de 5 milhões de pacotes por hora, considere pacotes de
200 KB.
32 Fonte: https://www.sophos.com/en-us/medialibrary/PDFs/factsheets/sophos-xg-series-appliances-brna.pdf
33 Fonte: https://dl.ubnt.com/datasheets/unifi/UniFi_PoE_Switch.pdf
34 Fonte: https://documentation.commvault.com/commvault/v11/article?p=1662.htm
35 Fonte: https://support.hpe.com/hpesc/public/docDisplay?docId=emr_na-c04617738
36 Fonte: https://mariadb.com/resources/blog/benchmark-mariadb-vs-mysql-on-commodity-cloud-hardware/
37 Fonte: https://serverguy.com/comparison/apache-vs-nginx/
Modelagem e Simulação Discreta 97
Figura 9.11 Diagrama de blocos de parte do Sun Fire X4150 (Sun Microsystems, 2016).
Uma alternativa simples é considerar que dados chegam da memória por meio da ponte
norte (MCH) e são processados na CPU. Neste caso, pode-se considerar a MCH como a Fila e
a CPU como o Servidor, Figura 9.12, tem-se então uma rede aberta com os parâmetros:
• o SF é M/M/1
• número de pacotes, N (definido pelo usuário)
• l
• m = [m0 ]
Modelagem e Simulação Discreta 98
9.5 Revisão
9.6 Exercícios
a) o tempo de simulação
b) os maiores valores de nf de cada componente
2. Simule os exemplos deste capítulo com o software RSF.MM1 e, considerando os valores de ts de maior
desempenho, calcule:
a) o tempo de simulação
b) os maiores valores de nf de cada componente
Uma maneira de usar esta propriedade dos sistemas é fazer uso de números aleatórios. Em
estatística, um número aleatório é um número que pertence a uma série numérica e que não
pode ser previsto a partir dos seus membros anteriores (Jain,1991).
• uniformemente distribuídos
• estatisticamente independente
• não repetição para um comprimento desejado
• reprodutível
• rápida obtenção de modo a poupar recursos computacionais para as simulações em si
A expressão geral do Gerador Congruente Linear (GCL) é x n = f(xn-1). O GCL expressa pela
Equação 10.1 (Hull & Dobell, 1962) é uma relação recursiva constituída por três valores
38A denominação número aleatório neste texto refere-se, em geral, a número pseudoaleatório. Algoritmos geram apenas
números pseudoaleatórios. O sítio www.random.org trata deste assunto extensivamente.
Modelagem e Simulação Discreta 101
A partir de x1 são calculados sucessivamente os valores de x2, x3, x4, ..., xm.
Exemplo 10.1 A série gerada a partir de m = 231-1, a = 75 e c = 0 tem um ciclo igual 2 31-1, aproximadamente
uma sequência de 2,1×109 números sem repetição, suficientemente grande para simulações de Redes de
Sistemas de Fila39.
Os exemplos abaixo discutem a estrutura das sequências geradas por um GCL, suas
conclusões se aplicam a qualquer GCL que atende o Teorema de Hull-Dobell.
39 Números Aleatórios tem aplicações em diversas áreas, como jogos e criptopgrafia, cada uma delas tem seus GNAs adequados aos seus
propósitos. O GCL atende amplamente a simulação dos Sistemas Computacionais aqui estudados.
Modelagem e Simulação Discreta 102
Exemplo 10.3 A sequência xi = 5xi-1 + 3 mod 8 tem período igual a 8. Na Tabela 10.1 estão os números
aleatórios gerados por esta sequência para vários valores de x1.
Tabela 10.1 Números aleatórios gerados a partir de xi = 5xi-1 + 3 mod 8 para x1 = 0, 1, ..., 7 (semente)
x0 0 1 2 3 4 5 6 7
x1 3 0 5 2 7 4 1 6
x2 2 3 4 5 6 7 0 1
x3 5 2 7 4 1 6 3 0
x4 4 5 6 7 0 1 2 3
x5 7 4 1 6 3 0 5 2
x6 6 7 0 1 2 3 4 5
x7 1 6 3 0 5 2 7 4
Na Tabela 10.1, as sequências geradas são as colunas, a linha coluna correspondente a x 1 é a semente utilizada
para gerar a coluna de números aleatórios. A análise dos valores gerados apresentados na Tabela 10.1
permitem as seguintes conclusões:
• as sequências geradas têm os mesmos valores, são os números de 0 a 7, o que muda é a ordem destes
números em cada sequência (coluna) gerada40
• a semente x1 determina a ordem da sequência
• m determina a quantidade de valores gerados no ciclo
• o ciclo deste gerador é igual a 8 (m) e sua sequência é { x 0, x1, x2, x3, x4, x5, x6, x, x7 }
• a soma do ciclo gerado é igual a 28, generalizando, m(m-1)/2
Tabela 10.2 Números aleatórios gerados a partir de xi = 5xi-1 + 3 mod 8 para x1 = 0, 1, ..., 7 (semente)
x1 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
x2 3 0 5 2 7 4 1 6 3 0 5 2 7 4 1 6
x3 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1
x4 5 2 7 4 1 6 3 0 5 2 7 4 1 6 3 0
x5 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3
x6 7 4 1 6 3 0 5 2 7 4 1 6 3 0 5 2
x7 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5
x8 1 6 3 0 5 2 7 4 1 6 3 0 5 2 7 4
x9 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
x10 3 0 5 2 7 4 1 6 3 0 5 2 7 4 1 6
x11 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1
x12 5 2 7 4 1 6 3 0 5 2 7 4 1 6 3 0
x13 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3
x14 7 4 1 6 3 0 5 2 7 4 1 6 3 0 5 2
x15 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5
40 Um GCL gera uma única série aleatória e, ao variar a semente, pode-se acessar diferentes sequências desta série.
Modelagem e Simulação Discreta 103
x16 1 6 3 0 5 2 7 4 1 6 3 0 5 2 7 4
Na Tabela 10.2, as sequências geradas são as colunas, a linha coluna correspondente a x 1 é a semente utilizada
para gerar a coluna de números aleatórios. A análise dos valores gerados apresentados na Tabela 10.2
permitem as seguintes conclusões:
• as sequências geradas têm os mesmos valores, são os números de 0 a 7, o que muda é a ordem destes
números em cada sequência (coluna) gerada
• a semente x0 determina a ordem da sequência
• m determina a quantidade de valores gerados no ciclo,
• o ciclo deste gerador é igual a 8 (m) e sua sequência é { x 1, x2, x3, ..., x8 }
• a partir de x9 a sequência é reiniciada, e o novo ciclo é igual ao ciclo anterior, ou seja, x 9 = x1, x10 = x2,
…, x15 = x7, x16 = x1, e assim por diante
• para x1 = x9 = x17 = … = xkm+1, k = 1, 2, 3, ...
• para xkm+1, k = 1, 2, 3, …, a sequência gerada é reiniciada
Como foi destacado, a semente x0 é o primeiro valor de uma sequência dos GCLs e, para
gerar as diferentes sequências do mesmo GCL, bastar fazer variar suas sementes. Logo, a
seleção adequada da semente se reveste de grande importância.
A linguagem C, por exemplo, possui a função time(nullptr) que obtém o número de segundos
transcorridos desde 01/01/1970 00:00:00.
Na Tabela 10.3 estão algumas linguagens de programação e seus GNA GCL. Estes GCL
possuem período máximo igual a m.
O GCL MMIX de 64 b com um ciclo de 1,8x10 19 e também o GCL Posix de 48 b com um ciclo
de 2,8×1014.
A linguagem C (GNU GCC e G++) possui duas funções e uma constante para gerar números
aleatórios com seu GCL (Tabela 10.3), a saber:
O Algoritmo 10.2 gera valores da distribuição uniforme U no intervalo (0,1) tendo como
semente time(0).
Algoritmo 10.2 Programa em C para gerar valores da distribuição uniforme no intervalo (0,1)
#include <stdlib.h>
#include <time.h>
double u( void ){
return (rand()+1.0)/(RAND_MAX+2.0); // intervalo (0,1)
}
int main( void ){
srand(time(nullptr));
printf( " %f ", u() );
return 0;
}
rand ( )
∈[0,1] 10.2
RAND MAX
Para gerar valores de U no intervalo (0,1) deve ser usada a Equação 10.3.
rand ( )+1
∈(0,1) 10.3
RAND MAX +2
Modelagem e Simulação Discreta 105
Para gerar valores de U no intervalo [a,b] deve ser usada a Equação 10.4 para u ∊ [0,1].
a+(b−a)u 10.4
Para gerar valores de U no intervalo (a,b) deve ser usada a Equação 10.5 para v ∊ (0,1).
a+(b−a) v 10.5
z n=(x n − y n )mod m1
x n=(a1 x n−1 +a2 x n−2 +a3 x n−3 )mod m1
y n =(b 1 y n−1 +b 2 y n−2 +b 3 y n−3) mod m2
em que a1 = 0, a2 = 63308, a3 = −183326, b1 = 86098, b2 = 0, b3 = −539608, m1 = 2147483647 e m2 =
2145483479.
Fonte: GNU Scientific Library, Release 2.6. 2019 (https://www.gnu.org/software/gsl/doc/html/).
Exemplo 10.6 O gerador recursivo combinado L’Ecuyer's, referido como MRG32k3a (L’Ecuyer, 2020), combina
dois geradores recursivos e tem período igual a 2 191 (3,1×1057), suficientemente longo para a maioria das
simulações senão para todas elas (L’Ecuyer's, 2007):
xi = ( a1 xi-1 + a2 xi-2 + a3 xi-3 ) mod m1
yi = ( b1 yi-1 + b2 yi-2 + b3 yi-3 ) mod m2
zi = ( xi-yi ) mod m1
ui = zi/m1
em que:
a1 = 0, a2 = 1403580, a3 = 810728, m1 = 232-209,
b1 = 527612, b2 = 0, b3 = 1370589 e m2 = 232-22853,
zi, i = 1, 2, ... é a sequência de números pseudoaleatórios,
ui, i = 1, 2, ... é a distribuição uniforme desejada
#include <time.h>
#define norm 2.328306549295728e-10
#define m1 4294967087.0
#define m2 4294944443.0
#define a12 1403580.0
#define a13n 810728.0
#define a21 527612.0
#define a23n 1370589.0
// The seeds for s10, s11, s12 must be integers in [0, m1-1] and not all 0.
// The seeds for s20, s21, s22 must be integers in [0, m2-1] and not all 0.
long s10, s11, s12, s20, s21, s22;
int gna( void ){
return rand(); // intervao [0,RAND_MAX]
}
double MRG32k3a(void){
long k;
double p1, p2;
p1 = a12 * s11 - a13n * s10; // Component 1
k = p1 / m1;
p1 -= k * m1;
if( p1 < 0.0 ) p1 += m1;
s10 = s11;
s11 = s12;
s12 = p1;
p2 = a21 * s22 - a23n * s20; // Component 2
k = p2 / m2;
p2 -= k * m2;
if( p2 < 0.0 ) p2 += m2;
s20 = s21;
s21 = s22;
s22 = p2;
printf( "%11ld %11ld %11ld :: ", s10, s11, s12);
printf( "%11ld %11ld %11ld >> ", s20, s21, s22);
return norm*( p1 <= p2 ? p1-p2+m1 : p1-p2 ); // Combination
}
int main( void ){
int i;
srand(time(0));
s10 = gna(), s11 = gna(), s12 = gna(),
s20 = gna(), s21 = gna(), s22 = gna();
for( i = 0; i < 20; i++ )
printf( "%.22lf\n", MRG32k3a() );
return 0;
}
Os geradores Tausworthe operam diretamente sobre bits. Uma sequência de dígitos binários
é definida pela recorrência bi = (c1bi-1 + c2bi-2 + ··· + cqbi-q) mod 2, onde c1, ..., cq são
constantes binárias.
Neste caso, um ciclo é definido como uma sequência de valores binários que se repetem
continuamente. Portanto, como os q bits anteriores são utilizados, o período pode chegar a 2 q
- 1. De modo geral, os geradores Tausworthe são da forma b i = (bi-r+ bi-q) mod 2 sendo r, q ∈
N e 0 < r < q.
O Gerador Mersenne Twister (MT) foi desenvolvido por Makoto Matsumoto e Takuji Nishimura.
Seu ciclo é extremamente longo, com período de 2 19937-1 (aproximadamente 1013819), com
Modelagem e Simulação Discreta 107
sequência iid. Seu código em C está disponível no arquivo mt19937.c (Mersenne Twister,
2011). Este gerador já está disponível em C++ na sua biblioteca random.
A classe clGNA escrita em Javascript está descrita no Algoritmo 10.4. Nesta classe a semente
(x0) é obtida do tempo do navegador, dado em milissegundos desde 01/01/1970. Por
exemplo, para a data 28/05/2020 às 10h00min a semente é igual a 1590660000.
Nesta classe, o valor de m é 231-1, mas pode-se adaptar a classe para outros valores de m. O
valor de x0 é corrigido se x0 > m e se x 0 < 0. A função setX0 é executada quando se instância
um objeto da classe. As funções gna, gna1, gna2, ..., gna7, geram números aleatórios no
intervalo [0,m-1].
O Exemplo 10.8 é um programa em C++ para gerar números aleatórios Apple CarbonLib,
conforme a descrito na Tabela 10.3. Os demais GCL desta tabela podem ter programas
semelhantes ao exemplo abaixo.
Exemplo 10.7 Programa em C++ para gerar números aleatórios Apple CarbonLib.
O GNA Apple CarbonLib tem m = 2 31-1, a = 16807 e c = 0, a função gnacl abaixo gera dados deste GNA com
semente obtida do tempo do sistema.
O software abaixo gera 10 números aleatórios Apple CarbonLib.
#include <iostream>
#include <cmath>
#include <ctime>
• Teste de frequência
• Teste de serial
• Teste de autocorrelação
• Teste runs
• Teste de Chi-Quadrado
Também existe muita controvérsia sobre quais são os melhores, se testes teóricos são mais
definitivos que os empíricos. Se a amostra utilizada em um teste empírico for muito pequena,
o resultado pode corresponder apenas a um pequeno fragmento do ciclo. Por outro lado, um
teste que leva em conta um ciclo inteiro pode não ser compatível com fragmentos deste
mesmo ciclo.
Assim, deve-se escolher com cuidado o teste do gerador se a simulação é onerosa, requer
alta precisão ou é um componente crítico de um estudo.
Muitos testes estatísticos úteis podem ser encontradas em NIST (2010). Os sítios a seguir
possuem suítes para testar sequências de números aleatórios:
Figura 10.1 Gráfico de dispersão para avaliar graficamente a independência dos números
aleatórios.
A Figura 10.2 é um gráfico de barra que é útil para avaliar graficamente a independência e a
distribuição dos números aleatórios gerados. As alturas das barras exibem poucas diferenças
indicando que os números gerados estão bem distribuídos.
Modelagem e Simulação Discreta 110
A Figura 10.2 foi gerada pelo Algoritmo 10.6 escrito em Javascript, que faz uso da biblioteca
gráfica flot (www.flotcharts.org), utilizando as bibliotecas jquery.js e jquery.flot.js.
Algoritmo 10.6 Código Javascript para gerar gráficos de barra de números aleatórios
<!doctype html>
<html>
<title>Grafico de Barra de Numero Aleatorio</title>
<head>
<script src="jquery.js"> </script>
<script src="jquery.flot.js"></script>
<script>
function Plot(){
var q = 10,
n = 0,
d = new Array(q),
sum = new Array(q);
for( var i = 0; i < q; i++ )
sum[i] = 0;
var timer = setInterval(function(){
$(function(){
for( var i = 0; i < q; i++ ){
var r = Math.floor(Math.random()*q);
sum[r]+= 1;
d[i] = d.push([i+1,sum[r]]);
n++;
}
document.getElementsByName('valor')[0].value = n;
$.plot($("#graph"),[{data:d,bars:{ show:true,barWidth:0.3}}]);
});
},200);
}
window.onload = Plot;
</script>
</head>
<body>
<h3>Grafico de Barra de Gerador de Numero Aleatorio</h3>
<div id="graph" style="width: 400px; height: 400px;"></div>
<input type="text" value="0" name="valor" size="12">
</body></html>
O Teste Chi-Quadrado (CQ) pode ser usado como teste de aderência de uma sequência de
números aleatórios à distribuição de probabilidade uniforme (DPU) com nível de significância
α.
Exemplo 10.8 Foram gerados uma sequência com 140 números aleatórios, organizados em 7 classes, descritas
abaixo. Verifique se a sequência é uniformemente distribuída com 5% de significância.
i Oi Ei
1 35 20
2 20 20
3 30 20
4 15 20
5 10 20
6 10 20
7 20 20
Regra de decisão: se, para α fixado, obtém-se D > χ 2(1-α;gl) então rejeita-se a hipótese H0, caso contrário a
hipótese H0 não pode ser rejeitada.
Neste caso, χ2(0,95;6) = 12,59 e D > χ2(0,95;6), isto é, 27,5 > 12,59. Rejeita-se H0.
Conclusão: a sequência de números aleatórios não é uniformemente distribuída segundo o Teste de CQ com
95% de confiança.
Uma sequência com n números aleatórios têm autocorrelação ρ(k) dada pela Equação 10.7.
n−k
i=1
• tamanho da amostra: n = 7
• média amostral: m = (3+2+5+4+7+6+8)/7 = 35/7 = 5
• numerador: [(3-5)x(2-5)+(2-5)x(5-5)+(4-5)x(4-5)+(4-5)x(7-5)+(7-5)x(6-5)+(6-5)x(8-5)] = 9
• denominador: [(3-5)2+(2-5)2+(5-5)+(4-5)2+(7-5)2+(6-5)2+(8-5)2] = 28
• autocorrelação: ρ(1) = 9/28 = 0,32
O Algoritmo 10.7, escrito em Javascript, ilustra alguns dos testes teóricos mais usuais:
autocorrelação, teste de CQ e custo computacional.
function Custo(){
var gna = new clGNA(),
inicio = (new Date()).getTime(),
fim;
for( var n = 0; n < CUSTO; n++ )
var a = gna.gna();
fim = (new Date()).getTime();
return "custo unitário = " + ((fim-inicio)/CUSTO).toExponential(4) + " s";
}
Modelagem e Simulação Discreta 114
function prn(fo,v){
var str = "<br><table border='1'><tr><td>i<td>v[i]<td>fo[i]<td>fe[i]";
for( var i = 0; i < CLASSE; i++ )
str += "<tr><td>"
+ i + "<td>"
+ v[i] + "<td>"
+ fo[i].toFixed(4) + "<td>"
+ 1.0/CLASSE;
str += "</table>";
return str;
}
function Calcular(){
var gna = new clGNA(), x = [], v = [], fo = [], str = "";
for( var i = 0; i < CLASSE; i++ )
v[i] = fo[i] = 0.0;
for( var n = 0; n < NUMERO; n++ ){
x[n] = gna.gna();
v[Math.floor(CLASSE*x[n])] += 1;
}
for( var i = 0; i < CLASSE; i++ )
fo[i] = v[i]/NUMERO;
str += "<p> " + prn(fo,v)
+ "<p>1. " + Autocorrelacao(x)
+ "<p>2. " + CQ(fo)
+ "<p>3. " + Custo();
return str;
}
window.onload = function(){
texto.innerHTML = "Testes Teóricos para Geradores de Números Aleatórios<hr>"
+ Calcular()
+ "<p>Conclusão: GNA estatisticamente independentes (1),"
+ " uniformemente distribuído (2) e"
+ " de baixo custo computacional (3).";
}
</script>
</head>
<body>
<div id="texto"></div>
</body>
</html>
Devido à Lei dos Grandes Números, poucos dados gerados por um GNA são mal distribuídos.
Porém, ao gerar grandes quantidades de dados por meio de um GNA, pode-se observar que
tendem a serem igualmente distribuídos.
Daí surge uma pergunta, quantos pacotes devem ser simulados? Experimentalmente, pode-
se observar que a partir de 3.000 (três mil) valores gerados de um GNA já se obtém-se uma
boa uniformidade na distribuição dos dados, são razoavelmente uniformes. A partir daí já se
observa variações devido ao acaso, à aleatoriedade dos processos e dos sistemas,
construídos ou não pelo homem.
Esta não é ainda nossa resposta porque a simulação vai além do GNA, mas já é um bom
começo.
O Algoritmo 10.8 gera números aleatórios e os classifica em 10 (dez) decis, ele foi executado
para n iguais a 500, 1000, 2000, 3000, 4000, 5000 e 10000, estes resultados podem ser
vistos na Tabela 10.5. Quanto mais números são gerados melhor a distribuição entre os
decis.
Modelagem e Simulação Discreta 115
Algoritmo 10.8 Código Javascript para gerar e exibir números aleatórios classificados em 10
decis.
<!doctype html>
<html>
<title>Classificação de Números Aleatórios</title>
<head>
<script>
var q = 10,
n = 0,
sum = new Array(q);
function Random(){
for( var i = 0; i < q; i++ )
sum[i] = 0;
setInterval(Vetor,5);
}
function Vetor(){
var r = Math.floor(Math.random()*q),
wnd = document.getElementById("txt"),
txt;
sum[r] = sum[r]+1;
n++;
txt = "<table border='1'><tr>";
for( var i = 0; i < q; i++ ){
txt += "<td>" + (sum[i]/n).toFixed(3);
}
txt += "</table>";
wnd.innerHTML = " numeros gerados = " + n + txt;
}
window.onload = Random;
</script>
<body><div id="txt"></div></body>
</html>
Tabela 10.5 Classes de números aleatórios utilizando o Algoritmo 10.8 para n iguais a 500,
1000, 2000, 3000, 4000, 5000 e 10000.
números gerados = 500
0.104 0.100 0.108 0.106 0.092 0.102 0.092 0.088 0.102 0.106
A Figura 10.3 apresenta a variação de ρ(1) de n valores GNA GCC do C++, para n de 500 a
10000. O valor de ρ(1) diminui com n e, para n > 500, as sequências geradas são
estatisticamente independentes pois ρ(1) < 0,02 – muito próximo de zero.
Modelagem e Simulação Discreta 116
10.12 Questões
10.13 Exercícios
9. Considere os casos descritos por Bandyopadhyay e Bhattacharya para propor e testar um gerador de
números aleatórios para um hardware com palavra de:
a) 8 bits
b) 11 bits
c) 14 bits
Modelagem e Simulação Discreta 117
Uma variável aleatória é uma função que mapeia os eventos definidos em um espaço
amostral no conjunto de valores [0,1]. Diferentes variáveis aleatórias podem ser associadas a
um experimento, o que permite expressar tanto a sua complexidade quanto a variação do
seu comportamento através das mais diversas funções densidade de probabilidade, tornando
possível sua simulação.
Essas duas etapas são essencialmente independentes. O passo 1 é obtido por meio
geradores de números aleatórios (GNA) e o passo 2 é resolvido pelo método da inversa.
Modelagem e Simulação Discreta 118
Nem sempre x = F-1(u) tem solução analítica, devendo ser considerado os seguintes fatores
para seleção do método de geração de variáveis aleatórias:
• exatidão - deve-se usar sempre métodos exatos e utilizar métodos baseados em aproximação em último
caso
• eficiência - dentre os diversos métodos exatos deve-se sempre escolher o mais eficiente
• simplicidade - em geral é preferível utilizar métodos simples
4. Gerar u ~ U(0,1)
5. Calcular x = F-1(u), onde F-1(u) é o valor de x quando F(x) = u
Uma grande desvantagem deste é que seu uso esta limitado a distribuições que possuem
FDA inversível como, por exemplo, as distribuições Exponencial, Logística e Pareto, Gumbel
ou Valores Extremos e Weibull. A Tabela 11.1 lista estas distribuições de probabilidade, suas
fdp, fda e x, a técnica de GVA destas fda, onde u ~ U(0,1).
Tabela 11.1 Distribuições de probabilidade, fdp, fda e x, a técnica de GVA destas fda, onde u
~ U(0,1).
Distribuição f(x) F(x) x
Exponencial a exp(−a x) 1−exp (−a x) −a ln( u)
1
1 2 x−m 1
Logística sech ( ) x−m m−s ln ( −1)
4s 2s 1+exp [−( )] u
s
1
a
1 1 1 1
Pareto ( ) (1− a−1 ) [ ] a−1
x a−1 x 1−u (a−1)
1 x −m x−m x −m
Valores Extremos exp[− −exp(− )] exp[−exp (− )] m−s ln [−ln(u)]
s s s s
a x a−1 x a x a 1
Weibull ( ) exp[−( ) ] 1−exp [−( ) ] b[−ln(u)] a
b b b b
Exemplo 11.1 Gerar variáveis aleatórias X i de uma função densidade de probabilidade f(x) é
resolver a equação Xi = F-1(ui) em que F(x) é a função densidade de probabilidade
Modelagem e Simulação Discreta 119
acumulada e ui ∼ U(0,1).
x
Para obter Xi = F (ui) pode-se resolver a equação integral
-1
∫ f ( x )dx=u
−∞
, que nem sempre
tem solução analítica.
Para aquelas funções em que x = F -1(u) não possuem solução analítica, foram idealizadas
algoritmos engenhosos que, embora sejam aproximados, substituem os métodos numéricos
de modo satisfatório, evitando esforços computacionais além do necessário, como nas
integrações numéricas.
Para várias distribuições estatísticas importantes, a variável aleatória desejada X pode ser
expressa como a soma de outras variáveis aleatórias, cuja geração pode ser feita de maneira
mais rápida do que geração direta de X. Supõe-se que X seja a soma de m variáveis
aleatórias iid da forma X = Y1 + Y2 + ... + Ym. Pode-se utilizar o seguinte algoritmo:
Este método pode ser aplicado para todas as distribuições que são a soma de variáveis
aleatórias. Como a distribuição Binomial pode ser expressa como a soma de variáveis
aleatórias da distribuição Bernoulli, que são muito mais fáceis de serem obtidas.
Da mesma forma, a distribuição Binomial Negativa pode ser expressa como a soma de
variáveis aleatórias da distribuição Geométrica, que também são muito mais fáceis de serem
obtidas.
A variável aleatória desejada X pode ser expressa como uma combinação linear X = c 1Y1 +
c2Y2 + ... + cnYn onde Σci=1. Pode-se utilizar o seguinte algoritmo:
Assumindo que uma distribuição F, contínua, possui fdp f(x), deve-se encontrar uma
distribuição alternativa G cuja fdp g(x) englobe o mais perfeitamente possível f(x), ou seja,
que seja majoritária sobre ela, Figura 11.2, a função G é também chamada de função
envelope.
Modelagem e Simulação Discreta 120
A Figura 11.2 ilustra as funções envolvidas no algoritmo apresentado acima. Nela, pontos são
gerados dentro do intervalo de g(x). Desses pontos, aqueles que caem dentro dos limites de
f(x) são aceitos, e os que caem fora são rejeitados.
Exemplo 11.2 Obtenha o algoritmo para a geração de variáveis aleatórios Normais padrão pelo método da
Método da Aceitação Rejeição.
A fdp de uma variável aleatória Z com distribuição z ~ N(0,1) é dada por f(z) = 2 exp(-z 2/2)/(2π)1/2. Será
utilizada a função exponencial g(x) = e-x/2 para majorar f(z), com f, g: R→R. A Figura 11.3 ilustra o
comportamento destas funções para valores positivos das abscissas.
Este algoritmo gera apenas valores positivos da fdp Normal, útil para gerar grandezas temporais.
Sobre o procedimento 2: como g é exponencial será utilizado o método da Inversa. Recomenda-se que a função
envelope seja do tipo x = F−1(u), tenha inversa analítica.
Modelagem e Simulação Discreta 121
De modo geral, valores de qualquer distribuição de probabilidade podem ser obtidos pelo
Método da Aceitação Rejeição. A distribuição Beta é uma delas.
FDA Poisson
A distribuição de Poisson, estima a probabilidade de ocorrência de x sucessos em um dado
intervalo de tempo, por meio da seguinte função densidade de probabilidade:
41 Com os computadores atuais a resolução numérica da equação integral é viável pois tem baixo custo computacional.
Modelagem e Simulação Discreta 122
FDA Normal
A transformação de Box-Muller consiste na geração de pares de amostras aleatórias
independentes com distribuição normal a partir de números aleatórios uniformemente
distribuídos. Sejam u, v ~ U(0,1) e x, y ~ N(µ,σ2), tem-se que:
FDA Normal 2
Uma outra maneira de gerar variáveis aleatórias com distribuição normal é a aproximação
obtida a partir do Teorema do Limite Central, que consiste em gerar 12 variáveis u ~ U(0,1),
somá-las e subtrai 6. A variável aleatória resultante tem distribuição normal
aproximadamente padrão com valores em (-6,+6).
12
z=∑ ui −6 , z ∊ (-6,+6) e z ~ N(0,1); x=μ+σ z , x ~ N(µ,σ2).
i=1
FDA Gamma
A soma de b variáveis aleatórias exponencialmente distribuídas tem distribuição gamma.
b b
a b x b−1 e−ax 1 1
f ( x)= , x=− ∑ ln (ui )=− ln ∏ u i , x ~ G(a,b).
(b−1)! a i =1 a i=1
É importante fazer testes nas amostras geradas para verificar a qualidade da sequência
aleatória, como os testes de uniformidade e de aderência à distribuição de interesse. Neste
sentido, recomenda-se os testes CQ como testes de aderência.
Algoritmo 11.1 Classe clGVA() em Javascript possui funções para gerar variáveis aleatórias
das principais fda de uso em simulação
function clGVA(){
var GNA = new clGNA();
this.Bernoulli = function(p){
if( GNA.gna() > p ) return 0;
return 1; //Law(2007)
}
this.Beta = function(a,b){
var x = this.Gama(a,1),
Modelagem e Simulação Discreta 123
y = this.Gama(b,1);
return x/(x+y); //Law(2007)
}
this.Binomial = function(n,p){
var x = 0;
for( var i = 0; i < n; i++ )
x += this.Bernoulli(p);
return x; //Law(2007)
}
this.BinNegativa = function(s,p){
var x = 0;
for( var i = 0; i < s; i++ )
x += this.Geometrica(p);
return x; //Law(2007)
}
this.Erlang = function(b,m){
var p = 1.0;
for( var i = 0; i < m; i++ )
p *= GNA.gna();
return -b*Math.log(p)/m; //Law(2007)
}
this.Exponencial = function(a){
return -a*Math.log(GNA.gna()); //Law(2007)
}
this.Gama = function(a,b){
var p = 1.0;
for( var i = 0; i < b; i++ )
p *= GNA.gna();
return -Math.log(p)/a;
}
this.Geometrica = function(p){
return Math.ceil( Math.log(GNA.gna())/Math.log(1-p) ); // teto = ceil Law(2007)
}
this.Logistica = function(m,b){
return m-b*Math.log((1.0/GNA.gna()-1);
}
this.LogNormal = function(m,s){
return Math.exp(this.Normal(m,s)); //Law(2007)
}
this.Normal = function(m,s){
var u = GNA.gna(), v = GNA.gna();
return m + s*Math.sqrt(-2.0*Math.log(u))*Math.cos(2*Math.PI*v);
}
this.Pareto = function(a){
return Math.pow( 1/(1-GNA.gna()*(a-1)),1/(a-1));
}
this.Poisson = function(l){
var i = -1, a = Math.exp(-l), b = 1;
do{
i++;
b *= GNA.gna();
}while( b >= a ); //Law(2007)
return i;
}
this.Triangular = function(a,b,m){
var u = GNA.gna();
m = (m-a)/(b-a);
if( u > m ) return 1-Math.sqrt((1-m)*(1-u));
return Math.sqrt(m*u); //Law(2007)
}
this.UniformeContinua = function(a,b){
return a+(b-a)*GNA.gna(); //Law(2007)
}
this.UniformeDiscreta = function(i,j){
return Math.floor(i)+Math.floor((j-i+1)*GNA.gna()); // floor() = piso() Law(2007)
}
this.ValoresExtremos = function(a,b){
return a-b*Math.log(-Math.log(GNA.gna()));
}
this.Weibull = function(a,b){
return b*Math.pow(-Math.log(GNA.gna()),1/a); //Law(2007)
}
}
Modelagem e Simulação Discreta 124
Exemplo 11.3 Faça um programa em C++ para gerar variáveis aleatórias da fdp Pareto utilizando o GNA Apple
CarbonLib.
O GNA Apple CarbonLib tem m = 2 31-1, a = 16807 e c = 0. A função gnacl gera dados deste GNA com semente
obtida do tempo do sistema.
A função Pareto gera variáveis aleatórias da fdp Pareto de parâmetro a e faz uso do GNA Apple CarbonLib
gnacl.
Por fim, tomando a = 3.0 como exemplo, são geradas 10 variáveis aleatórias da fdp Pareto fazendo uso do GNA
Apple CarbonLib.
#include <iostream>
#include <cmath>
#include <ctime>
Exemplo 11.4 Faça um programa em C++ para gerar variáveis aleatórias da fdp Normal utilizando o GNA Vax.
O GNA Vax tem m = 231, a = 69069 e c = 1. A função gnavax gera dados deste GNA com semente obtida do
tempo do sistema.
A função Normal2 gera variáveis aleatórias da fdp Normal de parâmetros m e s e faz uso do GNA Vax.
Por fim, tomando m = 3.0 e s =2.0 como exemplo, são geradas 10 variáveis aleatórias da fdp Normal fazendo
uso do GNA Vax.
#include <iostream>
#include <cmath>
#include <ctime>
#define PI 3.1415926535897932384
Se a função for Poisson, o intervalo médio entre chegadas é o parâmetro necessário para se
gerar os processos de chegada.
Os parâmetros de uma função podem ser calculados por meio de estatísticas obtidas a partir
de amostras do processo e, embora ele seja discreto, deve-se buscar ajustar a melhor função
densidade de probabilidade, quer seja discreta ou contínua, dentre as disponíveis.
11.9 Questões
3. Identificar as fda deste capítulo que podem ter variáveis aleatórias geradas pelos métodos
da:
• transformação inversa
• rejeição
• composição
• convolução
11.10 Exercícios
1. Gere variáveis aleatórias utilizando os algoritmos propostos neste capítulo e verifique sua
aderência à distribuição com os testes CQ. Faça o teste para 50, 100 e 200 valores gerados
com confiança de 95 e 99%.
3. Implemente um algoritmo para a geração de variáveis aleatórias Normais padrão f(z) pelo
Método da Aceitação-Rejeição utilizando a função exponencial g(t) = e -t/k para majorar f(z)
com z ≥ 0 e k = 3, 4, 5, 10.
5. Gere 100 variáveis aleatórias Exponential em C++11 e verifique sua aderência a esta
distribuição com os testes CQ com confiança de 99%.
6. Gere 100 variáveis aleatórias Poisson em C++11 e verifique sua aderência a esta
distribuição com os testes CQ com confiança de 99%.
Modelagem e Simulação Discreta 126
A Estatística usa a teoria da probabilidade e outros ramos da matemática para estudar dados
amostrais. Em particular, os dados são vistos como aplicações de variáveis aleatórias cuja
distribuição conjunta é previamente especificada. A partir daí, a análise matemática atua
puramente sobre o modelo e seus parâmetros (Kroese & Chan, 2014).
Teste de aderência são métodos estatísticos que permitem avaliar o ajuste de uma
distribuição de probabilidades aos dados de uma variável aleatória, o que permite descrever
seu comportamento.
A Figura 12.2 ilustra o processo de gerar dados representativos para simulação a partir de
amostras de dados de um sistema computacional.
Modelagem e Simulação Discreta 127
Figura 12.2 Processo de gerar dados para simulação a partir de amostras de dados de um
sistema computacional.
A Tabela 12.1 descreve as cinco etapas necessárias para se obter uma distribuição de
probabilidades capaz de representar o comportamento uma variável aleatória (Jain, 1991).
Tabela 12.1 Etapas para a aplicação de testes de aderência, adaptadas de Jain (1991).
4. Estimação dos
• os parâmetros da distribuição ou distribuições de probabilidades
Parâmetros da Distribuição identificadas devem ser estimados a partir dos dados amostrados
Identificada
• deve-se testar o ajuste dos dados amostrados à distribuição ou
5. Testes de Aderência distribuições de probabilidades identificadas por meio de testes
de aderência
Para cada uma destas amostras deve-se ajustar uma distribuição de probabilidade e ambas
são utilizadas para representar o comportamento do sistema, uma para gera valores de ic e a
outra para gerar valores de ts.
Modelagem e Simulação Discreta 128
Com poucos dados não se pode fazer simulação confiável. Este processo viabiliza a
simulação ao permitir gerar incontáveis dados que, embora sejam gerados por modelos
matemáticos, representam o comportamento do sistema e levam a conclusões válidas para
o mundo real.
A partir de poucos dados medidos pode-se estimar uma fdp do comportamento e variáveis
do sistema e, a partir desta fdp, pode-se gerar novos dados destas variáveis, quantos forem
necessários.
A obtenção de dados experimentais pode ter custo elevado e esta metodologia estatística
permite fazer mais com menos: gerar muitos dados do sistema computacional a partir de
poucos dados medidos e representativos.
A autocorrelação é uma estatística que informa o quanto o valor de uma variável aleatória é
capaz de influenciar seus vizinhos à distância k, k > 0. Os valores que a autocorrelação
podem assumir variam de -1 a 1, a ausência de correlação é indicada por 0, ou seja, as
observações da amostra são independentes.
Uma variável aleatória Xi discreta, com média da população μ = E(X) e variância σ 2 = E[(X-
μ)2], tem autocorrelação ρ(k) definida por:
n−k
Exemplo 12.1 Calcule ρ(1) e ρ(2) dos dados referente a ciclos de leitura de 5 unidades de memória: x = {37,0
54,2 55,1 28,1 24,0}.
n=5
Cálculo da média amostral m: m = (37,0+54,2+55,1+28,1+24,0)/5 = 198,4/5 = 39,7
Cálculo da variância da amostra s 2: s2 = [(37,0-39,7)2+(54,2-39,7)2+(55,1-39,7)2+(28,1-39,7)2+(24,0-39,7)2]/(5-
1) = 835,7/4 = 208,9
Cálculo de ρ(1) = [(37,0-39,7)x(54,2-39,7) + (54,2-39,7)x(55,1-39,7) + (55,1-39,7)x(28,1-39,7) + (28,1-
39,7)x(24,0-39,7)]/(5-1)/208,9 = (188,0/4)/208,9 = 47,0/208,9 = 0,225.
Este valor indica que os dados estão pouco correlacionados.
Cálculo de ρ(2) = [(37,0-39,7)x(55,1-39,7) + (54,2-39,7)x(28,1-39,7) + (55,1-39,7)x(24,0-39,7)]/3/208,9 = (-
451,3/3)/208,9 = -150,4/208,9 = -0,72.
Memória de cálculo:
i xi xi-m (xi-m)x(xi+1-m) (xi-m)x(xi+2-m)
1 37,0 37,0-39,7 (37,0-39,7)x(54,2-39,7) = -2,7 (37,0-39,7)x(55,1-39,7) = -41,3
2 54,2 54,2-39,7 (54,2-39,7)x(55,1-39,7) = 14,5 (54,2-39,7)x(28,1-39,7) = -168,1
3 55,1 55,1-39,7 (55,1-39,7)x(28,1-39,7) = 15,4 (55,1-39,7)x(24,0-39,7) = -241,8
4 28,1 28,1-39,7 (28,1-39,7)x(24,0-39,7) = -11,6
5 24,0 24,0-39,7
Modelagem e Simulação Discreta 129
Uma forma de avaliar visualmente a independência dos dados de uma amostra é o gráfico de
dispersão, que é feito pelos pares ordenados (xi,xi+k) em um plano cartesiano. Quando eles
são independentes estão dispersos aleatoriamente, caso contrário estão próximos de uma
reta.
Exemplo 12.2 Faça o gráfico de dispersão dos pares ordenados (xi,xi+1) em um plano cartesiano para x = {37,0
54,2 55,1 28,1 24,0}.
Tabela 12.2 Funções densidade de probabilidade mais relevantes com seus parâmetros,
média e variância (Forbes et al., 2011)
fdp FDP Parâmetros E(x) V(x)
λ m x m−1 e−λ x m m
Erlang-m , x≥0 λ>0
λ
(m−1)! λ2
−a x 1 1
Exponencial ae , x>0 a>0
a a2
2
(x−μ)
1 − 2 μ ∊ (-∞,∞)
Normal e 2 σ , x ∈ℝ σ>0
μ σ2
σ √2 π
x −λ
λ e
Poisson , x≥0 λ>0 λ λ
x!
1 a+b (b−a)
2
Uniforme , x ∈[a ,b ] a<b
2
b−a 12
x b
−( )
bx
b−1
ea a>0 b+1 2 b+2 2 b+1
Weibull aΓ( ) a [Γ ( )−Γ ( )]
b
, x≥0 b>0 b b b
a
∞
em que Γ( a)=∫ x e dx .
a−1 −x
Em Processos de Markov os eventos passados não influem nos eventos presentes, ou seja,
para s e t > 0 então P( X > s+t | X > s ) = P( X > t ), usualmente denominados processos
sem memória.
Modelagem e Simulação Discreta 131
A distribuição Exponencial, f(x) = λe-λx, é sem memória42 (Kroese & Chan, 2014).
x
A função densidade acumulada (FDA) F(x) = P(X ≤ x ) = ∫ f (x)dx = 1-e-λx ∴ P(X > x ) = 1-
0
P(X ≤ x ) = e-λx
Uma amostra aleatória (X1, X2, ..., Xn) retirada de uma população com uma função de
densidade de probabilidade f(x,θ), em que θ é um vetor de parâmetros, tem uma função
densidade de probabilidade conjunta, a função de verossimilhança L(x,θ), definida pelo
produto das funções densidade de cada uma das observações.
n
L(x ,θ)=∏ f ( x i , θ) 12.2
i=1
O problema consiste em obter o vetor θ que maximiza L(x,θ), o que é feito igualando a zero
as derivadas parciais da função de verossimilhança em relação ao vetor θ
n
∂ ∏ f ( xi , θ) 12.3
∂ L( x ,θ) i =1
∂θ = ∂θ =0
Na maioria dos casos é recomendável utilizar logaritmo natural da função de verossimilhança
(lnL), pois maximizar o logaritmo natural de uma função é, em geral mais simples, e produz
os mesmos resultados da maximização da função original.
n
∂ ln ∏ f (x i , θ) 12.4
∂ln L(x ,θ) i=1
= =0
∂θ ∂θ
Exemplo 12.3 Seja determinar o parâmetro β da fdp Exponencial pelo método da Máxima Verossimilhança a
partir de uma amostra aleatória (X1, X2, ..., Xn).
∂ L( x ,θ)
=0
∂θ
x
1 −
f ( x , β)= e β e θ={β}
β
n Xi
1 −β
L(x ,β)=∏ e
i=1
β
n
X1 X2 Xn 1
1 − − − 1 − 1 (X + X +⋯+ X ) 1 −β ∑ X i
β β β
n n
1 1 n n
1 −β ∑ X 1 − ∑X
1 1
)=−ln(β )− ∑ X i=−n ln(β)− ∑ X i
β i
n i
β β β i=1
β i=1
42Demonstração: P(X > s+t | X > s) = P(X > s+t, X > s)/P(X > s) = P(X > s+t)/P(X > s) = e -λ(s+t)/e-λs = e-λt = P( X > t ) c.q.d.
Modelagem e Simulação Discreta 132
n
1 1
β∑
∂[−n ln(β)− Xi] n ∂ n
∂ln L(x ,β) ∂ ln (β) β 1 n
= i=1
=−n −∑ X i = 2 ∑ X i− =0
∂β ∂β ∂β i =1
∂β β i=1 β
n n
1 n 1
2∑
X i = ⇔β= ∑ X i
β i=1 β n i=1
O método de estimação por mínimos quadrados (MMQ) permite estimar os valores dos
parâmetros de uma função a partir de dados observados que minimiza o quadrado do
somatório dos erros entre valores observados e estimados.
Uma amostra aleatória (fo1, fo2, ..., fon) com função densidade de probabilidade fe(x,θ), em
que θ é um vetor de m parâmetros pk, k ∈ [1,m], tem uma função de densidade de
probabilidade dada por foi=fe(xi,θ)+εi, i ∈ [1,n].
O erro (ε) entre valores observado e estimado é dado pela Equação 12.5 e a somatória do
quadrado dos erros (E) é expresso pela Equação 12.6.
e i=fo(x i )−f ( x i , θ) 12.5
n n
E=∑ e2i =∑ [ fo(x i )−f (x i , θ)]2 12.6
i=1 i=1
x
1 −
A fdp Exponencial pode ser definida como f (x)= e a ou como f (x)=be−bx , com parâmetros
a
1
a=E[ x ] e b= , respectivamente, Tabela 12.3.
E [x ]
1 n
f (x)=be
−bx b= =
E [x ] ∑x i
x i−a
1. calcular V ={ v1, v2, ..., vn } sendo v i= em que a = min{X} e b = max{X}
b−a
n
1
2. calcular m 1= ∑v
n i=1 i
n
1
3. calcular m 2= ∑
n i=1
2
vi
m 1 (m 1−m2)
4. calcular p= 2
m2 −m1
(1−m1 )(m1−m2)
5. calcular q=
m2−m21
6. Desta forma, a distribuição Beta é adimensionalizada para o intervalo [0,1], resultando na nova função
Γ( p+ q) p −1 q−1 v p−1 (1−v )q−1
f (v )= v (1−v ) = de parâmetros p e q.
Γ( p)Γ(q) B ( p , q)
a=
1+ 1+
√
4A
4A
3
, b=
xm
a
1
n
1
n
, A=ln (x m )− ∑ ln( x i) e x m= ∑ x i .
n i=1 n i=1
Exemplo 12.5 Calcular os parâmetros da fdp Gamma para a amostra X: { 6,91 1,61 4,99 9,11 9,03 9,71 0,05
5,98 5,20 9,83 }
i 1 2 3 4 5 6 7 8 9 10 ∑ xm
xi 0,05 1,61 4,99 5,2 5,98 6,91 9,03 9,11 9,71 9,83 62,42 6,242
ln(xi) -2,996 0,476 1,607 1,649 1,788 1,933 2,201 2,209 2,273 2,285 13,425
n = 10
xm = (6,91 + 1,61 + 4,99 + 9,11 + 9,03 + 9,71 + 0,05 + 5,98 + 5,20 + 9,83)/10 = 6,24
∑ln(x) = ln(6,91) + ln(1,61) + ln(4,99) + ln(9,11) + ln(9,03) + ln(9,71) + ln(0,05) + ln(5,98) + ln(5,20) +
ln(9,83) = 13,43
A = ln(6,24) - 13,43/10 = 0,489
a = [1+(1+4x0,489/3)1/2]/(4x0,489) = [1+(1+0,651)1/2]/1,956 = (1+1,28)/1,956 = 1,17
b = 6,24/1,17 = 5,34
Logo os parâmetros da fdb Gamma são a =1,17 e b = 5,34.
s −1,086 m
b=( ) e a= em que m e s são a média aritmética e o desvio padrão de X,
m 1
Γ(1+ )
b
respectivamente.
Exemplo 12.6 Calcular os parâmetros da fdp Weibull para a amostra X: { 6,91 1,61 4,99 9,11 9,03 9,71 0,05
5,98 5,20 9,83 }
i 1 2 3 4 5 6 7 8 9 10 ∑ m s
xi 0,05 1,61 4,99 5,2 5,98 6,91 9,03 9,11 9,71 9,83 62,42 6,242 3,397
b = (s/m)-1,086 = (3,397/6,242)-1,086 = (0,544)-1,086 = 1,936
a = m/Γ(1+1/b) = 6,242/Γ(1+1/1,936) = 6,242/Γ(1,516) = 6,242/0,887 = 7,038
Logo os parâmetros da fdb Weibull são a = 7,038 e b = 1,936.
Vantagens:
• é uma forma automática de identificar diferenças grosseiras entre distribuições teórica e observada,
diferenças não provocadas pela flutuação dos dados
• não depende do julgamento do avaliador
Desvantagens:
• quando se tem poucos dados, o teste é pouco sensível (deixa de perceber diferenças, aceitando
distribuições com ajuste ruim)
• quando se tem muitos dados, as chances de se rejeitar todas as distribuições teóricas aumentam
• o teste de hipótese permite fixar a confiança 1-α em rejeitar uma distribuição, mas nada afirma quanto a
confiança em aceitá-la
O teste CQ é usado para testar se uma distribuição de frequência observada se ajusta a uma
distribuição específica, como a normal, exponencial ou outra qualquer. Ou seja, este teste
permite determinar se dados observados atendem a uma determinada distribuição de
probabilidade de p parâmetros. Sua aplicação consiste em:
O teste CQ:
43 Veja no apêndice notas sobre teste de hipóteses.
Modelagem e Simulação Discreta 136
• funciona melhor se os intervalos do histograma são escolhidos de tal forma que os valores de E i sejam
iguais
• uma solução aproximada é agrupar um intervalo com Ei pequeno com algum intervalo vizinho
• no caso da distribuição uniforme, basta utilizar um histograma com intervalos de mesmo tamanho
Na Figura 12.5, o valor de xcrítico divide a área sob a curva em duas regiões, a região
hachurada em vermelho indica a probabilidade de se rejeitar a hipótese H0 ao nível de
significância p-value, isto é, D ≥ p-value. Em cinza, é a região de probabilidade em que não
se pode rejeitar a hipótese H0 ao nível de significância p-value, ou seja, D < p-value.
A frequência da classe i (fi), pode ser calculada pelo produto do número de observações (n =
∑ni) pela probabilidade de ocorrência de cada classe (fi = n × pi), i ∈ [1,k]. Para calcular o
valor de pi basta integrar a fdp desejada considerando os limites da classe.
xc
Exemplo 12.7 Deseja-se verificar se o número de falhas (NF) de um sistema muda conforme o dia da semana. O
número de falhas (NF) observadas para cada dia de uma semana escolhida aleatoriamente foram:
quinta-feira 15
sexta-feira 10
sábado 10
domingo 20
Regra de decisão: se, para α fixado obtemos D > χ2(1-α;gl), rejeita-se a hipótese H0, caso contrário aceita-se a
hipótese H0.
Os testes de CQ para aderência de amostras à função Beta devem ser feitos com os dados
adimensionalizados para o intervalo [0,1].
• deve existir apenas dois resultados mutuamente exclusivos {ocorre, não ocorre}
• os eventos devem ser independentes
• o número médio de ocorrências por unidade de intervalo deve permanecer constante
Na prática, as taxas de chegada podem variar de acordo com a hora do dia ou do ano, mas
um modelo de Poisson deve ser usado para períodos que são razoavelmente homogêneos.
Nesta distribuição a média e a variância são iguais e podem ser estimados pela observação
das características da amostra.
Quando a taxa λ não varia com o tempo, a probabilidade de que haja a ocorrência de k
( λ T )k e−λ T
eventos no intervalo (0,T] é dada por f (k , λ)= . Uma generalização importante
k!
desse tipo de processo é quando se considera que λ varia no tempo, λ(t). Nesse caso, tem-se
um Processo Poisson não-estacionário e o número de chegadas m(T) é estimado pela
T
integração de λ(t) para t variando de 0 a T, m(T )=∫ λ(t) dt .
0
Um Processo de Poisson com parâmetro λ é aquele cujo intervalos entre chegadas tem
distribuição exponencial do mesmo parâmetro λ. Seja ti o instante no qual a i-ésimo pacote
chega, o instante que a próxima pacote chega, t i+1, é dada por ti+1 = ti+Xi sendo Xi ~ Exp(λ).
Esta abordagem é utilizada nos softwares deste livro.
Uma outra abordagem para gerar N chegadas de Poisson durante um dado intervalo de
tempo de duração T, é usar o fato que estas N chegadas são uniformemente distribuídas ao
longo deste intervalo. Para gerar chegadas de Poisson no intervalo [0,T] faz-se:
1. gerar N números aleatórios (chegadas) de acordo com a distribuição de Poisson com parâmetro λT
2. gerar N números aleatórios distribuídos uniformemente correspondentes aos instantes t 1, ..., tN, no
intervalo [0,T]
3. ordenar os N instantes em ordem cronológica: t1 < ... < tN
O método de Kruskal-Wallis é um teste não paramétrico que pode ser usado para determinar
se três ou mais amostras independentes foram selecionadas de populações que possuem a
mesma distribuição.
Segundo Spiegel et al. (2013), as duas condições para se usar o teste de Kruskal-Wallis são
que cada amostra deve ser selecionada aleatoriamente e que o tamanho de cada amostra
deve ser no mínimo 5. Se essas condições são alcançadas, a distribuição de amostragem
para o teste Kruskal-Wallis é aproximada por uma distribuição χ 2 com graus de liberdade k-1,
onde k é o número de amostras. Seja x ij a j-ésima observação da amostra i, a estatística de
teste do teste de Kruskal-Wallis é calculada pela equação:
k 2
12 Ri
T= ∑
n(n+1) i=1 n i
−3(n+1) 12.8
k ni
A B C
6,5 3,4 2,6
7,3 4,1 6,2
8,5 5,1 5,1
9,9 5,6 5,8
1,8 6,0 8,8
9,5 8,3 9,2
6,9 9,4 7,3
9,8 6,4
5,5
9 5,8 12,4
10 6 12,9
11 6,2 13,5
12 6,4 14,1
13 6,5 14,3
14 6,9 15,5
15 7,3 16,6
16 7,3 16,6
17 8,3 19,5
18 8,5 20
19 8,8 20,9
20 9,2 22
21 9,4 22,6
22 9,5 22,9
23 9,8 23,7
24 9,9 24
A B C ∑
n 9 8 7 24
R 149,5 102,1 100
R2/n 2483,36 1303,05 1428,57 5214,98
T = 12*5214,98/[24(24+1)]-3(24+1) = 29,3
χ2(1-α;k-1) = χ2(95%,2) = 5,99
Como T > χ2(95%,2), ou seja, 29,3 > 5,99, rejeita-se a hipótese de que as amostras possuem a mesma
distribuição de probabilidade com 95% de confiança.
Conclusão: as amostras possuem a mesma distribuição de probabilidade com 95% de confiança segundo o
teste de Kruskal-Wallis.
12.9 Questões
12.10 Exercícios
33. 1. Avaliar a normalidade dos dados referente aos ciclos de leitura de 15 unidades de memória pelos
testes CQ: X = {37 54,2 55,1 28,1 24 67,9 29,7 22,9 61,8 42,9 83,5 19,5 31,6 14 79,6}
34. 2. Seja avaliar a normalidade dos dados referente a medição de 10 execuções de um benchmark
utilizando o teste CQ: X = {1,9064 2,1029 1,5223 2,6183 1,4274 2,2249 1,6974 3,1544 1,9849 1,9957}
35. 3. Obtenha os parâmetros das fdp estudadas pelos métodos da máxima verossimilhança e mínimos
quadrados.
36. 4. Supondo a média de chegada de e-mail diários seja 100, qual a probabilidade de recebermos pelo
menos 50 e-mail num dia qualquer?
37. 5. Se pacotes numa rede chegam com taxa λ = 4 pps, qual a probabilidade de chegar 8 pacotes no
próximo segundo?
38. 6. A experiência indica que, em média, 20 clientes por hora param numa agência para acessar terminais
de computador.
39. 7. Encontre a melhor fdp que se ajusta aos dados dos exercícios 1 e 2.
40. 8. Verifique se as amostras A, B e C são homogêneas, ou seja, possuem a mesma distribuição de
probabilidade.
A B C
70,2 76,5 66,7
92,8 101,2 88,2
18,6 20,3 17,7
96,1 104,8 91,3
53,4 58,2 50,8
2,0 2,1 1,9
15,9 17,4 15,1
35,1 38,3 33,4
96,4 105,1 91,6
40,9 44,6
97,7 106,5
49,8 54,3
62,3
41,4
4,2
41. 9. Foram medidos valores de λ e μ de um sistema que utiliza um Xbee Pro, abaixo relacionados.
λ(pps): 22 22 31 13 12 29 32 19 17 20 13 23 13 20 27 18 22 1 20 14 19 6 22 17 27 24
μ(pps): 33 44 13 19 28 24 35 36 34 27 14 30 23 17 23 5 20 39 37 35 23 34 22 28 42 27
42. 10. Faça os testes de CQ para os dados de λ e μ da série de dados abaixo considerando as fdp Beta,
Weibull, Gamma, Poisson e Exponencial.
λ(pps): 24 28 20 24 28 15 24 24 23 16 28 28 32 23 22 21 19 27 28 23 36 24
μ(pps): 19 14 18 9 29 9 25 17 30 19 12 15 9 22 22 31 19 12 12 16 30 2
43. 11. Faça os testes de CQ para os dados das séries de dados abaixo considerando as fdp Beta, Weibull,
Gamma e Normal.
a) λ(pps): 43 11 16 2 5 28 3 2 20 19 8 30 33 22 7 6 10 20 30 14 7 14 33 18 13 14 17 38 28
μ(pps): 7 12 16 19 5 15 18 10 25 14 19 16 7 7 12 13 17 4 15 16 19 20 2 21 19 16
b) λ(pps): 30 33 27 6 37 15 1 27 15 17 19 19 5 15 18 10 25 16 19 20 2 21 19
μ(pps): 9 22 22 31 19 12 12 16 30 14 33 18 13 14 17 8 30 33 22 7 6
Modelagem e Simulação Discreta 143
Exemplo 13.1 Elabore um programa C++ para gerar VA com distribuição uniforme usando GNA Mersenne
Twister 32 b.
Algoritmo 13.3 Programa para gerar variáveis aleatórias com distribuição uniforme em C+
+11
#include <random>
#include <iostream>
using namespace std;
int main( void ){
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dis(1, 6);
for( int n = 0; n < 10; ++n )
cout << dis(gen) << ' ';
cout << '\n';
return 0;
}
fonte: <http://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution>
Exemplo 13.2 Elabore uma função C++ para gerar VA com distribuição exponencial, com parâmetro p = 0.5,
usando GNA GCL minstd_rand
Algoritmo 13.4 Função C++11 para gerar VA com distribuição exponencial, usando GNA GCL minstd_rand
#include <random>
#include <iostream>
using namespace std;
double X( double p ){
static random_device rd;
static minstd_rand gna(rd());
exponential_distribution<> gva(p);
return gva(gna);
}
int main( void ){
double p = 0.5;
for( int n = 0; n < 10; ++n )
cout << X(p) << endl;
cout << endl;
return 0;
}
Modelagem e Simulação Discreta 145
14 REDUÇÃO DA VARIÂNCIA
Seria oneroso diminuir um intervalo de confiança apenas aumentando n pois isto implica em
mais amostras além de, com isto, sujeitar-se a outros erros experimentais no processo.
As técnicas de redução de variância são métodos estatísticos sofisticados que são muito
delicados de manusear e aplicar. Mal aplicado, este tipo de técnica pode até mesmo produzir
o efeito oposto (Chen, 2015).
Ao final destas N simulações, a média (D A) e a variância (s2A) da amostra A, são dadas pelas
fórmulas clássicas:
n
1
D A= ∑D
n i=1 i , A
14.1
n
1
s 2A = ∑
n−1 i=1
(Di , A −D A )2 14.2
Estas duas sequências, {u} e {v} estão negativamente correlacionados. Tem-se duas
variáveis aleatória, m1 e m2, definindo m = (m1+m2)/2. É claro que m = E[X] e a variância de
m é dada por:
Modelagem e Simulação Discreta 147
Os sistemas SF1 e SF2 foram simulados 1000 vezes e calculadas a Utilização e as Variâncias de tsf e nf.
Os resultados são apresentados nos gráficos abaixo: U x r, V(tsf) x r e V(nf) x r.
Pode-se observar nestes gráficos uma grande flutuação nos resultados, entretanto o uso de variáveis antitéticas
não resultou em redução da variância.
Figura 14.2 Variação da utilização do sistema SF1 U1 e do sistema SF2 U2 em função das
repetições r.
Figura 14.3 Variação do tempo total no sistema do sistema SF1 V1(tsf) e do sistema SF2
V2(tsf) em função das repetições r.
Modelagem e Simulação Discreta 148
Figura 14.4 Variação do tamanho da fila do sistema SF1 V1(nf) e do sistema SF2 V2(nf) em
função das repetições r.
Conclusão: o uso de variáveis antitéticas não apresentou redução da variância neste estudo de caso.
//-------------------------------------------------------------------------------
#include <cmath>
#include <ctime>
#include <string>
#include <vector>
#include <algorithm>
#include <fstream>
#include <sstream>
//-------------------------------------------------------------------------------
using namespace std;
//-------------------------------------------------------------------------------
class clPacote{
public:
int nf;
double ic, ts, cpf, eps, sps;
};
class clSF{
private:
double l, m, E[6], V[6];
vector<clPacote> Pacote;
public:
void Iniciar ( double, double );
void Empacotar ( double, double );
void Estatistica( void );
string Valor ( void );
};
double gna( void ){
return (rand()+1.0)/(RAND_MAX+2.0); // u in (0,1)
}
double clSF::X( double u, double p ){
return -log(u)/p;
}
void clSF::Iniciar( double l, double m ){
this->l = l;
this->m = m;
Pacote.clear();
Pacote.push_back({0,0,0,0,0,0}); // p = 0, primeiro pacote
}
void clSF::Empacotar( double u1, double u2 ){
clPacote P, Pa = Pacote[Pacote.size()-1];
P.ic = X(u1,l);
P.ts = X(u2,m);
P.cpf = P.ic + Pa.cpf;
P.eps = P.cpf > Pa.sps ? P.cpf : Pa.sps;
P.sps = P.eps + P .ts;
Pacote.push_back(P);
}
void clSF::Nf( void ){
for( size_t p = 1; p < Pacote.size(); p++ ){
int c = p-1;
Pacote[p].nf = 0;
while( Pacote[p].cpf < Pacote[c].sps ){
Pacote[p].nf += 1;
c--;
}
Modelagem e Simulação Discreta 149
}
}
void clSF::Estatistica( void ){
int N = Pacote.size();
double Sx[6]={0,0,0,0,0,0}, Sxx[6]={0,0,0,0,0,0};
Nf();
for( int p = 0; p < N; p++ ){
double x;
clPacote P = Pacote[p];
x = P.ic; Sx[0] += x; Sxx[0] += x*x;
x = P.ts; Sx[1] += x; Sxx[1] += x*x;
x = P.eps-P.cpf; Sx[2] += x; Sxx[2] += x*x; // tf
x = P.sps-P.eps; Sx[3] += x; Sxx[3] += x*x; // tps
x = P.sps-P.cpf; Sx[4] += x; Sxx[4] += x*x; // tsf
x = P.nf; Sx[5] += x; Sxx[5] += x*x;
}
for( int e = 0; e < 6; e++ ){
E [e] = Sx[e]/N;
V [e] = Sxx[e]/N-E[e]*E[e];
}
}
string clSF::Valor( void ){
int N = Pacote.size();
double T = Pacote[N-1].sps, U = E[3]*N/T; // tps => 3
stringstream str;
str << V[4] << ";" << V[5] << ";" << U; // V(tsf), V(nf), U
return str.str();
}
void Salvar( string fn, string str ){
ofstream fs;
fs.open(fn);
replace(str.begin(), str.end(),'.',',');
fs << str;
fs.close();
}
int main( void ){
int N = 5000;
double l = 300.0,
m = 400.0;
clSF SF1, SF2;
stringstream csv;
csv << "r;V1(tsf);V1(nf);U1;V2(tsf);V2(nf);U2" << endl;
srand(time(nullptr));
for( int r = 0; r < 1000; r++ ){
SF1.Iniciar(l,m);
SF2.Iniciar(l,m);
for( int i = 1; i < N; i++ ){
double u1 = gna(),
u2 = gna();
SF1.Empacotar(u1,u2);
SF2.Empacotar(1.0-u1,1.0-u2);
}
SF1.Estatistica();
SF2.Estatistica();
csv << r << ";" << SF1.Valor() << ";" << SF2.Valor() << endl;
}
Salvar("gna.nac-V-1000.out.csv", csv.str() );
return 0;
}
A maioria dos projetos de análise de desempenho exigem comparar dois ou mais sistemas e
encontrar o melhor entre eles. A presente discussão, no entanto, será limitada a uma
comparação de apenas dois sistemas de cargas de trabalho muito semelhantes. Se houver
mais do que dois sistemas ou se os volumes de trabalho são significativamente diferentes, a
análise técnicas destes projetos experimental está além do escopo deste texto. O
procedimento para número de observações pareadas e não pareadas são diferentes. Estes
termos e os procedimentos correspondentes estão descritos a seguir iniciando com o teste
para média zero.
Modelagem e Simulação Discreta 150
Figura 14.5 Teste para uma média zero, nos casos (a) e (b) os IC incluem zero e nos casos (c)
e (d) os IC não incluem zero.
Exemplo 14.2 A diferença entre os tempos de processamento de duas diferentes implementações do mesmo
algoritmo foi medida em sete cargas de trabalho semelhantes. As diferenças entre elas são: {1,5 2,6 -1,8 1,3 -
0,5 1,7 2,4}. Podemos dizer com confiança de 99% que uma aplicação é melhor do que a outra?
Tamanho da amostra: n = 7
Média: 7,20/7 = 1,03
Variância da amostra: 2,57
Desvio padrão da amostra: 2.571/2= 1,60
Intervalo de confiança: 1,03∓t×1,60/71/2 = 1.03 ∓ 0.605 t
100(1-α) = 99, α = 0,01, t99;6 = 0,995
Do Anexo, o valor de t com seis graus de liberdade é t0,995;6 = 3,707 (bicaudal).
O intervalo de confiança com 99% = (-4,9;7,0).
O intervalo de confiança inclui o zero. Portanto, não podemos dizer com confiança de 99% que existem
diferenças entre as aplicações.
A análise de observações pareadas é simples. As duas amostras são tratadas como uma
única amostra de n pares. Para cada par, a diferença no desempenho é calculada. Um
intervalo de confiança pode ser construída para a diferença. Se o intervalo de confiança inclui
o zero, os sistemas não são significativamente diferentes.
Tabela 14.1 Procedimento para comparar duas amostras pareadas (mesmo tamanho)
√ √
x y
Vz Vz
x1 x1 Se 0∈(m z −t 1−α , n−1 , m z +t 1−α ,n−1 ) então não há diferença
n n
x2 y2
x3 y3 estatística entre as duas amostras, estatisticamente elas não são
... ...
diferentes. Caso contrário são diferentes.
xn-1 yn-1
n n
xn yn 1 1
Em que m z = ∑ z i e V z= ∑ 2
( zi −m z )
n i=1 n−1 i=1
Exemplo 14.3 Seis cargas de trabalho semelhantes foram utilizados em dois sistemas. As observações são
{5,36 16,57 0,62 1,41 0,64 7,26} e {19,12 3,52 3,38 2,50 3,60 1,74}. Um sistema é melhor do que o outro?
Tabela 14.2 Procedimento para comparar duas amostras não pareadas (tamanhos diferentes)
Calcular:
n m
1 1
1. m x = ∑ x i e m y = ∑ yi
n i=1 m i=1
n m
1 1
x y
2. V x= ∑
n−1 i=1
2
( xi −m x ) e V y = ∑
m−1 i=1
( y i −m y )
2
x1 y1
x2
x3
...
y2
y3
...
3. d m=mx −m y e s=
√ Vx Vy
+
n m
2
xn-1 ...
Vx Vy
( + )
n m
xn ... 4. k=
ym-1
Vx 2 Vy 2
( ) ( )
ym n m
+
n−1 m−1
Exemplo 14.4 O tempo de processamento requerido para executar um pacote foi medido em dois sistemas. O
tempo no sistema A foi {5,36 16,57 0,62 1,41 0,64 7,26 1,74}. Os tempos no sistema B foram {19,12 3,52 3,38
2,50 3,60}. Os dois sistemas são significativamente diferentes?
14.4 Questões
14.5 Exercícios
1. Foram realizadas 4 rodadas de simulação, cada uma com 10 pacotes. Os dados de E[nf], E[tps] e p0 estão
listados abaixo. Calcule:
E[nf]
i/j 1 2 3 4 5 6 7 8 9 10
1 4 3 2 2 3 3 3 4 3 2
2 7 5 4 5 5 4 4 7 4 4
3 12 18 7 2 8 8 6 9 10 6
4 20 3 13 5 4 12 9 7 8 9
E[tps]
i/j 1 2 3 4 5 6 7 8 9 10
1 1.83 1.83 1.83 1.71 1.83 1.98 1.86 1.83 1.71 1.74
2 2.13 2.04 2.01 2.16 2.13 1.86 2.07 2.07 1.98 2.07
3 2.40 2.52 2.4 2.34 2.34 2.31 2.46 2.25 2.46 2.40
4 2.64 2.94 2.58 2.88 2.70 2.55 2.85 2.55 2.79 2.58
p0
i/j 1 2 3 4 5 6 7 8 9 10
1 0.373 0.346 0.385 0.374 0.362 0.347 0.397 0.340 0.408 0.475
2 0.256 0.252 0.341 0.264 0.275 0.355 0.330 0.231 0.322 0.374
3 0.181 0.108 0.200 0.171 0.216 0.230 0.197 0.195 0.149 0.278
4 0.116 0.008 0.165 0.033 0.022 0.134 0.078 0.116 0.031 0.190
2. Foi realizada uma rodada de simulação com 300 pacotes de tempo total no sistema, abaixo relacionados.
Calcule o Intervalo de Confiança da média (μ) de s para α = 10%, α = 5% e α = 1%.
21 0,145 71 0,053 121 0,132 171 0,809 221 0,332 271 0,056
22 0,792 72 0,136 122 0,456 172 0,015 222 0,245 272 2,138
23 0,019 73 2,812 123 0,112 173 0,046 223 0,236 273 3,339
24 5,175 74 4,056 124 0,112 174 5,506 224 0,094 274 1,143
25 0,038 75 0,010 125 0,390 175 3,050 225 2,759 275 0,017
26 0,256 76 0,883 126 0,014 176 3,730 226 0,475 276 6,556
27 1,411 77 1,156 127 0,602 177 0,559 227 6,327 277 0,026
28 0,023 78 0,074 128 2,128 178 0,010 228 0,010 278 0,336
29 0,155 79 4,526 129 1,431 179 2,912 229 3,210 279 1,251
30 0,195 80 0,026 130 1,960 180 0,143 230 0,081 280 1,006
31 4,262 81 0,088 131 0,764 181 0,359 231 0,061 281 3,183
32 1,030 82 0,010 132 5,004 182 6,021 232 0,052 282 0,091
33 3,494 83 0,053 133 0,093 183 0,236 233 0,582 283 0,036
34 3,851 84 0,014 134 0,430 184 0,009 234 0,016 284 0,917
35 0,285 85 4,128 135 1,163 185 0,128 235 0,013 285 0,013
36 5,334 86 0,190 136 2,220 186 0,055 236 0,537 286 0,026
37 0,110 87 0,092 137 1,041 187 1,142 237 0,018 287 0,410
38 0,023 88 0,081 138 0,011 188 0,023 238 5,487 288 0,009
39 0,747 89 0,352 139 2,125 189 2,876 239 0,018 289 0,126
40 2,567 90 0,901 140 0,014 190 0,055 240 2,864 290 0,022
41 0,100 91 3,335 141 4,777 191 2,458 241 3,516 291 0,009
42 2,170 92 3,692 142 6,056 192 0,429 242 4,778 292 0,016
43 0,186 93 0,129 143 0,081 193 0,016 243 5,460 293 0,057
44 2,922 94 0,033 144 0,418 194 5,417 244 1,292 294 0,022
45 1,588 95 0,016 145 0,146 195 0,126 245 0,507 295 0,422
46 0,049 96 0,010 146 0,526 196 0,223 246 4,404 296 2,829
47 0,492 97 1,631 147 0,365 197 0,468 247 0,035 297 0,364
48 1,356 98 0,304 148 0,021 198 0,230 248 0,115 298 0,020
49 0,353 99 0,775 149 0,052 199 0,022 249 0,029 299 0,028
50 0,400 100 0,045 150 0,252 200 0,125 250 0,804 300 0,242
3. Utilize o software SF.MM1-ML-RI.cpp descrito no Anexo para realizar B rodadas de simulação, cada uma
com M eventos e calcule os Intervalos de Confiança da média (μ) e da variância (σ2) de nf, tf, tps e tsf
para α = 10%, α = 5% e α = 1% nos casos:
a) B = 10 e M = 2000
b) B = 10 e M = 4000
c) B = 10 e M = 6000
a) B = 10 e M = 2000
b) B = 10 e M = 4000
c) B = 10 e M = 6000
a) N = 1000
b) N = 10000
c) N = 100000
Nome44 Descrição
B Tamanho de bloco dos métodos ML e RI
clPacote Classe com as variáveis de estado de pacotes da simulação
clRSF Classe com as variáveis de estado de Rede de Sistemas de Fila M/M/1
clSF Classe com as variáveis de estado de Sistemas de Fila M/M/1
cpf Tempo no qual o pacote chega na Fila [s]
eps Tempo no qual o pacote chega no Servidor [s]
DP Vetor de valores de desvio padrão
DP(x) Desvio padrão de x
E Vetor de valores de esperança matemática (média aritmética)
E(x) Média aritmética de x
Empacotar Método para calcular o estado de cada pacote e incluí-lo em Pacote
Estatistica Método para calcular as médias e desvios padrão da simulação
ic Intervalo entre chegadas de pacotes na Fila [s -1]
Iniciar Método para configurar os Sistemas de Fila e gerar o pacote zero (0)
is Intervalo entre saídas de pacotes do Servidor [s -1]
L Número de lotes do MML
l, λ Taxa de chegada de pacotes na Fila [s]
Legenda Método para criar a legenda do software
m Vetor de taxa de serviço de Servidores de RSF [s]
m, μ Taxa de serviço do Servidor [s]
ML Método que implementa o método da Média de Lotes (MML)
N Número inicial de simulações dos Sistemas de Fila
nf Tamanho da Fila
Nf Método para calcular o tamanho da Fila dos pacotes simulados
44 O termo pacote será adotado neste texto para indicar as unidades operacionais dos Sistemas de Fila; são sinônimos de pacote os ter-
mos tarefa, transação, trabalho, instrução, flops e operação, dentre outras denominações encontradas na literatura da área.
Modelagem e Simulação Discreta 156
15.2 SF.MM1.cpp
double X ( double );
void Empacotar ( void );
void Nf ( void );
void Estatistica( void );
Modelagem e Simulação Discreta 157
public:
clSF ( void );
void Iniciar ( double, double );
void Simular ( int );
string Resumo ( void );
};
clSF::clSF( void ){
srand(time(nullptr));
}
double clSF::X( double p ){
double u = (rand()+1.0)/(RAND_MAX+2.0); // u in (0,1)
return -log(u)/p;
}
void clSF::Iniciar( double l, double m ){
this->l = l;
this->m = m;
Pacote.clear();
Pacote.push_back({0,0,0,0,0});
}
void clSF::Empacotar( void ){
int p;
clPacote P, Pa;
p = Pacote.size()-1;
Pa = Pacote[p];
P.ic = X(l);
P.cpf = P.ic + Pa.cpf;
P.eps = P.cpf > Pa.sps ? P.cpf : Pa.sps;
P.sps = P.eps + X(m);
P.nf = 0;
Pacote.push_back(P);
}
void clSF::Simular( int N ){
for( int p = 1; p < N; p++ ){
Empacotar();
}
Nf();
Estatistica();
}
void clSF::Nf( void ){
for( size_t p = 1; p < Pacote.size(); p++ ){
size_t c = p-1;
Pacote[p].nf = 0;
while( Pacote[p].cpf < Pacote[c].sps ){
Pacote[p].nf = Pacote[p].nf + 1;
c--;
}
}
}
void clSF::Estatistica( void ){
int N = Pacote.size();
double Sx[3]={0,0,0}, Sxx[3]={0,0,0};
for( int p = 0; p < N; p++ ){
double x;
clPacote P = Pacote[p];
x = P.eps-P.cpf; Sx[0] += x; Sxx[0] += x*x;
x = P.sps-P.eps; Sx[1] += x; Sxx[1] += x*x;
x = P.nf; Sx[2] += x; Sxx[2] += x*x;
}
for( int e = 0; e < 3; e++ ){
E [e] = Sx[e]/N;
DP[e] = sqrt( Sxx[e]/N-E[e]*E[e] );
}
}
string clSF::Tabela( void ){
stringstream htm;
htm << fixed;
htm.precision(5);
htm << "Simulacao de Sistemas de Fila M/M/1 Metodo 1<hr>"
<< "Eventos do SF<hr>"
<< "<table border='1'>"
<< "<tr><th>p<th>ic<th>cpf<th>eps<th>sps<th>nf";
for( size_t p = 0; p < Pacote.size(); p++ ){
clPacote P = Pacote[p];
htm << "<tr>"
<< "<td>" << p+1
<< "<td>" << P.ic
<< "<td>" << P.cpf
<< "<td>" << P.eps
Modelagem e Simulação Discreta 158
int N = 5000;
double l = 283.3,
m = 305.7;
clSF SF;
SF.Iniciar(l,m);
SF.Simular(N);
Salvar("M1.SF.MM1.out.html", SF.Resumo() );
return 0;
}
15.3 SF.MM1-ML-RI.cpp
Algoritmo 15.2 Software SF.MM1 para simulação de Sistema de Fila M/M/1 com os Métodos
Média de Lotes e Replicações Independentes
//-------------------------------------------------------------------------------
#include <cmath>
#include <ctime>
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
#include <fstream>
#include <sstream>
//-------------------------------------------------------------------------------
using namespace std;
//-------------------------------------------------------------------------------
class clPacote{
public:
int nf;
double ic, cpf, cps, sps;
};
class clSF{
private:
double l, m, E[3];
vector<clPacote> Pacote;
double X ( double );
void Iniciar ( double, double );
void Empacotar ( void );
void Simular ( int );
void Nf ( void );
void Estatistica( int, int );
string Legenda ( void );
void Salvar ( string, string );
public:
clSF( void );
void ML ( double, double, int, int );
void RI ( double, double, int, int, int );
};
clSF::clSF( void ){
srand(time(nullptr));
}
double clSF::X( double p ){
double u = (rand()+1.0)/(RAND_MAX+2.0); // u in (0,1)
return -log(u)/p;
}
void clSF::Iniciar( double l, double m ){
this->l = l;
this->m = m;
Pacote.clear();
Pacote.push_back({0,0,0,0,0});
}
void clSF::Empacotar( void ){
int p;
clPacote P, Pa;
p = Pacote.size()-1;
Pa = Pacote[p];
P.ic = X(l);
P.cpf = P.ic + Pa.cpf;
P.cps = P.cpf > Pa.sps ? P.cpf : Pa.sps;
P.sps = P.cps + X(m);
P.nf = 0;
Modelagem e Simulação Discreta 160
Pacote.push_back(P);
}
void clSF::Simular( int N ){
for( int p = 1; p < N; p++ ){
Empacotar();
}
Nf();
}
void clSF::Nf( void ){
for( size_t p = 1; p < Pacote.size(); p++ ){
size_t c = p-1;
Pacote[p].nf = 0;
while( Pacote[p].cpf < Pacote[c].sps ){
Pacote[p].nf = Pacote[p].nf + 1;
c--;
}
}
}
void clSF::Estatistica( int Pi, int Pf ){
double Sx[3] = {0,0,0};
for( int p = Pi; p < Pf; p++ ){
clPacote P = Pacote[p];
Sx[0] += P.cps-P.cpf;
Sx[1] += P.sps-P.cps;
Sx[2] += P.nf;
}
for( int e = 0; e < 3; e++ )
E[e] = Sx[e]/(Pf-Pi);
}
string clSF::Legenda( void ){
stringstream htm;
htm << "Legenda Metodo 1<hr>"
<< "<table border='1' cellpadding='3'>"
<< "<tr><th>Variável<th>Descrição <th>Unidade"
<< "<tr><td>B <td>tamanho do bloco do ML <td>[p] "
<< "<tr><td>cpf <td>chegada de pacote na Fila <td>[s] "
<< "<tr><td>DP(x)<td>desvio padrão de x <td> "
<< "<tr><td>eps <td>entrada de pacote no Servidor <td>[s] "
<< "<tr><td>E(x) <td>média aritmética de x <td> "
<< "<tr><td>ic <td>intervalo entre chegadas de pacotes na Fila <td>[s/p]"
<< "<tr><td>is <td>intervalo entre saídas de pacotes do Servidor <td>[s/p]"
<< "<tr><td>L <td>número de blocos do ML <td>[p] "
<< "<tr><td>l <td>taxa de chegada de pacotes na Fila <td>[p/s]"
<< "<tr><td>ML <td>método da Média de Lotes <td> "
<< "<tr><td>m <td>taxa de serviço do Servidor <td>[p/s]"
<< "<tr><td>m <td>vetor taxa de serviço <td>[p/s]"
<< "<tr><td>nf <td>número de pacotes da Fila <td>[p] "
<< "<tr><td>N <td>número de pacotes simulados <td>[p] "
<< "<tr><td>p0 <td>probabilidade de Servidor ocioso <td>[] "
<< "<tr><td>p <td>ordem dos pacotes <td>[p] "
<< "<tr><td>P <td>tamanho do bloco do RI <td>[%] "
<< "<tr><td>RI <td>método das Repetições Independente <td> "
<< "<tr><td>RSF <td>Rede de Sistema de Fila <td> "
<< "<tr><td>R <td>número de repetições do RI <td>[p] "
<< "<tr><td>r <td>rota de pacotes <td>[] "
<< "<tr><td>SF <td>Sistema de Fila <td> "
<< "<tr><td>sps <td>saída de pacote do Servidor <td>[s] "
<< "<tr><td>tf <td>tempo de espera de pacotes na Fila <td>[s] "
<< "<tr><td>tsf <td>tempo de processamento de pacotes no Sistema de Fila <td>[s] "
<< "<tr><td>ts <td>tempo de processamento de pacotes no Servidor <td>[s] "
<< "<tr><td>T <td>duração da Simulação <td>[s] "
<< "<tr><td>U <td>utilização do Servidor <td>[] "
<< "</table><br><br><br>";
return htm.str();
}
void clSF::Salvar( string fn, string str ){
ofstream fs;
fs.open(fn);
replace(str.begin(), str.end(),'.',',');
fs << str;
fs.close();
}
void clSF::ML( double l, double m, int B, int K ){
int N = B*K;
stringstream htm;
htm << fixed;
htm.precision(2);
htm << "<html>"
<< "<style>body {font-family: Helvetica, Arial; font-size: 22px; background-color: #d6e7f8}"
<< " table{font-family: Helvetica, Arial; font-size: 22px; background-color:
#a1b2c3}</style>"
Modelagem e Simulação Discreta 161
<< "<body><br><br><br>"
<< "<br> Simulacao de Sistema de Fila M/M/1 Modelo 1"
<< "<br> Media de Lotes<hr>"
<< "<br> l = " << l
<< "<br> m = " << m
<< "<br> N = " << N
<< "<br> B = " << B
<< "<br> K = " << K
<< "<br><br>"
<< "<table border='1' cellpadding='4'>"
<< "<tr><th>B<th>Pi<th>Pf<th>T<th>E[tsf]<th>E[nf]<th>U";
Iniciar(l,m);
Simular(N);
htm.precision(5);
for( int b = 0; b < B; b++ ){
int Pi = b*K, Pf = (b+1)*K;
Estatistica(Pi,Pf);
double T = Pacote[Pf-1].sps-Pacote[Pi].cps,
U = E[1]*(Pf-Pi)/T;
cout << "SF ML - Lote " << b+1 << " Pi = " << Pi << " Pf = " << Pf-1 << endl;
htm << "<tr>"
<< "<td>" << b+1
<< "<td>" << Pi
<< "<td>" << Pf-1
<< "<td>" << T
<< "<td>" << E[0]+E[1]
<< "<td>" << E[2]
<< "<td>" << U;
}
htm << "</table><br><br><br>";
htm << Legenda();
htm << "</body></html>";
Salvar("M1.SF.MM1.ML.out.html", htm.str() );
}
void clSF::RI( double l, double m, int N, int R, int P ){
int Pi = (1-P/100.0)*N, Pf = N;
stringstream htm;
htm << fixed;
htm.precision(2);
htm << "<html>"
<< "<style>body {font-family: Helvetica, Arial; font-size: 22px; background-color: #d6e7f8}"
<< " table{font-family: Helvetica, Arial; font-size: 22px; background-color:
#a1b2c3}</style>"
<< "<body><br><br><br>"
<< "<br> Simulacao de Sistema de Fila M/M/1 Metodo 1"
<< "<br> Repeticoes Independentes<hr>"
<< "<br> l = " << l
<< "<br> m = " << m
<< "<br> N = " << N
<< "<br> R = " << R
<< "<br> Pi = " << Pi
<< "<br> Pf = " << Pf
<< "<br><br>"
<< "<table border='1' cellpadding='4'>"
<< "<tr><th>R<th>Pi<th>Pf<th>T<th>E[tsf]<th>E[nf]<th>U";
htm.precision(3);
for( int r = 0; r < R; r++ ){
cout << "SF RI - Repeticao " << r+1 << " Pi = " << Pi << " Pf = " << Pf-1 << endl;
Iniciar(l,m);
Simular(N);
Estatistica(Pi,Pf);
double T = Pacote[Pf-1].sps-Pacote[Pi].cps,
U = E[1]*(Pf-Pi)/T;
htm << "<tr>"
<< "<td>" << r+1
<< "<td>" << Pi
<< "<td>" << Pf-1
<< "<td>" << T
<< "<td>" << E[0]+E[1]
<< "<td>" << E[2]
<< "<td>" << U;
}
htm << "</table><br><br><br>";
htm << Legenda();
htm << "</body></html>";
Salvar("M1.SF.MM1.RI.out.html", htm.str() );
}
int main( void ){
int N = 5000,
B = 10, // ML numero de lotes
K = 500, // ML tamanho do lote
Modelagem e Simulação Discreta 162
R = 10, // RI repeticoes
P = 10; // RI percentagem final
double l = 500.0,
m = 750.0;
clSF SF;
SF.ML(l,m,B,K);
SF.RI(l,m,N,R,P);
return 0;
}
15.4 RSF.MM1.cpp
Algoritmo 15.3 Software RSF.MM1 para simulação de Rede de Sistemas de Fila M/M/1
//------------------------------------------------------------------------------
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <string>
#include <vector>
#include <algorithm>
#include <fstream>
#include <sstream>
//-------------------------------------------------------------------------------
using namespace std;
//-------------------------------------------------------------------------------
class clPacote{
public:
int nf;
double ic, cpf, eps, sps, is;
};
class clSF{
public:
double l, m, E[3], DP[3];
vector<clPacote> Pacote;
};
class clRSF{
private:
vector<int> r;
vector<clSF> SF;
double X ( double );
void Empacotar ( int );
void Nf ( void );
void Estatistica( void );
string Tabela ( int );
string Legenda ( void );
public:
clRSF ( void );
void Iniciar ( double, vector<double>, vector<int> );
void Simular ( int );
string Resumo ( void );
void Salvar ( string, string );
};
clRSF::clRSF( void ){
srand(time(nullptr));
}
double clRSF::X( double p ){
double u = (rand()+1.0)/(RAND_MAX+2.0); // u in (0,1)
return -log(u)/p;
}
void clRSF::Iniciar( double l, vector<double> m, vector<int> r ){
this->r = r;
SF.clear();
for( size_t sf = 0; sf < m.size(); sf++ ){
clSF X;
X.l = l;
X.m = m[sf];
X.Pacote.clear();
SF.push_back(X);
}
for( size_t i = 0; i < r.size(); i++ )
Modelagem e Simulação Discreta 163
SF[r[i]].Pacote.push_back({0,0,0,0,0,0});
}
void clRSF::Empacotar( int i ){
size_t p, sf;
clPacote P, Pa;
if( i > 0 ){
sf = r[i-1];
p = SF[sf].Pacote.size()-1;
Pa = SF[sf].Pacote[p];
P.ic = Pa.is;
}
else P.ic = X( SF[0].l );
sf = r[i];
p = SF[sf].Pacote.size()-1;
Pa = SF[sf].Pacote[p];
P.cpf = P.ic + Pa.cpf;
P.eps = P.cpf > Pa.sps ? P.cpf : Pa.sps;
P.sps = P.eps + X( SF[r[i]].m );
P.is = P.sps - Pa.sps;
P.nf = 0;
SF[sf].Pacote.push_back(P);
}
void clRSF::Simular( int N ){
for( int p = 1; p < N; p++ ){
for( size_t i = 0; i < r.size(); i++ ){
Empacotar(i);
}
}
Nf();
Estatistica();
}
void clRSF::Nf( void ){
for( size_t sf = 0; sf < SF.size(); sf++ ){
for( size_t p = 1; p < SF[sf].Pacote.size(); p++ ){
size_t c = p-1;
SF[sf].Pacote[p].nf = 0;
while( SF[sf].Pacote[p].cpf < SF[sf].Pacote[c].sps ){
SF[sf].Pacote[p].nf = SF[sf].Pacote[p].nf + 1;
c--;
}
}
}
}
void clRSF::Estatistica( void ){
for( size_t sf = 0; sf < SF.size(); sf++ ){
size_t N = SF[sf].Pacote.size();
double Sx [3] = {0,0,0},
Sxx[3] = {0,0,0};
for( size_t p = 0; p < N; p++ ){
double x;
clPacote P = SF[sf].Pacote[p];
x = P.eps-P.cpf; Sx[0] += x; Sxx[0] += x*x;
x = P.sps-P.eps; Sx[1] += x; Sxx[1] += x*x;
x = P.nf; Sx[2] += x; Sxx[2] += x*x;
}
for( int e = 0; e < 3; e++ ){
double md = Sx[e]/N;
SF[sf].E [e] = md;
SF[sf].DP[e] = sqrt( Sxx[e]/N - md*md );
}
}
}
string clRSF::Tabela( int sf ){
stringstream htm;
htm << fixed;
htm.precision(5);
htm << "<br> Tabela de Eventos do SF: " << sf
<< "<br><table border='1' cellpadding='1'>"
<< "<tr><th>SF<th>p<th>ic<th>cpf<th>eps<th>sps<th>nf<th>is";
for( size_t p = 0; p < SF[sf].Pacote.size(); p++ ){
clPacote P = SF[sf].Pacote[p];
htm << "<tr>"
<< "<td>" << sf
<< "<td>" << p
<< "<td>" << P.ic
<< "<td>" << P.cpf
<< "<td>" << P.eps
<< "<td>" << P.sps
<< "<td>" << P.nf
<< "<td>" << P.is;
}
Modelagem e Simulação Discreta 164
htm << "<tr><td>0<td>" << SF[0].l << "<td>" << SF[0].m << "<td>" << SF[0].Pacote.size();
for( size_t sf = 1; sf < SF.size(); sf++ )
htm << "<tr><td>" << sf << "<td>-<td>" << SF[sf].m << "<td>" << SF[sf].Pacote.size();
clRSF RSF;
RSF.Iniciar(l,m,r);
RSF.Simular(N);
RSF.Salvar( "M1.RSF.MM1.out.html", RSF.Resumo() );
return 0;
}
15.5 RSF.MM1-ML-RI.cpp
Algoritmo 15.4 Software RSF.MM1 para simulação de Rede de Sistemas de Fila Software
SF.MM1 com os Métodos Média de Lotes e Replicações Independentes
//------------------------------------------------------------------------------
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <ctime>
#include <string>
#include <vector>
#include <algorithm>
#include <fstream>
#include <sstream>
//-------------------------------------------------------------------------------
using namespace std;
//-------------------------------------------------------------------------------
class clPacote{
public:
int nf;
double ic, cpf, cps, sps, is;
};
class clSF{
public:
double l, m, E[3];
vector<clPacote> Pacote;
};
class clRSF{
private:
vector<int> r;
double X ( double );
void Empacotar( int );
void Nf ( void );
public:
vector<clSF> SF;
clRSF();
void Iniciar ( double, vector<double>, vector<int> );
void Simular ( int );
void Estatistica( int, int, int );
string Legenda ( void );
};
Modelagem e Simulação Discreta 166
clRSF::clRSF(){
srand(time(nullptr));
}
double clRSF::X( double p ){
double u = (rand()+1.0)/(RAND_MAX+2.0); // u in (0,1)
return -log(u)/p;
}
void clRSF::Iniciar( double l, vector<double> m, vector<int> r ){
this->r = r;
SF.clear();
for( size_t sf = 0; sf < m.size(); sf++ ){
clSF X;
X.l = l;
X.m = m[sf];
X.Pacote.clear();
SF.push_back(X);
}
for( size_t i = 0; i < r.size(); i++ )
SF[r[i]].Pacote.push_back({0,0,0,0,0,0});
}
void clRSF::Empacotar( int i ){
size_t p, sf;
clPacote P, Pa;
if( i > 0 ){
sf = r[i-1];
p = SF[sf].Pacote.size()-1;
Pa = SF[sf].Pacote[p];
P.ic = Pa.is;
}
else P.ic = X(SF[0].l);
sf = r[i];
p = SF[sf].Pacote.size()-1;
Pa = SF[sf].Pacote[p];
P.cpf = P.ic + Pa.cpf;
P.cps = P.cpf > Pa.sps ? P.cpf : Pa.sps;
P.sps = P.cps + X(SF[sf].m);
P.is = P.sps - Pa.sps;
P.nf = 0;
SF[sf].Pacote.push_back(P);
}
void clRSF::Simular( int N ){
for( int p = 1; p < N; p++ )
for( size_t i = 0; i < r.size(); i++ )
Empacotar(i);
Nf();
}
void clRSF::Nf( void ){
for( size_t sf = 0; sf < SF.size(); sf++ ){
for( size_t p = 1; p < SF[sf].Pacote.size(); p++ ){
size_t c = p-1;
SF[sf].Pacote[p].nf = 0;
while( SF[sf].Pacote[p].cpf < SF[sf].Pacote[c].sps ){
SF[sf].Pacote[p].nf += 1;
c--;
}
}
}
}
void clRSF::Estatistica( int sf, int Pi, int Pf ){
double Sx[3] = {0,0,0};
for( int p = Pi; p < Pf; p++ ){
clPacote P = SF[sf].Pacote[p];
Sx[0] += P.sps-P.cps; // 0-ts
Sx[1] += P.sps-P.cpf; // 1-tsf
Sx[2] += P.nf; // 2-nf
}
for( int e = 0; e < 3; e++ ){
SF[sf].E[e] = Sx[e]/(Pf-Pi);
}
}
string clRSF::Legenda( void ){
stringstream htm;
htm << "Legenda<hr>"
<< "<table>"
<< "<tr><td> l <td>=<td> taxa de chegada de pacotes na Fila"
<< "<tr><td> m <td>=<td> taxa de servico do Servidor"
<< "<tr><td> N <td>=<td> numero de pacotes simulados"
<< "<tr><td> T <td>=<td> duracao da simulacao"
<< "<tr><td> p <td>=<td> ordem dos pacotes"
<< "<tr><td> ic <td>=<td> intervalo entre chegadas de pacotes na Fila"
<< "<tr><td> cpf <td>=<td> tempo de chegada de pacote na Fila"
Modelagem e Simulação Discreta 167
ML(l,m,r,N,L);
RI(l,m,r,N,R,P);
return 0;
}
Modelagem e Simulação Discreta 169
(incompleto)
Uma vez que a soma de todas probabilidades deve ser igual a 1, tem-se a seguinte
expressão para a probabilidade de zero pacote na Fila do sistema:
p0=1−ρ 16.1
Demonstração:
∞ ∞ ∞
1 1 1
∑ pi=1 ⇒ ∑ p 0 ρi=1⇒ p0 ∑ ρi=1 ⇒ p0 = ∞ = ∞ = ρ =1−ρ
i=0 i=0 i=0
∑ ρi 1+ ∑ ρi 1+
1−ρ
i=0 i=1
∞
x
Nota: ∑ x =
n
,|x|<1 , soma da progressão geométrica infinita (Polyanin & Manzhirov, 2007, pag. 357).
n=1 1−x
Substituindo p0 em pn, obtém-se:
pn=(1−ρ)ρn 16.2
Pode-se derivar a partir de pn, as propriedades das filas M/M/1 que foram apresentadas na
Erro: Origem da referência não encontrada. Por exemplo, a Utilização do Servidor é dada pela
probabilidade de se ter uma ou mais pacotes no sistema:
U=1−p 0=ρ 16.3
O número médio de pacotes no sistema é dado por:
∞ ∞
ρ
E[n]=∑ n pn=∑ n(1−ρ) ρn= 16.4
n=1 n=1 1−ρ
O tempo médio de resposta pode ser calculado usando a Lei de Little, que estabelece que
Modelagem e Simulação Discreta 170
Tabela 17.1 Distribuições de probabilidade, fdp, fda e x, a técnica de GVA destas fda, onde u
~ U(0,1).
Distribuição f(x) F(x) x
Exponencial a exp(−a x) 1−exp (−a x) −a ln( u)
1
1 2 x−m 1
Logística sech ( ) x−m m−s ln ( −1)
4s 2s 1+exp [−( )] u
s
1 a 1 1 1
1
Pareto ( ) (1− a−1 ) [ ] a−1
x a−1 x 1−u (a−1)
1 x −m x−m x −m
Valores Extremos exp[− −exp(− )] exp[−exp (− )] m−s ln [−ln(u)]
s s s s
a x a−1 x a x a 1
Weibull ( ) exp[−( ) ] 1−exp [−( ) ] b[−ln(u)]a
b b b b
Nos tópicos abaixo estão descritos os procedimentos matemáticos para Gerar Variáveis
Aleatórias das fdp Exponencial, Logística e Pareto, Gumbel ou Valores Extremos e Weibull,
listadas na Tabela 17.1.
Como (1-u) ~ U(0,1) e u ~ U(0,1) são intercambiáveis, tem-se que x=−ln (u)/λ .
Modelagem e Simulação Discreta 172
1 x−m x−m
f (x)= exp [− −exp (− )] , x, m, s ∊ ℝ, com s > 0; m é o parâmetro de localização e s
s s s
é o parâmetro de escala.
Conclusão: x=m−s ln [−ln (u)] uma variável aleatória com distribuição de probabilidade de
1 x−m x−m
Valores Extremos, f (x)= exp [− −exp (− )] e parâmetros m e s, usando números
s s s
aleatórios u com distribuição uniforme, u ~ U(0,1).
1 x−m
f (x)= sech2 ( ) , x, m, s ∊ ℝ, com s >0; m é o parâmetro de localização e s é o
4s 2s
parâmetro de escala.
1
Conclusão: x=m−s ln ( −1) uma variável aleatória com distribuição de probabilidade
u
1 2 x−m
Logística, f (x)= sech ( ) de parâmetros m e s, usando números aleatórios u com
4s 2s
distribuição uniforme, u ~ U(0,1).
1 1 1 1 a−1 1
u= (1− a−1 ) ⇔ u(a−1)=1− a−1 ⇔ a−1 =1−u (a−1) ⇔ x = ⇔
a−1 x x x 1−u( a−1)
1
1
x=[ ] a−1 .
1−u(a−1)
1
1
Conclusão: x=[ ] a−1 é uma variável aleatória com distribuição de probabilidade de
1−u(a−1)
a
1
Pareto, f ( x)=( ) de parâmetros a, usando números aleatórios u com distribuição uniforme,
x
u ~ U(0,1).
x=b √ −ln ( u) .
a
Como (1-u) ~ U(0,1) e u ~ U(0,1) intercambiáveis, tem-se que
Modelagem e Simulação Discreta 174
Conclusão: x=b √ −ln (u) é uma variável aleatória com distribuição de probabilidade Weibull
a
a−1 a
a x x
f (x)= ( ) exp [−( ) ] , de parâmetros a e b, usando números aleatórios u com distribuição
b b b
uniforme, u ~ U(0,1).
Modelagem e Simulação Discreta 175
18 REFERÊNCIAS
Bussab, W. O.; Morettin, P. A. Estatística Básica. 5ed. São Paulo: Saraiva, 2002. 526p.
Catalunha, Márcio José; Sediyama, Gilberto Chohaku; Leal, Brauliro Gonçalves; Soares, Carlos
Pedro Boechat; Ribeiro, Aristides. Aplicação de cinco funções densidade de probabilidade a
séries de precipitação pluvial no Estado de Minas Gerais. Revista Brasileira de
Agrometeorologia, v. 10, n. 01, p. 153-162, 2002.
Chen, Ken. Performance Evaluation by Simulation and Analysis with Applications to Computer
Networks. John Wiley & Sons, 2015. 226p.
Epperson, James F. An introduction to numerical methods and analysis. 2 nd ed. Hoboken, New
Jersey: John Wiley & Sons, Inc., 2013. 591p.
Forbes, Catherine; Evans, Merran; Hastings, Nicholas; Peacock, Brian. Statistical distributions.
4th ed. Hoboken, New Jersey: John Wiley & Sons, Inc., 2011. 212p.
Freitas Filho, Paulo José. Introdução à Modelagem e Simulação de Sistemas com Aplicações
Arena. 2a ed. Florianópolis: Visual Books, 2008. 372p.
Hirata, Miguel, H. Uma introdução ao aproveitamento da energia eólica. Rio de Janeiro, Brazil:
Proceedings of ENCIT 2004, ABCM, 2004. Disponível em
<http://www.abcm.org.br/anais/encit/2004/artigos/invited/CIT04-IL14.pdf>. Acesso em: 19
Mai 2015.
Hull, T. E.; Dobell, A. R. Random Number Generators. SIAM Review, 1962, Vol. 4, No. 3: pp.
230-254. (Disponível em45: <https://www.jstor.org/stable/2027716>. Acesso em: 04 Set 2019.
Jain, R. The Art of Computer Systems Performance Analysis: Techniques for Experimental
Design, Measurement, Simulation, and Modeling. Wiley-Interscience, 1991.
Kroese, Dirk P.; Chan, Joshua C. C. Statistical Modeling and Computation. Springer: New York,
2014.
Larson, Ron; Farber, Betsy. Estatística Aplicada. 4ed. São Paulo: Pearson Prentice Hall, 2010,
637p.
Leite, Maysa Lima; Virgens Filho, Jorim Sousa. Ajuste de modelos de distribuição de
probabilidade a séries horárias de velocidade do vento para o município de Ponta Grossa,
Estado do Paraná. Acta Scientiarum. Technology Maringá, v.33, n.4, p.447-455, 2011.
Marsaglia, George; Tsang, Wai Wan; Wang, Jingbo. Evaluating Kolmogorov’s Distribution.
Disponível em: <http://www.jstatsoft.org/v08/i18/paper?ev=pub_ext_btn_xdl>. Acesso em: 13
Mai 2015.
Mor, Harchol-Balter. Performance modeling and design of computer systems: queueing theory
in action. Cambridge University Press, New York, 2013. 574p.
NIST. NIST Special Publication 800-22 Revision 1a: A Statistical Test Suite for Random and
Pseudorandom Number Generators for Cryptographic Applications. 2010. Disponível em:
<http://csrc.nist.gov/publications/nistpubs/800-22-rev1a/SP800-22rev1a.pdf>. Acesso em: 20
Mai 2016.
Polyanin, Andrei D.; Manzhirov, Alexander V. Handbook of Mathematics for Engineers and
Scientists. New York: Chapman & Hall/CRC, 2007. 1509p.
Spiegel, Murray R., Schiller, John J, Srinivasan, R. Alu. Probability and statistics. 4ed. New York:
McGraw-Hill, 2013. 424p.
45 <http://chagall.med.cornell.edu/BioinfoCourse/PDFs/Lecture4/random_number_generator.pdf>
Modelagem e Simulação Discreta 177
Sun Microsystems. Sun Fire™ X4150, X4250, and X4450 Server Architecture. September
2008. Disponível: <https://docplayer.net/7413100-Sun-fire-x4150-x4250-and-x4450-server-
architecture-breakthrough-density-using-sun-and-intel-technology.html>. Acesso em: 22 Jul
2021.
Thom, H. C. S. A note on the gamma distribution. Monthly Weather Review, Washington, v.86,
p.117-122, 1958.
Zwillinger, Daniel; Kokoska, Stephen. Standard probability and statistics tables and formulary
- Student Edition. CRC Press: Boca Raton, 2000. 215p.
Modelagem e Simulação Discreta 178
Fonte: https://image.flaticon.com/icons/png/512/47/47443.png
As fragatas são aves de grande porte, com asas compridas e estreitas que representam a menor
superfície de asa por unidade de peso do mundo das aves. Têm cerca de 1 metro de
comprimento, mais de dois de envergadura e uma cauda longa e bifurcada. As
fragatas não conseguem andar em terra, nadar nem levantar voo de uma superfície
plana. São, no entanto, aves extremamente rápidas em voo sobre o mar ou sobre
outras aves.