Você está na página 1de 133

Introduo Simulao Discreta

Mauricio Pereira dos Santos


Departamento de Matemtica Aplicada
Instituto de Matemtica e Estatstica
UNIVERSIDADE DO ESTADO DO RIO DE JANEIRO
ii
Copyright c 1.999 por Mauricio Pereira dos Santos
Os programas apresentados no texto foram criados, exclusivamente, para servir
de apoio a matria contida na obra.
Os programas podem ser copiados e usados livremente mas o autor no tem ne-
nhuma responsabilidade pelo uso que deles for feito.
Editorao: O autor, criando arquivo texto no format LaTex.
Fluxos e figuras: Visio e Corel Paint, includos no texto como EPS (Encapsulated
Postscript File).
Compiladores usados nos programas: Turbo Pascal e Visual Basic 6.
iii
Prefcio
O objetivo deste trabalho fornecer aos alunos das cadeiras de Simulao da UERJ
um referencial que os auxilie no estudo e acompanhamento da matria.
A literatura, sobre o assunto, na lngua portuguesa bastante reduzida e, como
agravante, algumas das poucas obras existentes esto esgotadas.
Mesmo a literatura em ingls sobre Simulao pequena, se comparada com ou-
tros tpicos que formam a chamada Pesquisa Operacional.
Por sua vez os livros genricos de Pesquisa Operacional, quase sem exceo, apre-
sentam apenas um captulo sobre Simulao sendo o assunto, como no poderia
deixar de ser, tratado de forma bastante superficial.
O estudo dos modelos de Simulao implica, obrigatoriamente, no uso do computa-
dor. A falta dele limita, severamente, a compreenso das tcnicas utilizadas. Por
esta razo inclumos no texto programas que possam ajudar aos alunos a fazer suas
prprias aplicaes.
Atualmente, na UERJ, a cadeira de Processamento de Dados ensina como lingua-
gem de programao, o Pascal, razo pela qual os programas do texto so apresen-
tados naquela linguagem. Para confeco dos programas, o compilador usado foi o
Turbo Pascal mas qualquer outro compilador Pascal deve poder ser usado sem mai-
ores complicaes. No captulo 5 apresentado um programa que foi feito para o
ambiente windows, utilizando-se o Visual Basic. Este programa um dos mdulos
do programa POque contmmdulos de vrias aplicaes de Pesquisa Operacional.
Agradecemos a todos aqueles que nos ajudaram nesta tarefa, especialmente os alu-
nos que foram cobaias no uso dos rascunhos deste trabalho.
De antemo agradeo desde j a todos aqueles que puderem apontar imperfeies
e erros que possam ser corrigidos.
O Autor
iv
Contedo
1 Introduo Simulao 1
1.1 Vantagens e Desvantagens da Simulao . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 reas de aplicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Componentes de um Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Tipos de Modelos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 Modelos Discretos e Contnuos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.6 Etapas de um projeto de simulao . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.7 Exemplos de modelos de Simulao . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.7.1 Quebra de rolamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.7.2 Fila com uma estao de servio . . . . . . . . . . . . . . . . . . . . . . . . . 12
2 A gerao de Nmeros Aleatrios 15
2.1 Propriedades desejveis de um gerador de nmeros aleatrios . . . . . . . . . . . . . 15
2.2 Mtodos para a gerao de nmeros aleatrios . . . . . . . . . . . . . . . . . . . . . 16
2.2.1 Mtodo dos quadrados mdios . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2.2 Mtodos Congruentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3 Eficincia Computacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4 Nmeros Aleatrios uniformemente distribudos em [0,1) . . . . . . . . . . . . . . . 19
2.5 O gerador RANDU e a formao de trelias . . . . . . . . . . . . . . . . . . . . . . . 20
2.6 Mtodos com perodos maiores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.7 Geradores de nmeros aleatrios embutidos . . . . . . . . . . . . . . . . . . . . . . 29
2.8 Nmeros aleatrios com outras distribuies uniformes . . . . . . . . . . . . . . . . 30
2.8.1 Variveis aleatrias contnuas . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.8.2 Variveis aleatrias discretas . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.9 Testes estatsticos para a uniformidade . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.9.1 O teste do
2
(qui-quadrado) . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.9.2 O teste de Kolmogorov-Smirnov . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.10 Testes de Aleatoriedade (Independncia) . . . . . . . . . . . . . . . . . . . . . . . . 36
2.10.1 O teste do Intervalo (Gap test) . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.10.2 O teste da corrida (Run test) . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
2.11 Observaes finais sobre a gerao de nmeros aleatrios . . . . . . . . . . . . . . . 41
3 Alguns modelos elementares de Simulao 43
3.1 Jogo de Dados (Craps Game) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.2 Avaliao de Integrais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4 Variveis aleatrias no uniformes 51
4.1 O Mtodo da Transformao Inversa . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.1.1 Distribuies Empricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
4.1.2 A Distribuio Exponencial . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.1.3 A Distribuio Geomtrica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.1.4 A Distribuio Triangular . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.1.5 A Distribuio de Weibull . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.2 Simulao Direta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
vi CONTEDO
4.2.1 A distribuio de Poisson . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.2.2 A Distribuio Gamma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.2.3 A distribuio Normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.3 O Mtodo da Rejeio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.3.1 A Distribuio Beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.4 Outras funes de distribuio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5 Modelos para simular filas de espera e o uso do ARENA 81
5.1 Simulao de um pequeno posto bancrio . . . . . . . . . . . . . . . . . . . . . . . . 81
5.2 Um software mais verstil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
5.2.1 Alguns exemplos usando o programa Simulao . . . . . . . . . . . . . . . . 89
5.3 O software ARENA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.3.1 Simulao de um pequeno posto bancrio . . . . . . . . . . . . . . . . . . . . 95
5.3.2 Simulao de um check-in . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
5.3.3 Simulao de um processo de produo . . . . . . . . . . . . . . . . . . . . . 111
5.3.4 Consideraes finais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
5.4 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
A Tabela do
2
125
Captulo 1
Introduo Simulao
Uma simulao a imitao, durante determinado perodo de tempo, da operao
de um sistema ou de um processo do mundo real. Feita a mo (raramente) ou em
um computador (quase sempre), a simulao envolve a gerao de uma histria ar-
tificial do sistema, e a partir desta histria artificial a inferncia de como o sistema
real funcionaria. O comportamento do sistema estudado pela construo de um
Modelo de Simulao. Este modelo normalmente toma a forma de um conjunto de
consideraes relacionadas a operao do sistema. Estas consideraes so expres-
sas atravs de relaes matemticas, lgicas e simblicas entre as entidades, ou
objetos de interesse, do sistema. Uma vez construdo e validado, um modelo pode
ser usado para investigar uma grande quantidade de questes do tipo e se... sobre
o sistema do mundo real. Alteraes no sistema podem ser inicialmente simuladas
para se prever as consequncias no mundo real. A Simulao tambm pode ser
usada para estudar sistemas no estgio de projeto, ou seja antes do sistema ser
construdo. Assim, a Simulao pode usada tanto como uma ferramenta de an-
lise para prever o efeito de mudanas em sistemas j existentes, quanto como uma
ferramenta para prever a performance de novos sistemas sobre as mais variadas
circunstncias.
1.1 Vantagens e Desvantagens da Simulao
As vantagens principais da simulao so:
Novas polticas, procedimentos operacionais, regras de negcio, fluxos de in-
formao, etc..., podem ser estudadas sem se alterar o mundo real.
Novos equipamentos, layouts, sistemas de transporte, etc..., podem ser testa-
dos sem se comprometer recursos na sua aquisio.
Hipteses sobre como e porque certos fenmenos ocorrem podem ser testados
visando verificar sua praticabilidade.
O tempo pode ser comprimido ou expandido permitindo acelerar ou retardar
o fenmeno sob investigao.
Pode-se entender melhor sob a interao das variveis do sistema.
2 Introduo Simulao
Pode-se entender melhor a participao das variveis na performance do sis-
tema.
Gargalos em processos produtivos podem ser analisados nas mais diferentes
formas.
Um modelo de simulao pode ajudar a entender como um sistema funciona
como um todo, em relao a como se pensa que o sistema opera individual-
mente.
Questes do tipo e se... podem ser respondidas. Isto extremamente til na
fase de design de um projeto.
As desvantagens a serem consideradas so:
A construo de Modelos de Simulao requer treinamento especial. uma
arte que aprendida com tempo e experincia. Alm disto se 2 modelos so
construdos por 2 profissionais competentes, eles tero semelhanas, mas ser
altamente improvvel que sejam iguais.
Os resultados de uma Simulao podem ser difceis de interpretar. Como
a maioria das sadas de uma simulao so variveis aleatrias (elas esto
normalmente baseadas em entradas aleatrias), difcil determinar se uma
observao o resultado do relacionamento entre as variveis do sistema ou
consequncia da prpria aleatoriedade.
A construo e anlise de Modelos de Simulao pode consumir muito tempo
e, como consequncia, muito dinheiro. Economizar por sua vez pode levar a
modelos incompletos.
A Simulao usada em muitos casos onde uma soluo analtica possvel.
A simulao no d resultados exatos.
1.2 reas de aplicao
Existem inmeras reas de aplicao da simulao. A seguir esto listadas algu-
mas das mais importantes:
Simulao das operaes de uma companhia area para testar alteraes em
seus procedimentos operacionais.
Simulao da passagem do trfego em um cruzamento muito grande, onde
novos sinais esto para ser instalados.
Simulao de operaes de manuteno para determinar o tamanho timo de
equipes de reparo.
Simulao do fluxo de partculas no carregadas atravs de um campo radio-
ativo para determinar a intensidade de radiao que penetra o campo.
1.2 reas de aplicao 3
Simulao de uma siderrgica para avaliar alteraes nos seus procedimentos
operacionais.
Simulao da economia de um setor de um pas para prever o efeito de mu-
danas econmicas.
Simulao de batalhas militares visando avaliar o desempenho de armas es-
tratgicas.
Simulao de sistemas de distribuio e controle de estoque, para melhorar o
funcionamento destes sistemas.
Simulao de uma empresa como um todo para avaliar o impacto de grandes
mudanas ou como treinamento para seus executivos. (Business Games)
Simulao de sistemas de comunicaes para determinar o que necessrio
para fornecer um determinado nvel de servio.
Simulao de uma barragem em um determinado rio para avaliar os proble-
mas advindos com a sua construo.
Simulao de uma linha de produo em determinada indstria, para avaliar
efeitos de mudanas previstas no processo produtivo.
Etc...
4 Introduo Simulao
1.3 Componentes de um Sistema
Um Sistema definido como um grupo de objetos que esto juntos em alguma
interao ou interdependncia, objetivando a realizao de algum objetivo. Um
exemplo poderia ser um sistema de produo de automveis. As mquinas, compo-
nentes, peas e trabalhadores operam em conjunto, em uma linha de montagem,
visando a produo de veculos de qualidade.
De forma a entender e analisar um sistema, alguns termos precisam ser definidos:
Uma Entidade um objeto de interesse no sistema.
Um Atributo uma propriedade de uma entidade.
Uma Atividade representa um perodo de tempo de certo tamanho.
Se estamos estudando o funcionamento de uma agncia bancria, os clientes po-
dem ser uma das entidades, o saldo de suas contas correntes pode ser um atributo
e fazer um depsito na conta pode ser um atividade.
OEstado do sistema definido como sendo como a coleo de variveis necessrias
para descrever o sistema em um dado instante. Usando o exemplo da agncia ban-
cria, possveis variveis de estado so o nmero de caixas ocupadas, o nmero
de clientes esperando na fila ou recebendo atendimento e o instante da chegada do
prximo cliente.
Um Evento definido como a ocorrncia instantnea que pode mudar o estado do
sistema.
O termo Endgeno usado para descrever atividades e eventos ocorrendo dentro
do sistema e Exgeno usado para descrever atividades e eventos que ocorrem
fora do sistema.
No exemplo da agncia bancria, a chegada de um cliente um evento exgeno en-
quanto que o trmino de um servio prestado por um caixa um evento endgeno.
1.4 Tipos de Modelos
Modelos de Simulao podem ser Estticos ou Dinmicos.
Um modelo de simulao esttica, algumas vezes chamado de Simulao de Monte
Carlo, um modelo onde a passagem do tempo irrelevante.
Modelos de Simulao Dinmicos representam sistemas cujos resultados variam
com a passagem do tempo.
Um modelo de simulao pode ser ainda Determinstico ou Estocstico.
Modelos de simulao que no contmnenhuma varivel aleatria so classificados
como determinsticos, ou seja, para um conjunto conhecido de dados de entrada
teremos um nico conjunto de resultados de sada.
Um modelo estocstico de simulao tem uma ou mais variveis aleatrias como
entrada. Estas entradas aleatrias levam a sadas aleatrias que podem somente
ser consideradas como estimativas das caractersticas verdadeiras de um modelo.
Assim, por exemplo, a simulao (estocstica) do funcionamento de uma agncia
bancria envolve variveis aleatrias como o intervalo entre chegadas e a durao
dos servios prestados. Logo, medidas como o nmero mdio de clientes esperando
e o tempo mdio de espera de um cliente, devem ser tratadas como estimativas
estatsticas das medidas reais do sistema.
1.5 Modelos Discretos e Contnuos 5
1.5 Modelos Discretos e Contnuos
Os modelos de simulao dinmicos podem ser Discretos ou Contnuos. Em uma
simulao discreta, considera-se somente os eventos onde h alterao do sistema,
ou seja, o tempo decorrido entre alteraes do estado do sistema no relevante
para a obteno dos resultados da simulao. Alguns autores a chamam de Si-
mulao de Eventos Discretos, enfatizando assim que a discretizao se refere
apenas ocorrncia dos eventos ao longo do tempo.
Um exemplo seria a simulao de uma agncia bancria onde entre a chegada (ou
a sada) de clientes o estado do sistema no se altera.
Numa Simulao Contnua o sistema se altera a cada frao de tempo. Exemplos
clssicos so a simulao de um avio voando e a passagem de gua por uma bar-
ragem.
Este texto trata somente da Simulao de Eventos Discretos.
1.6 Etapas de um projeto de simulao
As etapas bsicas de um projeto de simulao so:
1. Formulao do problema
Cada projeto deve comear com a definio do problema a ser resolvido.
importante que a definio esteja clara para todos que participam do projeto.
2. Determinao dos objetivos e planejamento global do projeto
O objetivo indica as questes que devem ser respondidas pela simulao.
Neste ponto deve ser considerado se a simulao a metodologia apropri-
ada para o problema. Nesta fase deve-se fazer tambm uma estimativa do
tamanho da equipe envolvida, custo, tempo, etc...
3. Construo do Modelo
A construo de um modelo de um sistema provavelmente mais arte que ci-
ncia. Embora no seja possvel fornecer um conjunto de instrues que pos-
sibilitem construir cada vez modelos apropriados, existem algumas linhas
mestres que podem ser seguidas. A arte de modelar melhorada se consegui-
mos extrair as partes essenciais de um problema, selecionar e modificar as
consideraes bsicas que caracterizam o sistema e ento enriquecer e elabo-
rar o modelo at a aproximao de resultados teis. Assim melhor comear
com um modelo simples e ir aumentando sua complexidade. Entretanto a
complexidade do modelo no necessita exceder o necessrio para acompanhar
os propsitos para qual o modelo foi construdo. No necessrio se ter uma
relao de um para um entre o modelo e o sistema real. Somente a essncia do
sistema real necessria. indispensvel envolver o usurio na construo
do modelo. Isto faz com que a qualidade do modelo resultante fique melhor e
aumenta a confiana do usurio na sua futura aplicao. Somente exerccios
e a prtica ajudam na construo de modelos melhores.
6 Introduo Simulao
4. Coleta de dados
H uma interao constante entre a construo de um modelo e a coleta dos
dados de entrada necessrios. Geralmente quanto mais complexo o modelo,
mais dados so necessrios. Como a coleta de dados toma um tempo muito
grande do tempo total de um projeto de simulao, necessrio comear esta
coleta o mais cedo possvel.
5. Codificao
Como a maioria dos sistemas do mundo real resulta emmodelos que requerem
um grande nmero de informaes e de clculos, o modelo deve ser progra-
mado em um computador digital. O modelador deve decidir se programa em
uma linguagem de programao comum como FORTRAN, BASIC, PASCAL,
C, etc..., ou usa uma linguagem prpria para simulao tal como SIMAN,
GPSS, SIMSCRIPT, SLAM, etc... Uma linguagem de uso geral vai ter um
tempo de desenvolvimento mais longo mas sua execuo, ser mais rpida.
6. Testes
Aps a codificao dos programas necessrio test-los para verificar se eles
no tem algum erro de programao. Deve-se preparar um conjunto de dados
com a finalidade exclusiva de se testar os programas.
7. Validao
Nesta fase se verifica se o modelo uma representao precisa do sistema
que se quer modelar. nesta fase que se faz a chamada calibrao do modelo,
ou seja, so feitos ajustes at que os resultados nos dem garantias de que o
modelo uma boa representao do problema sendo modelado.
8. Produo
Nesta etapa o modelo colocado em produo e os dados obtidos so analisa-
dos. A produo pode envolver a execuo, vrias vezes, do modelo, variando-
se os dados e os parmetros de entrada.
9. Avaliao global dos resultados
Nesta fase avalia-se se os resultados obtidos esto condizentes com os espe-
rados. Caso sejam encontradas discrepncias podemos ter que voltar etapa
de construo do modelo.
10. Documentao e implementao fundamental, como em qualquer projeto,
que a simulao seja documentada de forma clara e concisa. Os resultados
obtidos tambm devem ser documentados e arquivados. A implantao, se o
usurio participou do processo, tende a ser bem mais simples do que nos casos
em que o usurio no teve uma participao ativa.
1.7 Exemplos de modelos de Simulao 7
1.7 Exemplos de modelos de Simulao
Para entender como funciona uma simulao, vamos ver alguns exemplos simples:
1.7.1 Quebra de rolamentos
Uma grande mquina industrial tem 3 rolamentos diferentes que quebram de tem-
pos em tempos. A probabilidade da vida til (em horas de operao) de um rola-
mento est dada na tabela abaixo:
Vida do Rolamento (horas) Probabilidade
1.000 0.10
1.100 0.13
1.200 0.25
1.300 0.13
1.400 0.09
1.500 0.12
1.600 0.02
1.700 0.06
1.800 0.05
1.900 0.05
Quando um rolamento quebra, a mquina para e um mecnico chamado para
instalar um novo rolamento no lugar do que quebrou. O tempo que o mecnico
demora para chegar ao rolamento quebrado tambm uma varivel aleatria, com
a distribuio dada na tabela abaixo:
Tempo de espera (minutos) Probabilidade
5 0.60
10 0.30
15 0.10
Cada minuto que a mquina fica parada custa $5 e o custo do mecnico de
$0.2/minuto trabalhado substituindo rolamento. O mecnico demora 20 minutos
para trocar 1 rolamento, 30 minutos para trocar 2 e 40 minutos para trocar os 3.
Cada rolamento novo custa $16. Algum sugeriu que ao quebrar um dos rolamen-
tos, se fizesse logo a troca dos 3. Deseja-se avaliar a situao do ponto de vista
econmico.
8 Introduo Simulao
Soluo
Temos que comparar o custo da alternativa atual e da alternativa proposta. Pre-
cisamos estabelecer um horizonte de tempo para fazer esta comparao. Conside-
rando que a menor vida til de um rolamento 1.000 horas (mais de 1 ms), vamos
estabelecer um horizonte de 20.000 horas (um pouco mais de 2 anos) para fazer a
comparao.
Como a vida til dos rolamentos e a espera pelo mecnico so variveis aleatrias
que seguem as distribuies vistas anteriormente, temos que relacionar quelas
distribuies com uma tabela de nmeros aleatrios.
Assim sendo, vamos imaginar que temos um gerador de nmeros aleatrios capaz
de gerar qualquer inteiro entre 0 e 99, ou seja 100 nmeros. Vamos atribuir a cada
durao de vida til uma faixa destes nmeros que me garanta que a distribuio
probabilstica seja mantida.
Como a 1
a
vida til (1.000 horas) tem 10% de probabilidade de ocorrer, vamos atri-
buir a esta durao a faixa de 0 a 9 inclusive, ou seja 10 nmeros (10% dos 100
nmeros). Para a 2
a
durao provvel (1.100 horas), com 13% de probabilidade de
ocorrncia, vamos atribuir a faixa de 10 a 22 inclusive, ou seja 13 nmeros. Po-
demos continuar para as demais duraes provveis dos rolamentos como pode ser
visto na tabela a seguir, ressaltando que a probabilidade acumulada d o limite das
faixas escolhidas.
Vida do Probabilidade N
o
Aleatrio
Rolamento (horas) Probabilidade Acumulada Atribudo
1.000 0.10 0.10 0 9
1.100 0.13 0.23 10 22
1.200 0.25 0.48 23 47
1.300 0.13 0.61 48 60
1.400 0.09 0.70 61 69
1.500 0.12 0.82 70 81
1.600 0.02 0.84 82 83
1.700 0.06 0.90 84 89
1.800 0.05 0.95 90 94
1.900 0.05 1.00 95 99
Tabela semelhante pode ser construda para a espera pela chegada do mecnico.
Tempo de Probabilidade N
o
Aleatrio
Espera (minutos) Probabilidade Acumulada Atribudo
5 0.60 0.60 00 59
10 0.30 0.90 60 89
15 0.10 1.00 90 99
1.7 Exemplos de modelos de Simulao 9
Com os dados das tabelas acima, podemos fazer a simulao
1
, que apresentou os
seguintes resultados para o rolamento 1:
R O L A M E N T O 1
Vida Vida Acumulada Espera
Seqencia N
o
Aleatrio (Horas) (Horas) N
o
Aleatrio (Min)
1 62 1.400 1.400 61 10
2 85 1.700 3.100 10 5
3 89 1.700 4.800 46 5
4 24 1.200 6.000 28 5
5 99 1.900 7.900 55 5
6 27 1.200 9.100 64 10
7 89 1.700 10.800 63 10
8 12 1.100 11.900 75 10
9 2 1.000 12.900 54 5
10 34 1.200 14.100 67 10
11 7 1.000 15.100 90 15
12 75 1.500 16.600 14 5
13 22 1.100 17.700 80 10
14 97 1.900 19.600 84 10
15 37 1.200 20.800 9 5

=120
Podemos observar na planilha que para cada seqencia ou seja, rolamento novo,
gerado um nmero aleatrio que indica qual a vida til daquela rolamento. Tendo
quebrado, aps esta vida til, o mecnico chamado e um 2
o
nmero aleatrio
gerado para definir o tempo de espera at a troca do rolamento ser iniciada.
Quando a vida acumulada ultrapassa 20.000 horas, ou seja a durao da simulao,
paramos a execuo do processo.
Processos semelhantes foram executados para os outros 2 rolamentos, como visto a
seguir.
1
A simulao foi realizada utilizando-se a planilha EXCEL
10 Introduo Simulao
R O L A M E N T O 2
Vida Vida Acumulada Espera
Seqencia N
o
Aleatrio (Horas) (Horas) N
o
Aleatrio (Min)
1 89 1.700 1.700 58 5
2 47 1.200 2.900 88 10
3 60 1.300 4.200 20 5
4 3 1.000 5.200 98 15
5 40 1.200 6.400 26 5
6 64 1.400 7.800 97 15
7 9 1.000 8.800 41 5
8 30 1.200 10.000 79 10
9 32 1.200 11.200 0 5
10 8 1.000 12.200 3 5
11 94 1.800 14.000 58 5
12 66 1.400 15.400 84 10
13 53 1.300 16.700 61 10
14 17 1.100 17.800 43 5
15 72 1.500 19.300 15 5
16 0 1.000 20.300 97 15

= 130
R O L A M E N T O 3
Vida Vida Acumulada Espera
Seqencia N
o
Aleatrio (Horas) (Horas) N
o
Aleatrio (Min)
1 49 1.300 1.300 44 5
2 26 1.200 2.500 45 5
3 2 1.000 3.500 72 10
4 83 1.600 5.100 87 10
5 21 1.100 6.200 19 5
6 20 1.100 7.300 81 10
7 60 1.300 8.600 56 5
8 34 1.200 9.800 74 10
9 63 1.400 11.200 93 15
10 69 1.400 12.600 36 5
11 44 1.200 13.800 71 10
12 76 1.500 15.300 97 15
13 55 1.300 16.600 59 5
14 85 1.700 18.300 81 10
15 21 1.100 19.400 21 5
16 5 1.000 20.400 1 5

=130
1.7 Exemplos de modelos de Simulao 11
Com os dados obtidos na simulao, podemos calcular o custo da situao atual:
Custo dos rolamentos = (15 + 16 + 16) $16 = $752
Custo da espera pelo mecnico = (120 + 130 + 130) $5 = $1.900
Custo da mquina parada = (15 + 16 + 16) 20 $5 = $4.700
Custo do mecnico = (15 + 16 + 16) 20 $0.20 = $188
Custo Total = 752 + 1.900 + 4.700 + 188 = $7.540
A simulao da situao proposta apresentou os seguintes resultados:
ROL. 1 ROL. 2 ROL. 3
Vida Vida Vida 1
a
Vida ESPERA
Seq. NA hr NA (hr) NA (hr) Quebra Acum. NA (Min)
1 96 1.900 2 1.000 34 1.200 1.000 1.000 21 5
2 70 1.500 7 1.000 47 1.200 1.000 2.000 36 5
3 96 1.900 46 1.200 49 1.300 1.200 3.200 21 5
4 48 1.300 17 1.100 42 1.200 1.100 4.300 7 5
5 32 1.200 93 1.800 20 1.100 1.100 5.400 58 5
6 36 1.200 94 1.800 98 1.900 1.200 6.600 83 10
7 41 1.200 17 1.100 53 1.300 1.100 7.700 14 5
8 71 1.500 2 1.000 20 1.100 1.000 8.700 75 10
9 4 1.000 22 1.100 86 1.700 1.000 9.700 5 5
10 69 1.400 21 1.100 0 1.000 1.000 10.700 65 10
11 13 1.100 89 1.700 58 1.300 1.100 11.800 15 5
12 36 1.200 12 1.100 66 1.400 1.100 12.900 12 5
13 75 1.500 57 1.300 29 1.200 1.200 14.100 32 5
14 76 1.500 78 1.500 95 1.900 1.500 15.600 2 5
15 71 1.500 5 1.000 86 1.700 1.000 16.600 31 5
16 98 1.900 43 1.200 22 1.100 1.100 17.700 51 5
17 98 1.900 47 1.200 60 1.300 1.200 18.900 20 5
18 68 1.400 61 1.400 57 1.300 1.300 20.200 35 5

=105
NA = N
o
aleatrio
Feita a simulao da situao proposta, podemos calcular os custos:
Custo dos rolamentos = (18 3) $ 16 = $864
Custo da espera pelo mecnico = 105 $5 = $525
Custo da mquina parada = 18 40 $5 = $3.600
Custo do mecnico = 18 40 $0.20 = $144
Custo Total = 864 + 525 + 3.600 + 144 = $5.133
Assim a simulao
2
nos mostrou que a situao proposta bem melhor em termos
econmicos.
2
Para ser, estatisticamente confivel, as simulaes acima teriam que ser realizadas (replicadas)
muitas vezes e a avaliao econmica calculada com a mdia dos resultados.
12 Introduo Simulao
1.7.2 Fila com uma estao de servio
Uma loja tem somente 1 atendente. Os fregueses chegam aleatoriamente com in-
tervalo, entre eles, variando de 1 a 8 minutos. Cada valor possvel do intervalo
entre chegadas tem a mesma probabilidade de ocorrncia, como mostrado na ta-
bela a seguir:
Tempo entre chegadas (minutos) Probabilidade
1 0.125
2 0.125
3 0.125
4 0.125
5 0.125
6 0.125
7 0.125
8 0.125
A durao do atendimento aos clientes varia de 1 a 6 minutos com probabilidades
mostradas na tabela a seguir:
Durac, o do servic, o (minutos) Probabilidade
1 0.10
2 0.20
3 0.30
4 0.25
5 0.10
6 0.05
Como no exemplo anterior, temos que construir tabelas relacionando as probabili-
dades com nmeros aleatrios gerados:
Tempo entre Probabilidade N
o
Aleatrio
chegadas (min) Probabilidade Acumulada Atribudo
1 0.125 0.125 000 124
2 0.125 0.250 125 249
3 0.125 0.375 250 374
4 0.125 0.500 375 499
5 0.125 0.625 500 624
6 0.125 0.750 625 749
7 0.125 0.875 750 874
8 0.125 1.000 875 999
1.7 Exemplos de modelos de Simulao 13
Durac, o do Probabilidade N
o
Aleatrio
servic, o (min) Probabilidade Acumulada Atribudo
1 0.10 0.10 0 9
2 0.20 0.30 10 29
3 0.30 0.60 30 59
4 0.25 0.85 60 84
5 0.10 0.95 85 94
6 0.05 1.00 95 99
A simulao para os primeiros 20 clientes apresentou os seguintes resultados:
Intervalo entre Instante Durac, o Incio Espera Fim do Tempo total Tempo ocioso
NA chegadas(min) chegada NA servic, o servic, o fila servic, o na loja(min) atendente(min)
1 0 84 4 0 0 4 4 0
2 913 8 8 9 1 8 0 9 1 4
3 727 6 14 74 4 14 0 18 4 5
4 15 1 15 53 3 18 3 21 6 0
5 948 8 23 17 2 23 0 25 2 2
6 309 3 26 79 4 26 0 30 4 1
7 922 8 34 91 5 34 0 39 5 4
8 753 7 41 67 4 41 0 45 4 2
9 235 2 43 89 5 45 2 50 7 0
10 302 3 46 38 3 50 4 53 7 0
11 109 1 47 32 3 53 6 56 9 0
12 93 1 48 94 5 56 8 61 13 0
13 607 5 53 79 4 61 8 65 12 0
14 738 6 59 5 1 65 6 66 7 0
15 359 3 62 79 5 66 4 71 9 0
16 888 8 70 84 4 71 1 75 5 0
17 108 1 71 52 3 75 4 78 7 0
18 212 2 73 55 3 78 5 81 8 0
19 493 4 77 30 2 81 4 83 6 0
20 535 5 82 50 3 83 1 86 4 0

= 68 56 124 18
Podemos, a partir da simulao, inferir alguns resultados:
O tempo de espera mdio de um cliente foi de 2,8 minutos. Este valor encontrado
de :
Tempo mdio de espera (min) =
Tempo total dos clientes na fila (min)
Nmero total de clientes
=
56
20
= 2, 8 minutos
A probabilidade de que um cliente tenha que esperar na fila 65%. Isto vem de:
Probabilidade(espera) =
Nmero de clientes que esperaram
Nmero total de clientes
=
13
20
= 0, 65
14 Introduo Simulao
A proporo de tempo que o atendente fica ocioso 21%. Vem de:
Prob. do atendente estar ocioso =
Tempo total de ociosidade (min)
Durao da Simulao
=
18
86
= 0.21
O atendente est ocupado 100 21 = 79% do tempo.
O tempo de servio mdio de 3.4 minutos. Podemos obt-lo de:
Tempo de servio mdio (min) =
Durao total do servio
Nmero total de clientes
=
68
20
= 3.4 minutos
Este resultado pode ser comparado com o tempo de servio esperado achando-se a
mdia da distribuio do tempo de servio usando a equao:
E(s) =

s=0
sp(s)
Temos ento:
1(0.10) + 2(0.20) + 3(0.30) + 4(0.25) + 5(0.10) + 6(0.05) = 3.2 minutos
O resultado da simulao um pouco maior porque o tamanho da simulao foi
pequeno. Quanto maior a durao da simulao mais o resultado se aproximar de
3.2 minutos.
Algum que fosse tomar decises estaria interessado nos resultados obtidos acima.
Obviamente seria necessrio uma simulao mais demorada para se conseguir re-
sultados mais precisos.
Entretanto, algumas inferncias podem ser obtidas: A maioria dos clientes tem que
esperar mas a espera no excessiva. O atendente no fica muito tempo ocioso.
O objetivo a ser alcanado vai depender do balano entre o custo de espera e o custo
de se colocar mais atendentes.
Captulo 2
A gerao de Nmeros Aleatrios
Pudemos reparar nos exemplos acima que a chave para simular eventos aleatrios
discretos a gerao de nmeros aleatrios. Como se usa o computador para fazer
a simulao, precisamos de mtodos rpidos e eficientes para ger-los.
Os nmeros aleatrios, gerados em computador, no so realmente aleatrios
pois veremos mais adiante que eles so gerados em seqncias que podem ser
reproduzidas, o que viola o princpio bsico da aleatoriedade.
Como contornar este fato ? Se os nmeros passam por uma srie de testes
estatsticos de aleatoriedade ento, para efeitos prticos, podemos consider-
los como se fossem realmente aleatrios.
Por este fato eles so conhecidos como nmeros Pseudo-aleatrios. comum se
usar, em simulao, a expresso nmeros aleatrios mas considere isto, sempre,
como um sinnimo de nmeros pseudo-aleatrios.
2.1 Propriedades desejveis de um gerador de nmeros ale-
atrios
Um gerador de nmeros aleatrios deveria possuir todas as caractersticas abaixo:
1. Aleatoriedade
essencial que a seqncia gerada exiba as propriedades dos nmeros ver-
dadeiramente aleatrios. Este comportamento aleatrio deve ser confirmado
por testes estatsticos.
2. Grande Perodo
Todos os geradores de nmeros aleatrios so baseados no uso de frmulas
determinsticas precisas. Estas frmulas fazem com que, a partir de um va-
lor inicial chamado semente, seja gerada uma srie de nmeros aleatrios
(pseudo-aleatrios). Em um determinado ponto da srie, voltamos a semente
e como a srie gerada por uma frmula, a srie, obviamente, se repete.
A quantidade de nmeros gerados at a seqencia comear a se repetir cha-
mada de Perodo.
16 A gerao de Nmeros Aleatrios
Sempre desejamos o maior perodo possvel. Para propsitos prticos o pe-
rodo deve ser, no mnimo, grande o suficiente para no se repetir durante
uma simulao.
3. Eficincia Computacional
Desde que um estudo de simulao necessita de que um grande nmero de
variveis aleatrias sejam geradas, o gerador de nmeros aleatrios deve ge-
rar estes nmeros gastando o mnimo de tempo de computador. Alm disto
o gerador no deve usar muita memria. Com a evoluo dos computadores
esta ltima propriedade est perdendo um pouco de sua importncia.
2.2 Mtodos para a gerao de nmeros aleatrios
2.2.1 Mtodo dos quadrados mdios
Um dos primeiros mtodos de gerao de nmeros aleatrios foi o chamado Mtodo
dos Quadrados Mdios. Este mtodo foi desenvolvido por John Von Neumann na
dcada de 40. A tcnica comea com um nmero inicial chamado de semente. O n-
mero ento elevado ao quadrado e os dgitos do meio do nmero gerado formam o
prximo nmero da seqncia. Este segundo nmero ento elevado ao quadrado
e os nmeros do meio do nmero gerado so o prximo nmero da seqncia e as-
sim por diante...
Exemplo: Gerar uma seqncia de nmeros aleatrios de 4 dgitos. Seja 3187 a
semente normalmente rotulada como x
0
.
x
0
= 3187
(3187)
2
= 10 | 1569 | 69 x
1
= 1569
(1569)
2
= 02 | 4617 | 61 x
2
= 4617
(4617)
2
= 21 | 3166 | 89 x
3
= 3166
(3166)
2
= 10 | 0235 | 56 x
4
= 235
(235)
2
= 00 | 0552 | 25 x
5
= 552
(552)
2
= 00 | 3047 | 04 x
6
= 3047
e assim por diante...
Este mtodo apresenta 2 problemas srios: normalmente os perodos so curtos e
se o n
o
gerado 0, o mtodo s apresenta zero!
Exemplo: Gerar, pelo mtodo dos quadrados mdios, nmeros pseudo aleatrios de
2 dgitos tendo 44 como semente.
x
0
= 44
(44)
2
= 1 | 93 | 6 x
1
= 93
(93)
2
= 8 | 64 | 9 x
2
= 64
(64)
2
= 4 | 09 | 6 x
3
= 9
(9)
2
= 0 | 08 | 1 x
4
= 8
(8)
2
= 0 | 06 | 4 x
5
= 6
(6)
2
= 0 | 03 | 6 x
6
= 3
(3)
2
= 0 | 00 | 9 x
7
= 0
(0)
2
= 0 | 00 | 0 x
8
= 0
2.2 Mtodos para a gerao de nmeros aleatrios 17
2.2.2 Mtodos Congruentes
Amaioria dos mtodos usados hoje emdia so variaes do chamado Mtodo Congru-
ente Linear, cujos pontos bsicos foram propostos por Lehmer em 1951. Neste
mtodo os nmeros aleatrios, gerados sucessivamente, so obtidos da relao re-
cursiva:
x
n+1
= (ax
n
+c) mod m
A funo z mod t d o resto inteiro da diviso de z por t (ex. 23 mod 5 = 3).
A constante a chamada de multiplicador, a constante c o incremento e m o
mdulo. Como antes, x
0
a semente.
Quando c = 0, o mtodo chamado de Congruncia Multiplicativa.
O Mtodo da Congruncia Linear (c = 0), por gerar nmeros aleatrios que ten-
dem a ter mais dificuldades em passar nos testes estatsticos de aleatoriedade dos
que os gerados pelo mtodo da Congruncia Multiplicativa (c = 0), no , pratica-
mente, mais usado hoje em dia.
Exemplo: Gerar nmeros aleatrios, usando o mtodo congruente multiplicativo,
tendo os seguintes valores: x
0
= 3 , a = 2 e m = 10.
x
0
= 3
x
1
= (2 3) mod 10 = 6
x
2
= (2 6) mod 10 = 2
x
3
= (2 2) mod 10 = 4
x
4
= (2 4) mod 10 = 8
x
5
= (2 8) mod 10 = 6
Como podemos observar o perodo desta gerao foi muito curto (=4).
Ficou claro tambm, neste pequeno exemplo, que o nmero aleatrio gerado o
resto inteiro da diviso por m, ou seja um nmero inteiro entre 0 e (m1).
Neste ponto devemos esclarecer que a frmula congruente necessria para se
gerar nmeros aleatrios, mas no suficiente. A seleo dos valores de a, c, m e x
0
afeta drasticamente as propriedades estatsticas da gerao bem como o tamanho
do perodo.
Vrios estudos levaram ao estabelecimento de algumas regras bsicas que devem
ser observadas na gerao de nmeros aleatrios, quando se utiliza um mtodo
congruente:
1. Como o n
o
aleatrio gerado o resto da diviso por mele s pode ficar entre 0
e (m1). Logo uma regra bsica inicial que m seja o maior possvel.
2. Para m = 2
b
e c = 0, o perodo mais longo possvel P = m 4 = 2
b2
,
que obtido fazendo-se x
0
mpar e a = 3 + 8k ou a = 5 + 8k para algum
k = 0, 1, ...
3. Para m, um nmero primo, e c = 0, o perodo mais longo possvel P =
m 1, que obtido fazendo-se a de tal modo que o menor inteiro k para o
qual (a
k
1) seja divisvel por m, seja k = m1.
18 A gerao de Nmeros Aleatrios
Exemplo:
Usando o Mtodo Congruente Multiplicativo, ache o perodo para o gerador onde
a = 13, m = 2
6
= 64 e x
0
= 1, 2, 3 e 4.
A soluo est dada na tabela a seguir:
i x
i
x
i
x
i
x
i
0 1 2 3 4
1 13 26 39 52
2 41 18 59 36
3 21 42 63 20
4 17 34 51 4
5 29 58 23
6 57 50 43
7 37 10 47
8 33 2 35
9 45 7
10 9 27
11 53 31
12 49 19
13 61 55
14 25 11
15 5 15
16 1 3
Pelo tem 2 o perodo mximo seria P = m 4 = 16. Este perodo s seria en-
contrado no caso de que x
0
fosse mpar, como o caso para x
0
= 1 e x
0
= 3. Para
sementes pares, o perodo fica bastante reduzido.
Observe que a = 13 ou seja da forma 5 + 8k, com k = 1.
Um outro exemplo poderia ser feito com a = 13, m = 67, x
0
= 1.
Estes nmeros se enquadram na 3
a
regra acima pois o menor inteiro (k) que faz
com que 13
k
1 seja divisvel por 67(m), 66. Logo o perodo deve ser igual a
m1 = 66.
Aplicando-se a congruncia temos:
x
0
= 1
x
1
= 13
x
2
= 35
.
.
.
x
65
= 31
x
66
= 1, o que confirma a teoria.
Estes exemplos simples, serviram para ilustrar as propriedades a que devem obe-
decer x
0
, a e m nos mtodos congruentes.
2.3 Eficincia Computacional 19
2.3 Eficincia Computacional
Um fator que tambm tem que ser levado em conta nos geradores de nmeros ale-
atrios a sua velocidade e eficincia computacional.
Para isto os geradores usam como mdulo (m) uma potncia de 2 (m = 2
b
) pois os
computadores trabalham na base 2.
A grande vantagem que isto traz que o resultado da operao (ax
i
) mod m pode
ser feita simplesmente desprezando-se os bs algarismos mais a esquerda do resul-
tado do produto ax
i
, ou seja acha-se o resto da diviso sem dividir.
Para exemplificar vamos ver um exemplo trabalhando com a base 10 a qual esta-
mos mais acostumados.
Seja m = 10
2
= 100(ou seja, b = 2), a = 19 e x
0
= 63.
x
0
= 63
x
1
= 19 63 mod 100 = 1197 mod 100 = desprezando os 2 (= b) algarismos
mais a esquerda = 97
x
2
= 19 97 mod 100 = 1843 mod 100 = 43
x
3
= 19 43 mod 100 = 0817 mod 100 = 17
.
.
.
Na verdade os geradores de nmeros aleatrios usam os mais diversos artifcios
computacionais para serem geis e ocuparem pouca memria.
2.4 Nmeros Aleatrios uniformemente distribudos em[0,1)
Todos os exemplos que vimos at agora geraram nos aleatrios distribudos entre
0 e m 1. No exemplo acima os nmeros podero estar entre 0 e 99, pois sero o
resto inteiro da diviso por 100.
Isto verdade para qualquer mtodo de gerao de nos aleatrios: Eles geram
nmeros inteiros no intervalo [0, m1).
Como veremos mais adiante, todo gerador de nmeros aleatrios divide o nmero
gerado por m. Desta forma o que se obtm uma distribuio uniforme distribuda
em [0,1).
Assim, por exemplo, para a = 13, m = 67 e x
0
= 1, teramos:
x
0
= 1 67 = 0.0149253
x
1
= (13 1) mod 67 = 13 67 = 0.1940298
x
2
= (13 13) mod 67 = 35 67 = 0.522388
x
3
= (13 35) mod 67 = 53 67 = 0.7910447
.
.
.
Alguns geradores dividem por m1 o que d uma distribuio [0, 1]. Na verdade
como m sempre um nmero muito grande, dividir por mou (m1) irrelevante.
20 A gerao de Nmeros Aleatrios
2.5 O gerador RANDU e a formao de trelias
O mtodo da congruncia multiplicativa pode facilmente ser implementado em lin-
guagens de programao como Fortran, Pascal, Basic, etc..., por exemplo.
Um gerador, chamado de RANDU, foi desenvolvido pela IBM e durante quase 20
anos foi usado por praticamente todos os modelos de simulao nas dcadas de 60
e 70.
A RANDU utilizava os valores a = 65.539 e m = 2
31
= 2.147.483.648, ou seja
x
n+1
= (65539 x
n
) MOD2147483648
A funo, codificada em Pascal
1
a seguinte: (a rotina original era em Fortran)
IX: Longint ;
Function RANDU(KX: Integer ) : Real ;
Var
IY: Longint ;
Begin
If KX <> 0 Then IX : = KX;
IY : = 65539 IX;
If IY < 0 Then IY : = IY + 2147483647 + 1;
IX: =IY;
RANDU : = IY / 2147483647;
End;
Obs. Como o programa fora overow, a condio overflow checking deve estar
desligada quando da compilao/execuo.
Aseguir umprograma pascal que utiliza o gerador acima. Oprograma inicialmente
inicializa o gerador e ento gera e imprime os 5 primeiros nmeros aleatrios.
{USO DA RANDU}
{$N+}
{ $E+}
Var
SEMENTE, I : Integer ;
ALEAT: Real ;
{ $I RANDU. PAS}
Begin
Writeln( Qual a semente (1 - 32767) ? ) ;
Readln(SEMENTE) ;
ALEAT: = RANDU(SEMENTE) ;
SEMENTE : = 0;
For I : =1 to 5 do
Begin
ALEAT : = RANDU(SEMENTE) ;
Writeln(ALEAT) ;
End;
End.
1
Todos os programas listados a seguir foram desenvolvidos com a finalidade exclusiva de ilustrar
a matria apresentada. No houve qualquer preocupao em otimiz-los ou usar as tcnicas mais
refinadas de programao.
Outro fator a ser considerado que certos comandos usados nos programas podem no funcionar,
dependendo do compilador que estiver sendo usado.
2.5 O gerador RANDU e a formao de trelias 21
Para uma semente igual a 313, os nmeros impressos por este programa so:
0.0573133, 0.2579080, 0.0316280, 0.8685962 e 0.9269251.
Na dcada de 70 diversos trabalhos provaram que a rotina RANDU apresentava
resultados estatisticamente ruins.
Um dos problemas era a formao de trelias (lattice em ingls) quando se traava
grficos com sucessivos nmeros aleatrios gerados pela RANDU.
Vamos imaginar umcubo comlados igual a 1, ou seja variando de 0 a 1. Vamos mar-
car pontos neste cubo com coordenadas (x
1
, x
2
, x
3
),(x
2
, x
3
, x
4
) , (x
3
, x
4
, x
5
), etc...,
onde x
i
um nmero gerado pela RANDU.
Vamos marcar 5.000 pontos. O que deveramos esperar ?
Que o cubo fosse preenchido uniformemente pelos pontos plotados. O que ocorre no
entanto que todos os pontos aparecem em 15 planos formando o que parece ser
uma trelia (da o nome). Nenhum ponto cai entre os planos, como podemos ver no
grfico abaixo:
Este aspecto, identificado claramente na RANDU, fez com que esta rotina fosse
abandonada como geradora de nmeros aleatrios.
A partir da apareceram diversas alternativas sendo que veremos a seguir duas
das mais usadas na atualidade.
A 1
a
est baseada na seguinte relao e atualmente usada pela IBM:
x
i+1
= (16807 x
i
) mod 2147483647
Rotulamos ela como RAND1 mas, exceto a RANDU, nenhum outro gerador tem
nome prprio.
22 A gerao de Nmeros Aleatrios
A rotina a seguir, a sua implementao em Pascal. A funo a ser chamada tem
em KX a semente e no prprio nome da funo (RAND1), o n
o
aleatrio entre [0, 1].
IX : Longint ;
Function RAND1(KX: Integer ) : Real ;
Const
A = 16807;
B15 = 32768;
B16 = 65536;
P = 2147483647;
Var
XHI,XALO, LEFTLO, FHI,K: Longint ;
Begin
If KX <> 0 Then IX : = KX;
XHI : = IX Div B16;
XALO : = ( IX XHI B16) A;
LEFTLO : = XALO Div B16;
FHI : = XHI A + LEFTLO;
K : = FHI Div B15;
IX : = ( ( ( XALOLEFTLOB16)P) +( FHIKB15) B16)+K;
If IX < 0 Then IX : = IX + P;
RAND1 : = IX 4.656612875E10;
End;
Na 1
a
vez em que a funo chamada deve-se passar a semente. A partir da 2
a
chamada, o argumento passado deve ser igual a 0 e a funo retorna um nmero
aleatrio em [0,1].
O programa a seguir imprime os 5 primeiros nmeros aleatrios gerados a partir
de uma semente escolhida.
{USO DA RAND1}
{$N+}
{ $E+}
Var
SEMENTE, I : Integer ;
ALEAT: Real ;
{ $I RAND1. PAS}
Begin
Writeln( Qual a semente ? (1 - 32767) ) ;
Readln(SEMENTE) ;
ALEAT: = RAND1(SEMENTE) ;
SEMENTE : = 0;
For I : =1 to 5 do
Begin
ALEAT : = RAND1(SEMENTE) ;
Writeln(ALEAT) ;
End;
End.
Para uma semente igual a 313 os 5 primeiros nmeros gerados so: 0.1713277,
0.5044658, 0.5574913, 0.7561453 e 0.5342253.
2.5 O gerador RANDU e a formao de trelias 23
A 2
a
opo, atualmente muito usada, est baseada no trabalho de Marse e Robert
[Marse, K., and S. D. Roberts: Implementing a Portable Fortran Uniform (0,1) Ge-
nerator, Simulation, 41: 135-139 (1983)] e tem sua base na relao:
x
i+1
= (630360016 x
i
) mod 2147483647
Para facilitar o acesso aos nmeros gerados, a implementao que veremos a seguir
permite a gerao de 21.474 sries diferentes de nmeros aleatrios.
Na 1
a
vez que a rotina chamada deve-se usar U = RAND2(n, 0) onde n um
nmero que indica qual das 21.474 sries se deseja usar. Nesta 1
a
chamada ser
gerada a semente para a srie n(0 n 21.473). A semente na verdade a srie
que se deseja usar.
A partir da 2
a
chamada deve-se usar U = RAND2(n, 1).
Uma regra importante, que em cada srie s devem ser considerados os 100.000
primeiros nmeros aleatrios gerados. Assim se for preciso gerar mais de 100.000
nmeros aleatrios, deve-se mudar de srie.
A seguir apresentamos a sua implementao em Pascal:
ZRNG: Longint ;
Function RAND2(ISTRM, ISEED: Integer ) : Double;
Const
MULT1 = 24112;
MULT2 = 26143;
B2E15 = 32768;
B2E16 = 65536;
MODLUS = 2147483647;
Var
HI15 , HI31 , LOW15,LOWPRD: Longint ;
OVFLOW, ZI : Longint ;
Z, Z1 : Double;
I : Integer ;
Begin
If ISEED = 0 Then
Begin
Z : = 1973272912;
For I : =1 to ISTRM do
Begin
Z1 : = ( 715. 0Z) / 2147483647. 0;
Z : = ( 715. 0Z) Int ( Z1)2147483647. 0;
Z1 : = ( 1058. 0Z) / 2147483647. 0;
Z : = ( 1058. 0Z) Int ( Z1)2147483647. 0;
Z1 : = ( 1385. 0Z) / 2147483647. 0;
Z : = ( 1385. 0Z) Int ( Z1)2147483647. 0;
End;
ZRNG : = Trunc ( Z ) ;
End;
ZI : = ZRNG;
HI15 : = ZI Div B2E16;
LOWPRD : = ( ZIHI15B2E16) MULT1;
LOW15 : = LOWPRD Div B2E16;
HI31 : = HI15MULT1+LOW15;
OVFLOW : = HI31 Div B2E15;
ZI : = ( ( (LOWPRDLOW15B2E16)MODLUS) +( HI31OVFLOWB2E15) B2E16)+OVFLOW;
If ZI < 0 Then ZI : = ZI + MODLUS;
24 A gerao de Nmeros Aleatrios
HI15 : = ZI DIV B2E16;
LOWPRD : = ( ZIHI15B2E16) MULT2;
LOW15 : = LOWPRD Div B2E16;
HI31 : = HI15MULT2+LOW15;
OVFLOW : = HI31 Div B2E15;
ZI : = ( ( (LOWPRDLOW15B2E16)MODLUS) +( HI31OVFLOWB2E15) B2E16)+OVFLOW;
If ZI < 0 Then ZI : = ZI + MODLUS;
ZRNG : = ZI ;
RAND2 : = ( 2( ZI / 256) +1) / 16777216. 0;
End;
Apresentamos a seguir um programa que obtm e imprime os 5 primeiros nmeros
gerados pela RAND2. Deve-se observar que, no programa, a varivel ALEAT, que
recebe o n
o
aleatrio deve ser definida como Double Precison.
{USO DA RAND2}
{$N+}
{ $E+}
Var
SERIE, I ,PARM1: Integer ;
ALEAT: Double;
{ $I RAND2. PAS}
Begin
PARM1 : = 0;
Writeln( Qual a serie ? (0 - 21473) ) ;
Readln(SERIE) ;
ALEAT: = RAND2( SERIE,PARM1) ;
PARM1 : = 1;
For I : =1 to 5 do
Begin
ALEAT : = RAND2( SERIE,PARM1) ;
Writeln(ALEAT) ;
End;
End.
Para n = 2, os 5 primeiros nmeros gerados so 0.436457, 0.556578, 0.617909,
0.768997 e 0.595177.
2.6 Mtodos com perodos maiores
Os mtodos vistos anteriormente ainda so muito usados, inclusive a RANDU!. No
entanto, para simulaes mais complexas, seus perodos so relativamente curtos
(10
9
) o que temlevado ao desenvolvimento de novos mtodos de gerao de nmeros
aleatrios, todos com a caracterstica comum de ter grandes perodos (> 10
30
).
Para exemplificar o que dissemos acima, vamos apresentar a seguir um gerador
que rotulamos de RAND3.
2.6 Mtodos com perodos maiores 25
Ele est baseado no trabalho Toward a Universal Random Number Generator
George Marsaglia, Florida State University Report: FSU-SCRI-87-50 (1987).
Ele se enquadra emuma classe de geradores chamados de Geradores de Fibonacci
e esto baseados na seguinte recorrencia:
x
i
= (x
ip
+x
ik
) mod m onde p > k > 0
Obviamente que o mtodo precisa de p sementes para se obter o primeiro nmero
gerado pela frmula. Tambm como o perodo muito grande, necessrio se ter
tcnicas para se pegar pedaos do gerador para quando se precisar de mais uma
gerao em uma simulao. A RAND3, apresentada a seguir, j tem todos estes
clculos embutidos e a partir de somente 2 sementes, fornecidas inicialmente, ele
cria seqencias de nmeros aleatrios diferentes.
Como dissemos, o mtodo pede 2 sementes. A 1
a
no intervalo [1, 31328] e a 2
a
no
intervalo [1,30081].
Para cada par de sementes gerada uma srie de nmeros aleatrios com perodo
de 10
30
.
Assim, variando-se as sementes temos 900.000.000 de sries, cada uma com 10
30
nmeros aleatrios.
A rotina em Pascal (RAND3) a seguinte:
Type
VETOR = Array[ 1. . 98] of Double;
Var
I97 , J97 : Longint ;
C, CD,CM : Double;
U: VETOR;
Function RAND3( Var IJ , KL,PARAM: Longint ) : Double;
VAR
S, T, UNI: Double;
J , K, L, II , JJ ,M: Longint ;
Begin
If PARAM = 0 Then
Begin
I97 : = 97;
J97 : = 33;
UNI : = 0;
IJ : = IJ Mod 31329;
KL : = KL Mod 30082;
PARAM : = ( ( IJ Div 177) Mod 177) + 2;
J : = ( IJ Mod 177) + 2;
K : = ( (KL Div 169) Mod 178) + 1;
L : = KL Mod 169;
For I I : = 1 to 97 do
Begin
S : = 0. 0;
T : = 0. 5;
For JJ : = 1 to 24 do
Begin
M : = ( (PARAMJ) Mod 179)K;
M : = M Mod 179;
PARAM : = J ;
26 A gerao de Nmeros Aleatrios
J : = K;
K : = M;
L : = (53L+1) Mod 169;
If ( ( LM) Mod 64) >= 32 Then S : = S + T;
T : = T 0. 5;
End;
U[ I I ] : = S;
End;
C : = 362436.0 / 16777216. 0;
CD : = 7654321.0 / 16777216. 0;
CM : = 16777213.0 / 16777216. 0;
I97 : = 97;
J97 : = 33;
RAND3 : = UNI;
Exit ;
End;
UNI : = U[ I97 ] U[ J97 ] ;
If UNI < 0. 0 Then UNI : = UNI + 1. 0;
U[ I97 ] : = UNI;
I97 : = I97 1;
If I97 = 0 Then I97 : = 97;
J97 : = J97 1;
If J97 = 0 Then J97 : = 97;
C : = C CD;
If C < 0. 0 Then C : = C + CM;
UNI : = UNI C;
If UNI < 0 Then UNI : = UNI + 1. 0;
RAND3 : = UNI;
End;
A seguir temos um programa que usa a RAND3 e imprime os 5 primeiros nmeros
gerados a partir de um par de sementes.
A chamada que inicializa a rotina, onde I e J so as sementes escolhidas, deve
ser do tipo ALEAT = RAND3(I,J,0). A varivel que recebe o nmero aleatrio
deve ser de preciso dupla. As chamadas subsequentes so feitas com ALEAT =
RAND3(0,0,1).
{USO DA RAND3}
{$N+}
{ $E+}
Var
SEMENTE1,SEMENTE2, PARAM : Longint ;
I : Integer ;
ALEAT : Double;
{ $I RAND3. PAS}
Begin
PARAM : = 0;
Writeln( Qual a 1a. SEMENTE ? (1 - 31328) ) ;
Readln(SEMENTE1) ;
Writeln( Qual a 2a. SEMENTE ? (1 - 30081) ) ;
Readln(SEMENTE2) ;
2.6 Mtodos com perodos maiores 27
ALEAT: = RAND3(SEMENTE1,SEMENTE2,PARAM) ;
PARAM : = 1;
For I : =1 to 5 do
Begin
ALEAT : = RAND3(SEMENTE1,SEMENTE2,PARAM) ;
Writeln(ALEAT) ;
End;
End.
Com a 1
a
semente igual a 1802 e a 2
a
igual a 9373 os 5 primeiros nmeros gerados
so: 0.116391, 0.964849, 0.88297, 0.420487 e 0.495856.
Um outro gerador tem um perodo ainda maior que a RAND3. A sua descrio
pode ser vista no paper An object-oriented random-number package with many
long streams and substreams Pierre LEcuyer, Richard Simard, E.Jack Chen and
W. David Kelton - 2000. Vamos, para efeito de referncia futura, cham-lo de
RAND4.
Este gerador pertence a uma classe de geradores que nada mais so do que a combi-
nao de 2 ou mais geradores congruentes, baseados na condio de que o perodo
de 2 geradores embaralhados maior do que de um gerador s. No caso deste
gerador, seu perodo de 3.1 10
57
. As frmulas de gerao so:
A
i
= (1403580 A
i2
810728 A
i3
)mod(2
32
209)
B
i
= (527612 B
i1
1370589 B
i3
)mod(2
32
22853)
Y
i
= (A
i
B
i
)mod(2
32
209)
U
i
=
Y
i
2
32
208
O mtodo permite que sejam geradas 10
19
sries diferentes, cada uma delas com
10
38
nmeros aleatrios !!
Por ser muito grande, no listamos aqui o programa fonte (RAND4).
Esta verso do programa s permite que se use 50 sries, mas devemos ressaltar
que isto equivale a se ter 50 geradores diferentes, cada um com 10
38
nmeros ale-
atrios !
O programa tambm tem sub-rotinas que permitem que se pule dentro de uma
srie, ou seja, posso escolher sub-sries dentro de cada uma das 50 sries dispon-
veis.
So necessrias 6 sementes iniciais, no intervalo [1; 4294967087].
O programa a seguir, utiliza a RAND4 para gerar nmeros aleatrios. Ele imprime
os 3 primeiros nmeros gerados das sries 1, 2, 3 e 4. Em seguida faz com que a
srie 1 pule 2
25
+ 50000 = 33.604.432 nmeros aleatrios e, a partir deste ponto,
mais 3 nmeros da srie 1 so impressos. Finalmente o programa imprime a soma
dos 100 primeiros nmeros gerados para as 50 sries distintas, aps voltar ao incio
das 4 sries usadas.
Obs. A varivel SERIE j est definida e pode ser usada.
28 A gerao de Nmeros Aleatrios
{USORAND4}
{N+}
{E+}
var
K, I : Longint ;
SOMA, NUMALEAT: Double;
SEMENTE: Array[ 0 . . 5 ] of Double;
{ $I Rand4. pas }
Begin
For I : = 1 to 6 do
Begin
Writeln( Semente , I , ? ) ;
Readln(SEMENTE[ I 1] ) ;
If (SEMENTE[ I 1] < 1. 0 ) or (SEMENTE[ I 1] > 4294967087.0) then
Begin
writeln( Semente fora da faixa permitida ! ) ;
Exit ;
End;
End;
{ ========================================================}
{ Passagem das sementes para a RAND4}
SETASEMENTE(SEMENTE) ;
{ ========================================================}
{ Rotina da RAND4 que tem que ser obri gatori amente chamada no i nci o }
I ni c i o ;
{ ========================================================}
SOMA : = 0. 0;
For I : = 1 to 4 do
Begin
SERIE : = I ;
For K : = 1 to 3 do
Begin
NUMALEAT : = RAND4;
Writeln( Serie ,SERIE, No. Aleatorio = ,NUMALEAT) ;
End;
End;
SERIE : = 1;
AVANCAESTADO(25 , 50000 ,SERIE) ;
For K: = 1 to 3 do
Begin
NUMALEAT : = RAND4;
Writeln( Serie ,SERIE, No. Aleatorio = ,NUMALEAT) ;
End;
For I : = 1 to 4 do
Begin
SERIE : = I ;
VOLTAINICIOSERIE(SERIE) ;
End;
For I : = 1 to 50 do
Begin
SERIE : = I ;
For K : = 1 to 100 do
Begin
2.7 Geradores de nmeros aleatrios embutidos 29
NUMALEAT : = RAND4;
SOMA : = SOMA + NUMALEAT;
End;
End;
Writeln( SOMA = ,SOMA) ;
End.
Para as sementes 78975, 2731847, 1300, 15873476, 7590 e 6150 os nmeros alea-
trios encontrados foram:
Srie 1 : 0.58804, 0.06393 e 0.28012
Srie 2: 0.82639, 0.35619 e 0.55459
Srie 3: 0.13759, 0,07373 e 0.24462
Srie 4: 0.57235; 0.50824 e 0.89428.
Aseguir, atravs do comando AVANCAESTADO(25,50000,SERIE), a srie 1 avan-
ada. Este comando faz com que, na srie 1, sejam pulados 2
25
+ 50000 =
33.604.432 nmeros, ou seja como se a gerao tivesse saltado aquela quanti-
dade de nmeros aleatrios. Em seguida se imprime 3 nmeros da srie 1 que so
0.38099, 0.14266 e 0.50491.
A seguir, atravs do comando VOLTAINICIOSERIE(SERIE), volta-se as 4 primei-
ras sries ao seu ponto inicial. Finalmente o programa imprime a soma dos 100
primeiros nmeros gerados nas 50 sries, ou seja 2496,121.
2.7 Geradores de nmeros aleatrios embutidos
Em algumas linguagens tais como C, BASIC, PASCAL, etc..., existe um gerador de
nmeros aleatrios embutido na prpria linguagem. Tambm existem geradores
em programas aplicativos tais como Excel, Lotus 123, etc...
Exemplificando, temos a seguir um programa em BASIC para gerar nmeros ale-
atrios uniformemente distribudos no intervalo [0, 1].
INPUT Qual a Semente ?; semente
RANDOMIZE( semente )
FOR i = 1 to 5
X = RND
PRINT X
NEXT i
END
O comando RANDOMIZE inicializa, com a semente, o gerador de nmeros aleat-
rios que um comando da prpria linguagem.
Executando-se este programa no QuickBasic com a semente 1813, obtemos os n-
meros:
0.9601251, 0.4571911, 0.7457173, 0.9784663 e 0.6727366.
Obviamente, usando-se outro compilador BASIC, obteremos nmeros diferentes.
Os geradores embutidos, normalmente, no so muito confiveis e devem ser
usados com reservas. Uma das rotinas embutidas mais usadas a RANDU !
30 A gerao de Nmeros Aleatrios
2.8 Nmeros aleatrios com outras distribuies uniformes
Uma vez que temos uma rotina para gerar nmeros uniformemente distribudos
no intervalo [0, 1], fcil ger-los com outras distribuies uniformes.
2.8.1 Variveis aleatrias contnuas
Suponha que X uma varivel aleatria contnua, uniformemente distribuda den-
tro do intervalo (a, b), onde a < b. Faamos U representar uma varivel aleatria
uniformemente distribuda no intervalo [0, 1]. Aplicando proporcionalidade sim-
ples temos:
_
X a
b a
_
=
_
U 0
1 0
_
ou
X = a + (b a) U
Assim muito simples gerar X de um dado U, conhecendo-se a e b.
Exemplo: Fazer um comando Pascal para gerar variveis aleatrias contnuas uni-
formemente distribudas no intervalo [1, 4].
X := 1. + 3. * RAND(0);
Obs. (RAND pode ser a RAND1, RAND2, etc...)
2.8.2 Variveis aleatrias discretas
Agora suponha que a e b sejam quantidades inteiras, a < b, e X uma vari-
vel aleatria discreta (s valores inteiros) uniformemente distribuda no intervalo
[a, b]. Assim X s pode tomar valores iguais a a, a + 1, a + 2, ..., b 1, b.
Se U contnua e uniformemente distribuda no intervalo [0, 1], ento:
X = a + INT[(b a + 1) U]
onde INT a funo inteiro, ou seja a que elimina as decimais.
Observe que como 0 U < 1, a quantidade INT{(ba+1)U} toma os valores
inteiros 0, 1, 2, .., (b a). Logo X s pode tomar valores a, a + 1, a + 2, ..., b.
Vejamos um exemplo: Seja a = 2 e b = 7.
Assim X ser igual a:
X = 2 + INT[(7 2 + 1) U]
X = 2 + INT[6 U)]
X = 2+ um valor de 0 a 5, inteiro.
Logo X pode ser 2, 3, 4, 5, 6 ou 7.
2.9 Testes estatsticos para a uniformidade 31
Exemplo: Fazer uma rotina Pascal que simule se jogar, simultaneamente, 2 dados.
Var
X, X1, X2: Integer ;
. . . . . . . . . . . . . . . . .
X1 : = 1 + TRUNC( 6. 0 RAND( 0 ) ) ;
X2 : = 1 + TRUNC( 6. 0 RAND( 0 ) ) ;
X : = X1 + X2;
. . . . . . . . . . . . . . . . .
Obs. Em Pascal o comando para pegar s a parte inteira de um nmero TRUNC.
2.9 Testes estatsticos para a uniformidade
Existem numerosos testes estatsticos para garantir que os nmeros pseudos-alea-
trios esto sendo gerados aleatoriamente. Veremos alguns deles sem nos aprofun-
darmos na teoria estatstica.
Um teste bsico que sempre deve ser realizado para validar um gerador de nme-
ros aleatrios o teste de uniformidade. Veremos 2 dos mais usados: o teste de
Kolmogorov-Smirnov e o teste do Qui-Quadrado (
2
).
Ambos os testes medem o grau de aderncia entre a distribuio de uma amostra
de nmeros aleatrios gerados e a distribuio uniforme terica. Ambos os tes-
tes esto baseados na hiptese nula de que nenhuma diferena significante existe
entre a amostra e a distribuio terica.
2.9.1 O teste do
2
(qui-quadrado)
Chamando O
i
de frequncia observada e E
i
de frequncia esperada na categoria i,
o
2
pode ser calculado da seguinte forma:

2
calc
=
(O
1
E
1
)
2
E
1
+
(O
2
E
2
)
2
E
2
+. . . +
(O
k
E
k
)
2
E
k
Este teste feito com um determinado nvel de significncia, , normalmente 5%.
O teste diz que se o
2
calc
for menor que o
2
tabelado
aceitamos a hiptese nula (H
0
),
ou seja de que a sequncia de nmeros aleatrios gerados uniformemente distri-
buda em [0, 1].
Vejamos um exemplo: sejam os nmeros aleatrios a seguir:
0.34 0.90 0.25 0.89 0.87 0.44 0.12 0.21 0.46 0.67
0.83 0.76 0.79 0.64 0.70 0.81 0.94 0.74 0.22 0.74
0.96 0.99 0.77 0.67 0.56 0.41 0.52 0.73 0.99 0.02
0.47 0.30 0.17 0.82 0.56 0.05 0.45 0.31 0.78 0.05
0.79 0.71 0.23 0.19 0.82 0.93 0.65 0.37 0.39 0.42
0.99 0.17 0.99 0.46 0.05 0.66 0.10 0.42 0.18 0.49
0.37 0.51 0.54 0.01 0.81 0.28 0.69 0.34 0.75 0.49
0.72 0.43 0.56 0.97 0.30 0.94 0.96 0.58 0.73 0.05
0.06 0.39 0.84 0.24 0.40 0.64 0.40 0.19 0.79 0.62
0.18 0.26 0.97 0.88 0.64 0.47 0.60 0.11 0.29 0.78
32 A gerao de Nmeros Aleatrios
Dividindo em 10 intervalos [0;0.1), [0.1;0.2),...,[0.9;1] e contando a quantidade de
nmeros gerados em cada intervalo (O
i
), podemos efetuar os clculos para se testar
com o
2
.
Intervalo O
i
E
i
O
i
E
i
(O
i
E
i
)
2
(O
i
E
i
)
2
/E
i
0.0 0.1 8 10 -2 4 0.4
0.1 0.2 8 10 -2 4 0.4
0.2 0.3 10 10 0 0 0.0
0.3 0.4 9 10 -1 1 0.1
0.4 0.5 12 10 2 4 0.4
0.5 0.6 8 10 -2 4 0.4
0.6 0.7 10 10 0 0 0.0
0.7 0.8 14 10 4 16 1.6
0.8 0.9 10 10 0 0 0.0
0.9 1.0 11 10 1 1 0.1
100 100

= 3.4

2
calc
= 3.4
O valor do
2
tab
encontrado em tabelas onde 2 parmetros so necessrios: o n-
mero de graus de liberdade (nu) e o nvel de significncia ().
O nmero de graus de liberdade igual ao nmero de intervalos 1. O nvel de
significncia ser 5% ou 0.05.
Logo com = 10 1 = 9 e = 0.05 encontramos:

2
tab
= 16.9 (tabela pgina 125)
No nosso exemplo como 3.4 < 16.9, ns aceitamos a hiptese de que os nmeros
foram gerados uniformemente distribudos em [0, 1].
Para melhorar a preciso do teste do
2
devemos agrupar, na superior, as catego-
rias em que a freqencia esperada (E
i
) 5.
O programa abaixo usa a RAND2 para gerar 5.000 nmeros aleatrios e a seguir
calcula o
2
calc
.
{TESTE do QUIQUADRADO}
{$N+}
{ $E+}
Type
VETOR1 = Array[ 1. . 10] of Integer ;
VETOR = Array[ 1. . 5000] of Double;
Var
I , J , PARAM, N, ISER: Integer ;
U: Double;
QUIC: Real ;
A: Vetor ;
INTERV: Vetor1 ;
{ $I RAND2. PAS}
Begin
PARAM : = 0;
Writeln( Qual a Serie (0 a 21473) ? ) ;
Readln( ISER) ;
Writeln( Quantos Numeros (MAX = 5.000) ? ) ;
Readln(N) ;
2.9 Testes estatsticos para a uniformidade 33
U : = RAND2( ISER,PARAM) ;
PARAM : = 1;
{AMOSTRA DE N NUMEROS ALEATORIOS }
For I : =1 to N do
Begin
U : = RAND2( ISER,PARAM) ;
A[ I ] : = U;
End;
{SOMA OS NUMEROS NO SEU INTERVALO}
For I : =1 to N do
Begin
A[ I ] : = A[ I ] 10;
J : = TRUNC(A[ I ] ) ;
INTERV[ J+1] : = INTERV[ J+1] + 1;
End;
QUIC : = 0. 0;
U : = N / 10. 0;
{CALCULA E IMPRIME O QUIQUADRADO}
For I : = 1 to 10 do
Begin
QUIC : = QUIC + SQR(INTERV[ I ] U) / U;
End;
Writeln( QUI-QUADRADO Calculado = ,QUIC) ;
End.
Para a srie 1813 o valor encontrado de 4.744. Como este valor menor que 16.9,
aceitamos a hiptese de que a RAND2 gera nmeros aleatrios uniformemente
distribudos.
2.9.2 O teste de Kolmogorov-Smirnov
Este teste compara a funo de distribuio acumulada contnua, F(x), da distri-
buio uniforme com a funo de distribuio acumulada emprica, S
N
(x), de uma
amostra de N observaes. No caso da distribuio uniforme em [0, 1], temos por
definio,
F(x) = P(X x) = x, 0 x 1
Se a amostra de nmeros aleatrios U
1
, U
2
, ..., U
N
, ento a funo de distribuio
acumulada contnua emprica , S
N
(x), definida por
S
N
(x) =
nmeros de U
1
, U
2
, . . . , U
N
que so x
N
Quando N se torna grande, S
N
(x) deveria se tornar uma boa aproximao para
F(x) garantindo que a hiptese nula verdadeira.
O teste de Kolmogorov-Smirnov est baseado no maior desvio absoluto entre F(x)
e S
N
(x) no intervalo da varivel aleatria., ou seja ele est baseado na estatstica
D = max | S
N
(x) F(x) |
34 A gerao de Nmeros Aleatrios
A distribuio de D conhecida e est tabelada como uma funo de N.
Para testar contra uma funo de distribuio acumulada contnua uniforme, os
procedimentos so:
1. Ordene os dados (nmeros aleatrios) do menor para o maior:
U
(1)
U
(2)
, . . . , U
(N)
2. Atribua, para cada nmero, U
i
, ordenado, um valor seqencial (i). O valor de
S
i
igual a i/N.
3. Calcule, para cada valor de i, a diferena, em valor absoluto, entre S
x
, ou seja
i/n e F
x
, ou seja o prprio U
i
4. Faa D ser igual a maior diferena encontrada.
5. Determine o valor crtico, D

, de uma tabela para um nvel de significncia


e uma amostra de tamanho N.
6. Se D maior do que D

ento a hiptese nula rejeitada. Se D D

ento a hiptese aceita, ou seja os nmeros aleatrios so uniformemente


distribudos.
Exemplo:
Sejam 0.44, 0.81, 0.14, 0.05 e 0.93, cinco nmeros aleatrios gerados para os quais
desejamos usar o teste de K-S, com um nvel de significncia () de 5%. A tabela a
seguir mostra os clculos necessrios, lembrando que os nmeros devem ser clas-
sificados em ordem ascendente:
i U
i
i/n | U
i
(i/n) |
1 0,05 0,2 0,15
2 0,14 0,4 0,26
3 0,44 0,6 0,16
4 0,81 0,8 0,01
5 0,93 1,0 0,07
D = max{0.15, 0.26, 0.16, 0.01, 0.07} = 0.26
Podemos consultar uma tabela ou usar uma aproximao que diz que aceitamos
H
0
, ou seja a hiptese nula (a distribuio uniformemente distribuda) se:
_

n + 0.12 +
0.11

n
_
D C

O valor de C
0.05
1.358. No nosso caso temos ento:
_

5 + 0.12 +
0.11

5
_
0.26 = 0.625
Logo como 0.625 menor que 1.358, aceitamos H
0
.
O programa Pascal a seguir, calcula o valor de D para uma amostra de 5.000 n-
meros aleatrios gerados usando-se a RAND2 vista anteriormente:
2.9 Testes estatsticos para a uniformidade 35
{TESTE DE KOLMOGOROVSMIRNOV}
Type
Vetor = Array[ 1. . 5000] of Double;
Var
ISER, I ,PARAM: Integer ;
D,U: Double;
N, DIFE, DIFD: Real ;
A : Vetor ;
{ $I RAND2. PAS}
{ }
Procedure CLASSIFICA(LEFT, RIGHT: Integer ; Var A: Vetor ) ;
Var
II , L1, R1, I , J : Integer ;
K, TR: Double;
Begin
K : = (A[LEFT] + A[RIGHT] ) / 2 . ;
I : = LEFT;
J : = RIGHT;
Repeat
While A[ I ] < K do
INC( I , 1 ) ;
While K < A[ J] do
DEC( J , 1 ) ;
If I <= J then
Begin
TR : = A[ I ] ;
A[ I ] : = A[ J ] ;
A[ J] : = TR;
INC( I , 1 ) ;
DEC( J , 1 ) ;
End;
Until I > J ;
If LEFT <J then
CLASSIFICA(LEFT, J , A) ;
If I < RIGHT then
CLASSIFICA( I , RIGHT, A) ;
End;
{ }
Begin
PARAM : = 0;
N : = 5000;
Writeln( Qual a Serie (0 a 21473) ? ) ;
Readln( ISER) ;
U : = RAND2( ISER,PARAM) ;
PARAM : = 1;
For I : =1 to Trunc (N) do
Begin
U : = RAND2( ISER,PARAM) ;
A[ I ] : = U;
End;
CLASSIFICA( 1 , Trunc (N) , A) ;
D : = 9999.0;
For I : = 1 to Trunc (N) do
36 A gerao de Nmeros Aleatrios
Begin
DIFD : = ( I / N) A[ I ] ;
If DIFD < 0 then DIFD : = 9999;
DIFE : = A[ I ] ( ( I 1) / N) ;
If DIFE < 0 then DIFE : = 9999;
If DIFE > D then D : = DIFE;
If DIFD > D then D : = DIFD;
End;
Writeln( D = ,D) ;
End.
A execuo deste programa, com a srie 1400, vai imprimir o valor de 0,0105386
para D.
Temos ento:
_

5000 + 0.12 +
0.11

5000
_
0.01053864 = 0.746
Como 0.746 menor que 1.358, aceitamos que a RAND2 gera uma sequncia de
nmeros aleatrios uniformemente distribudos em [0, 1].
Convm neste ponto esclarecer a diferena entre uniformidade e aleatoriedade ou
independncia. Assim a seqncia 0.01, 0.10, 0.15, 0.20, 0.25, etc..., uniforme
mas no aleatria. Uniformidade necessria mas no suficiente.
2.10 Testes de Aleatoriedade (Independncia)
2.10.1 O teste do Intervalo (Gap test)
O teste do intervalo usado para testar a ordem de uma seqncia de dgitos alea-
trios. Neste teste ns contamos o nmero de dgitos entre a i esima e a i esima+1
ocorrncia de um dgito particular d. Se n outros dgitos esto presentes temos en-
to um intervalo (gap) de comprimento n. Todos os intervalos so determinados
para cada d, onde d pode ser um dos 10 valores possveis (0,1,...,9). Tabulamos
ento o total do nmero de ocorrncias de cada comprimento de intervalo.
O nmero esperado de intervalos de comprimento n dado por :
E
n
= (0.9)
n
(0.1)N, onde N nmero total de intervalos.
Podemos ento usar o teste do
2
para verificar a aleatoriedade.
No caso de nmeros gerados por um gerador bsico, ou seja uniforme em [0, 1], te-
mos que relacionar intervalos com os dgitos de 0 a 9.
Assim sendo, se o nmero estiver no intervalo [0, 0.1), consideramos como sendo o
nmero 0. Se estiver no intervalo [0.1, 0.2), consideramos como sendo igual a 1 e
assim por diante.
2.10 Testes de Aleatoriedade (Independncia) 37
Exemplo: Sejam os 48 nmeros aleatrios a seguir:
0.956 0.283 0.365 0.056 0.604 0.013
0.447 0.934 0.788 0.766 0.132 0.039
0.832 0.097 0.719 0.471 0.074 0.652
0.894 0.532 0.256 0.684 0.313 0.248
0.917 0.546 0.357 0.936 0.045 0.369
0,576 0.632 0.248 0.561 0.245 0.611
0.377 0.501 0.872 0.727 0.506 0.622
0.175 0.973 0.540 0.492 0.717 0.809
Associando os nmeros gerados em cada faixa aos dgitos correspondentes, encon-
tramos a seguinte seqencia:
923 060 497 710 807 406 852 632 953 903 562 526 358 756 195 478.
Usando o nmero 0 como exemplo, vamos encontrar os intervalos (gaps):
O 1
o
intervalo tem comprimento 1 pois, na seqencia, temos o 1
o
zero, logo depois o
nmero 6 e, a seguir, outro 0. O prximo 0 aparece depois dos nmeros 47171, ou
seja temos um intervalo de comprimento igual a 5. A seguir aparecem os nmeros
7 e 4 e outro 0. Temos ento um intervalo de comprimento 2. Finalmente o ltimo
0 vai aparecer depois dos nmeros 68526329539. Temos um intervalo de compri-
mento igual a 11.
Procedendo de forma idntica para os outros dgitos (1 a 9), podemos construir a
tabela a seguir:
d Comprimento Intervalo (n)
0 1, 5, 1, 2, 11
1 31
2 18, 2, 8, 1
3 19, 3, 2, 6
4 8, 29
5 5, 4, 2, 3, 2, 3
6 12, 3, 9, 3, 5
7 0, 4, 24, 6
8 5, 19, 8
9 6, 16, 2, 15
Um total de 38 intervalos foram encontrados, variando de 0 a 31 (o maior intervalo
possvel 46).
O nmero esperado e observado de intervalos de cada comprimento esto tabulados
a seguir:
38 A gerao de Nmeros Aleatrios
n O
n
E
n
n O
n
E
n
n O
n
E
n
0 1 3.80 17 0 0.63 34 0 0.11
1 3 3.42 18 1 0.57 35 0 0.10
2 6 3.08 19 2 0.51 36 0 0.09
3 5 2.77 20 0 0.46 37 0 0.08
4 2 2.49 21 0 0.42 38 0 0.07
5 4 2.24 22 0 0.37 39 0 0.06
6 3 2.02 23 0 0.34 40 0 0.06
7 0 1.82 24 1 0.30 41 0 0.05
8 3 1.64 25 0 0.27 42 0 0.05
9 1 1.47 26 0 0.25 43 0 0.04
10 0 1.32 27 0 0.22 44 0 0.04
11 1 1.19 28 0 0.20 45 0 0.03
12 1 1.07 29 1 0.18 46 0 0.03
13 0 0.97 30 0 0.16
14 0 0.87 31 1 0.14
15 1 0.78 32 0 0.13
16 1 0.70 33 0 0.12
E
n
foi calculado pela frmula E
n
= (0.9)
n
(0.1)N, com N = 38.
De maneira a aplicar o teste do devemos combinar as categorias de modo que E
i
>
5, para cada nova categoria. Assim obtemos:
i n O
i
E
i
1 0 1 4 7.22
2 2 3 11 5.85
3 4 6 9 6.75
4 7 10 4 6.25
5 11 16 4 5.58
6 17 46 6 6.08
Podemos calcular o
2
.

2
calc
=
(4 7.22)
2
7.22
+
(11 5.85)
2
5.85
+. . . +
(6 6.08)
2
6.08
= 7.98
Para achar o
2
tab
temos = 6 1 = 5 e = 0.05.
Da tabela tiramos
2
tab
= 11.07.
Como
2
calc
menor que o
2
tab
aceitamos a hiptese que a seqncia foi aleatoria-
mente gerada.
2.10 Testes de Aleatoriedade (Independncia) 39
2.10.2 O teste da corrida (Run test)
Uma corrida uma sucesso de eventos similares, precedido e seguido por eventos
diferentes. No nosso caso uma corrida ser uma sucesso de nmeros aleatrios
crescentes ou decrescentes.
O procedimento consiste em contar o nmero total de corridas crescentes e decres-
centes de tamanho n, onde n = 1, 2, 3, ...
O nmero observado de corridas pode ento ser comparado com o nmero espe-
rado de corridas. O valor esperado de corridas de tamanho n, se temos N nmeros
aleatrios, pode ser calculado de:
E
n
=
_

_
2[(n
2
+ 3n + 1)N (n
3
+ 3n
2
n 4)]
(n + 3)!
para n = 1, 2, 3, ..., N 2
2
N!
para n = N 1
A aleatoriedade pode ser determinada pelo teste do
2
.
Exemplo: Vamos aplicar o teste da corrida crescente e decrescente para os 50 nme-
ros aleatrios apresentados a seguir, considerando que os nmeros foram gerados
da esquerda para a direita, por linha:
0.923 0.060 0.497 0.710 0.807
+ + +
0.406 0.852 0.632 0.953 0.903
+ +
0.562 0.526 0.358 0.756 0.195
+
0.478 0.262 0.318 0.720 0.837
+ + + +
0.017 0.513 0.199 0.083 0.335
+ +
0.233 0.035 0.116 0.848 0.432
+ +
0.133 0.451 0.081 0.467 0.249
+ +
0.299 0.575 0.600 0.695 0.380
+ + + +
0.979 0.849 0.999 0.892 0.580
+ +
0.544 0.378 0.872 0.427 0.548
+ +
O 1
o
nmero gerado foi 0,923. O 2
o
foi 0,060, logo houve uma diminuio e colo-
camos o sinal embaixo de 0,060. A seguir foi gerado o nmero 0,497, ou seja
houve uma subida. Colocamos o sinal + embaixo de 0,497. O prximo a ser gerado
foi 0,710. Continuamos subindo e colocamos + embaixo deste ltimo nmero. A
seguir vem 0,807, ou seja subindo ainda e por isso, colocamos + embaixo de 0,807.
40 A gerao de Nmeros Aleatrios
Aparece a seguir o nmero 0,406. Houve uma descida e portanto colocamos em-
baixo de 0,406.
Prosseguimos com este procedimento at o ltimo nmero gerado.
Uma sucesso de sinais +indica uma corrida crescente e uma sucesso de sinais ,
indica uma decrescente.
Como temos 50 nmeros, o tamanho das corridas pode variar de 1 a 49. Os ta-
manhos encontrados (O
n
), assim como os valores esperados (E
n
), calculados das
frmulas acima, esto mostrados na tabela a seguir:
n O
n
E
n
1 23 20.92
2 4 8.93
3 2 2.51
4 3 0.53
5 49 0 0.11
Considerando que N = 50 o clculo de E
2
, por exemplo, :
E
2
=
2[(2
2
+ 3 2 + 1) 50 (2
3
+ 3 2
2
2 4]
(2 + 3)!
= 8.93
Reagrupando os dados de modo que E
i
> 5 para cada categoria, temos:
i n O
i
E
i
1 1 23 20.92
2 2 49 9 12.08
Podemos calcular agora o
2
:

2
calc
=
(23 20.92)
2
20.92
+
(9 12.08)
2
12.08
= 0.99
O
2
tab
para = 1 e = 0.05 igual a 3.841
Como o
2
calc
menor que o
2
tab
, conclumos que os nmeros aleatrios foram ge-
rados aleatoriamente.
2.11 Observaes finais sobre a gerao de nmeros aleatrios 41
2.11 Observaes finais sobre a gerao de nmeros aleat-
rios
Existe uma infinidade de testes estatsticos para testar tanto a aleatoriedade como
a uniformidade. Vimos apenas alguns deles.
O registro importante que se deve fazer que a confiabilidade do gerador de n-
mero aleatrios a condio bsica para se garantir a qualidade estatstica ne-
cessria em um estudo de simulao.
Um gerador, no estatisticamente confivel, pode levar uma simulao a resulta-
dos desastrosos.
Tambm devemos considerar que testes mais rigorosos, quando no se conhece a
qualidade do gerador a ser usado, devem ser feitos.
Um exemplo disto poderia ser a sequncia de nmeros mostrados a seguir:
0.123 0.060 0.497 0.710 0.807
0.406 0.952 0.632 0.953 0.903
0.562 0.526 0.358 0.956 0.195
0.478 0.262 0.318 0.720 0.837
0.917 0.513 0.199 0.083 0.335
0.233 0.035 0.936 0.848 0.432
0.133 0.451 0.081 0.467 0.949
0.299 0.575 0.600 0.695 0.380
0.979 0.912 0.312 0.892 0.580
0.544 0.378 0.872 0.927 0.548
provvel que uma seqencia deste tipo passe em todos os testes que vimos ante-
riormente. No entanto esta seqencia tem um srio desvio: de 7 em 7 nmeros ela
apresenta um nmero maior que 0.900!
42 A gerao de Nmeros Aleatrios
Captulo 3
Alguns modelos elementares de Simulao
A maioria dos problemas estudados atravs de modelos de simulao que acon-
tecem na vida real necessitam do uso de variveis aleatrias no uniformemente
distribudas.
No entanto, como ilustrao, vamos ver 2 exemplos de simulao em que s ne-
cessrio ter um gerador de nmeros aleatrios uniformemente distribudos.
Nos 2 exemplos a seguir a subrotina RAND que aparece nos fluxogramas uma
subrotina genrica podendo ser a RAND1, a RAND2, uma RAND embutida de lin-
guagem, etc...
3.1 Jogo de Dados (Craps Game)
Um jogo popular nos E.Unidos o chamado craps no qual 2 dados so jogados
simultaneamente. Se a soma for 7 ou 11 voc ganha. Se a soma for 2, 3 ou 12 voc
perde. Se der 4, 5, 6, 8, 9 ou 10 voc tem direito a jogar os dados outra vez. Se a
soma for 7 voc perde. Se repetir o que deu na 1
a
jogada voc ganha. Se no, voc
pode jogar os dados outra vez e assim por diante.
Podemos construir um fluxograma mostrando a lgica do jogo:
44 Alguns modelos elementares de Simulao
LER N
SOMA = 0
LAO DE
1 a N
CALL
SUB1
SOMA =
SOMA +
RESULTADO
FIM DO
LAO
IMPRIMIR
SOMA
F I M
INCIO
SUB1
CALL SUB2
X = 7 ou
11?
RESULTADO=1 RETURN
X = 2,3
ou 12?
SIM
NO
RESULTADO=0 RETURN
SIM
NO
K = X
CALL SUB2
X = K ?
NO
RESULTADO=1 RETURN
SIM
X = 7 ? RESULTADO=0 RETURN
SIM
NO
SUB2
X1 = 1 +
INT(6*RAND)
X2 = 1 +
INT(6*RAND)
X1 = X1 +
X2
RETURN
A probabilidade de se ganhar neste jogo de 49,3% obtida da teoria das probabili-
dades.
O programa a seguir a implementao do jogo. Ele permite que a cada execuo
se escolha quantas vezes queremos jogar.
O programa usa a RAND2 como subrotina para gerar nmeros aleatrios.
3.1 Jogo de Dados (Craps Game) 45
{CRAPS GAME}
{$N+}
{ $E+}
Var
ISER, N,PARAM, I ,JOGADA,GUARDA,RESULTADO: Integer ;
U: Double;
SOMA: Real ;
{ $I RAND2. PAS}
{ }
Procedure SUB1 ( Var JOGADA: Integer ) ;
Begin
JOGADA : = TRUNC( ( 1. 0+6. 0RAND2( ISER,PARAM) ) ) +
TRUNC( ( 1. 0+6. 0RAND2( ISER,PARAM) ) ) ;
End;
{ }
PROCEDURE SUB2 ( Var RESULTADO: Integer ) ;
Begin
SUB1(JOGADA) ;
If (JOGADA = 7) or (JOGADA = 11) then
Begin
RESULTADO : = 1;
EXIT;
End;
If (JOGADA = 2) or (JOGADA = 3) or (JOGADA = 12) then
Begin
RESULTADO : = 0;
EXIT;
End;
GUARDA : = JOGADA;
RESULTADO : = 9;
Repeat
SUB1(JOGADA) ;
If JOGADA = 7 then
Begin
RESULTADO : = 0;
EXIT;
End;
If JOGADA = GUARDA then
Begin
RESULTADO : = 1;
EXIT;
End;
Until (RESULTADO = 0) or (RESULTADO = 1) ;
EXIT;
End;
{ }
Begin
PARAM : = 0;
Writeln( Qual a Serie (0 a 21473) ? ) ;
Readln( ISER) ;
U : = RAND2( ISER,PARAM) ;
PARAM : = 1;
Writeln( Quantos Jogos ? ) ;
46 Alguns modelos elementares de Simulao
Readln(N) ;
SOMA : = 0. 0;
For I : = 1 to N do
Begin
SUB2(RESULTADO) ;
SOMA : = SOMA + RESULTADO;
End;
Writeln(SOMA / N) ;
End.
A execuo deste programa 5 vezes, com as sries, escolhidas ao acaso, 1234, 4561,
7893, 8750 e 15700 da RAND2, cada vez com 5.000 jogos, apresentou os seguintes
resultados:
Execuc, o Ganho (%)
1 48,62
2 49,90
3 48,00
4 49,76
5 50,16
Mdia 49,29
3.2 Avaliao de Integrais
Uma aplicao interessante da simulao o clculo de integrais definidas, no
sentido em que um mtodo probabilstico usado para resolver um problema de-
terminstico. Este procedimento chamado de Mtodo de Monte Carlo e no
necessita mais do que um gerador de nmeros aleatrios uniformemente distribu-
dos em [0, 1].
Suponha que se deseja calcular a integral:
I =
_
b
a
f(x)dx
onde f(x) representa uma curva contnua no intervalo a x b. Precisamos
conhecer tambm o valor mximo (F
max
) da funo no intervalo (a, b).
As etapas do mtodo de Monte Carlo so:
1. Gerar um n
o
aleatrio uniformemente distribudo, u
x
, cujo valor est entre a
e b.
2. Calcular f(u
x
).
3. Gerar um 2
o
nmero aleatrio, u
y
, cujo valor est entre 0 e F
max
. Estes 2
nmeros aleatrios (u
x
e u
y
) representam as coordenadas de um ponto no
espao.
4. Comparar u
y
com f(u
x
). Se u
y
no for maior que f(u
x
) ento o ponto (u
x
,
u
y
) cair em cima ou abaixo da curva.
3.2 Avaliao de Integrais 47
5. Repita n vezes as etapas de 1 a 4. Aps isto determine o percentual de pontos
caindo em cima ou abaixo da curva (PERC), ou seja dentro da rea que a
prpria integral.
O valor da integral obtido por:
I = PERC (b a) F
max
O fluxograma a seguir ilustra o procedimento:
INCIO
LER N
K = 0
LAO DE
1 a N
UX=A +
(B-A)*RAND
UY=FMAX *
RAND
UY <=
F(UX) ?
K = K + 1
FIM DO
LAO
SIM
NO
PERC =
K / N
I = PERC *
(B-A)*FMAX
IMPRIMIR I
FIM
Exemplo: Considere a integral abaixo:
_
1
0
_
1 x
2
dx = 0, 785398
1
1 -1 0
F(x)
u
x
u
y
f(u
x
)
A rea da parte do grfico abaixo da curva, no 1
o
quadrante, o valor da integral
procurada.
48 Alguns modelos elementares de Simulao
Neste exemplo a 0 e b 1. O F
max
1.
A rea do retngulo igual a (b a) F
max
, ou seja 1 1 = 1. A integral, ou
seja, a rea abaixo da curva igual a (b a) F
max
% de pontos que caem em
cima ou abaixo da curva.
O programa abaixo implementa o mtodo de Monte Carlo para clculo de integrais
definidas.
{CALCULO DE INTEGRAIS}
{$N+}
{ $E+}
VAR
ISER, N,PARAM, I : Integer ;
U: Double;
X,FMAX, LIMINF, LIMSUP,UX,UY, FUX, IDENTRO, INTEGRAL: Real ;
{ $I RAND2. PAS}
{ }
Function VFUNCAO (X: Real ) : Real ;
Begin
VFUNCAO : = SQRT(1XX) ;
End;
{ }
Begin
PARAM : = 0;
Writeln( Qual a Serie (0 a 21473) ? ) ;
Readln( ISER) ;
U : = RAND2( ISER,PARAM) ;
PARAM : = 1;
Writeln( Quantos Numeros ? ) ;
Readln(N) ;
Writeln( Qual o valor de FMAX ? ) ;
Readln(FMAX) ;
Writeln( Qual o LIMITE INFERIOR ? ) ;
Readln(LIMINF) ;
Writeln( Qual o LIMITE SUPERIOR ? ) ;
Readln(LIMSUP) ;
If (LIMINF >= LIMSUP) Then
Begin
Writeln( ERRO NOS LIMITES ) ;
Exit ;
End;
IDENTRO : = 0;
For I : = 1 to N do
Begin
U : = RAND2( ISER,PARAM) ;
UX : = LIMINF + (U (LIMSUP LIMINF) ) ;
U : = RAND2( ISER,PARAM) ;
UY : = U FMAX;
FUX : = VFUNCAO(UX) ;
If UY <= FUX then IDENTRO : = IDENTRO +1;
End;
INTEGRAL : = (IDENTRO / N) (LIMSUPLIMINF) FMAX;
Writeln( VALOR DA INTEGRAL = ,INTEGRAL) ;
End.
3.2 Avaliao de Integrais 49
O programa utiliza a RAND2 para a gerao dos nmeros aleatrios, enquanto que
na rotina VFUNCAO colocada a funo a ser integrada.
Executando-se este programa, com a srie 1234 da RAND2, e escolhendo-se 10.000
nmeros o valor da integral dado pelo programa como igual a 0.7828.
Como ilustrao do mtodo, a tabela abaixo mostra os primeiros 6 passos do pro-
cesso:
N u
x
f(u
x
) u
y
u
y
f(u
x
) ? k
1 0.7054 0.7086 0.5334 SIM 1
2 0.5795 0.8149 0.2895 SIM 2
3 0.3019 0.9533 0.7747 SIM 3
4 0.0140 0.9999 0.7607 SIM 4
5 0.8144 0.5801 0.7090 NO 4
6 0.0453 0.9989 0.4140 SIM 5
Deve ter ficado claro que o mtodo de Monte Carlo no uma maneira eficiente de
se resolver integrais. Existem, no entanto, um conjunto de integrais extremamente
complexas que podem ser obtidas pelo mtodo.
A integral usada no ltimo exemplo apropriada para se reforar a regra b-
sica do uso da simulao: Problemas que tem soluo analtica nunca devem
ser resolvidos por meio da simulao. Solues analticas daro sempre respos-
tas mais exatas que as respostas fornecidas pela simulao.
Quando, no entanto, no se tem soluo analtica, a simulao pode dar respos-
tas bastante aproximadas.
50 Alguns modelos elementares de Simulao
Captulo 4
Variveis aleatrias no uniformes
Na maioria dos problemas do mundo real, as variveis aleatrias seguem distribui-
es diferentes da uniforme tal como a de Poisson, a Exponencial, a Normal, etc...
Neste captulo veremos como nmeros aleatrios uniformemente distribudos em
[0, 1] podem ser usados para gerar variveis aleatrias, no uniformes, como as
citadas acima.
4.1 O Mtodo da Transformao Inversa
Suponha que ns temos uma funo de densidade probabilstica f(x) e ns deseja-
mos gerar uma varivel aleatria que siga esta funo de densidade probabilstica.
O mtodo da Transformao Inversa oferece uma maneira simples de resolver o
problema.
O mtodo est baseado no fato de que a distribuio acumulada, F(x), tem valor
entre 0 e 1 ou seja, no mesmo intervalo de um n
o
aleatrio, U, gerado por um gera-
dor bsico. Assim sendo, tendo U, consideramos este valor como sendo um valor de
F(x). Para achar o valor de x, basta resolver a equao, ou seja achar a inversa de
F(x).
A figura a seguir mostra, graficamente, o princpio no qual o mtodo est baseado:
F(x)
x
x
0
0
y
0
1
52 Variveis aleatrias no uniformes
Isto , se y = F(x), ento podemos escrever:
x = F
1
(y)
Esta expresso permite determinar um valor particular de x que corresponde a um
dado valor de y. Vamos nos referir a estes valores como x
0
e y
0
. Estes valores esto
ilustrados na figura acima.
Substituindo y pelo nosso nmero uniformemente distribudo em [0, 1], U, temos:
x = F
1
(U)
Exemplo: Aplique o mtodo da transformao inversa para a seguinte funo de
densidade probabilstica:
f(x) =
x
4
em 1 x 3
f(x) = 0 fora do intervalo acima
Use o mtodo para gerar 6 valores sucessivos para X, dados os seguintes valores
aleatrios uniformemente distribudos em [0, 1]: 0.35, 0.97, 0.22, 0.15, 0.60, 0.43.
Inicialmente determinamos a funo cumulativa:
y = F(x) =
_
x
1
_
x
4
_
dx =
_
x
2
8
_
x
1
=
x
2
8

1
8
=
(x
2
1)
8
para 1 x 3.
Resolvendo para x obtemos:
x =

8y + 1
que pode ser escrita como:
x
i
=

8U
i
+ 1
onde U
i
uma varivel aleatria uniformemente distribuda em [0, 1].
Quando U
i
= 0.35 ns podemos obter o valor correspondente para x
i
como:
x
i
=
_
(8) (0.350) + 1 = 1.95
Procedendo de forma idntica, podemos obter os demais valores:
i U
i
x
i
1 0.35 1.95
2 0.97 2.96
3 0.22 1.66
4 0.15 1.48
5 0.60 2.41
6 0.43 2.11
O valor esperado e o desvio padro podem ser calculados de:
E(x) =
_
+

xf(x)dx =
_
3
1
x
x
4
dx =
_
3
1
x
2
4
dx =
_
x
3
12
_
3
1
= 2.167

2
=
_
+

x
2
f(x) E(x)
2
=
_
3
1
x
2
x
4
2.167
2
=
_
x
4
16
_
3
1
2.167
2
= 0.30555
=

0.30555 = 0.552
4.1 O Mtodo da Transformao Inversa 53
Veremos a seguir como aplicar o mtodo da transformao inversa para vrias dis-
tribuies bem conhecidas.
Entretanto bom esclarecer que este mtodo no pode ser aplicado para todas as
distribuies. Existem algumas, como a normal, cuja funo de distribuio proba-
bilstica no pode ser integrada analticamente e, logicamente, no se pode achar
a sua inversa. H casos ainda em que no possvel obter uma equao expl-
cita para x mesmo se tendo uma expresso analtica para a funo cumulativa.
Existem outras tcnicas para estes casos.
4.1.1 Distribuies Empricas
Em muitos problemas reais a probabilidade de que um evento ocorra expressa
em termos de dados empricos agrupados. Vejamos um exemplo.
A seguinte distribuio emprica descreve o valor possvel do custo para um novo
produto a ser desenvolvido em determinada indstria:
Custo de Produc, o Probabilidade
(em $ por unidade) de ocorrncia
60 70 0.20
70 80 0.35
80 90 0.30
90 100 0.15
Gerar 6 valores aleatrios para o custo de produo usando os seguintes nmeros
aleatrios uniformemente distribudos (U): 0.35, 0.97, 0.22, 0.15, 0.60, 0.43.
Chamando de A
j
o limite inferior e B
j
, o limite superior, podemos construir a
tabela da distribuio acumulada (Y
j
):
j A
j
B
j
Y
j
1 $60 $70 0.20
2 70 80 0.55
3 80 90 0.85
4 90 100 1.00
Cada valor de j indica a faixa da distribuio acumulada em que o valor de U se
enquadra. Assim j = 1 compreende os valores de 0 a 0,20. Para j = 2 temos a
faixa de maior que 0,20 a 0,55 e assim por diante.
Para obtermos uma frmula de gerao dos valores da distribuio vejamos o grfico
a seguir, onde queremos obter um valor x, a partir de um determinado valor U. O
valor U se encontra na 2
a
faixa da distribuio acumulada:
54 Variveis aleatrias no uniformes
1.00
0.85
(0.55)
(0.20)
0
U
20 40 60
B
2 100
A
2
x
90
y
1
y
2
Usando interpolao linear e semelhana de tringulos, temos:
x A
2
B
2
A
2
=
U Y
1
Y
2
Y
1
Podemos tirar ento o valor de X:
x = A
2
+
_
U Y
1
Y
2
Y
1
_
[B
2
A
2
] ou generalizando,
x = A
j
+
_
U Y
j1
Y
j
Y
j1
_
[B
j
A
j
]
O nosso 1
o
nmero aleatrio, 0.35, cai na 2
a
faixa (j = 2), porque maior que 0.20
e menor que 0.55. Assim temos:
x = A
2
+
_
U Y
1
Y
2
Y
1
_
[B
2
A
2
] = 70 +
0.35 0.20
0.55 0.20
[80 70] = 74.29
De maneira semelhante podemos calcular os outros nmeros, obtendo:
j U
i
X
i
1 0.35 $74.29
2 0.97 98.00
3 0.22 70.57
4 0.15 67.50
5 0.60 81.67
6 0.43 76.57
Poderamos usar interpolao polinomial em vez de linear. Teramos melhor preci-
so na obteno dos valores de x.
4.1 O Mtodo da Transformao Inversa 55
4.1.2 A Distribuio Exponencial
Muitos problemas de simulao necessitam usar a distribuio exponencial. Isto
verdadeiro nos problemas que envolvem chegadas e partidas (filas), como a si-
mulao de uma agncia bancria, da sada (caixas) de um supermercado, de um
aeroporto, etc...
A funo de densidade probabilstica da exponencial igual a:
f(x) = e
x
onde uma constante conhecida e a mdia () igual a
1

.
A funo de distribuio acumulada dada por:
F(x) = 1 e
x
De modo a se fazer uso do mtodo da transformao inversa devemos resolver para
x. Assim temos:
x =
1

ln[1 F(x)]
Como a funo acumulada, F(x), uniformemente distribuda em [0, 1], a quanti-
dade 1 F(x) tambm ser uniformemente distribuda em [0, 1]. Assim podemos
escrever
x =
_
1

_
ln(U)
onde x a varivel aleatria exponencialmente distribuda e U um nmero alea-
trio uniformemente distribudo em [0, 1], gerado por um gerador bsico.
Suponha agora que x deve ser maior ou igual a um determinado valor positivo, x
0
,
isto 0 < x
0
< x. A equao acima fica:
x = x
0

_
1

_
ln(U)
Tambm a relao entre e torna-se:
=
1
( x
0
)
Exemplo: Gerar 6 variveis exponencialmente distribudas maiores que 2 e com
mdia igual a 6, usando os seguintes nmeros uniformemente distribudos em
[0, 1]: 0.35, 0.97, 0.22, 0.15, 0.60, 0.43. Temos ento: x
0
= 2 e = 6.
Calculando o valor de :
=
1
(6 2)
= 0.25
Podemos ento calcular as variveis da distribuio exponencial:
56 Variveis aleatrias no uniformes
X
1
= 2
_
1
0.25
_
ln(0.35) = 6.20
X
2
= 2
_
1
0.25
_
ln(0.97) = 2.12
Os demais valores encontrados so:
i U
i
X
i
1 0.35 6.20
2 0.97 2.12
3 0.22 8.06
4 0.15 9.59
5 0.60 4.04
6 0.43 5.38
O programa a seguir, escrito em Pascal, implementa a gerao de nmeros aleat-
rios que seguem a distribuio exponencial.
O programa permite que se informe quantos nmeros queremos gerar, o limite in-
ferior da distribuio e a mdia.
Como sada ele imprime os 5 primeiros nmeros gerados e a mdia de todos os n-
meros gerados.
O programa usa a RAND2 como o gerador bsico de nmeros aleatrios.
{EXPONENCIAL}
{$N+}
{ $E+}
Var
ISER, N,PARAM, I ,NUMIMP: Integer ;
U,SOMA: Double;
LIMINF,ALFA,MEDIA: Real ;
{ $I RAND2. PAS}
{ }
Function EXPONENCIAL (ALFA, LIMINF: Real ; U: Double ) : Double;
Begin
EXPONENCIAL : = LIMINF ( 1/ALFA) LN(U) ;
End;
{ }
Begin
PARAM : = 0;
Writeln( Qual a Serie (0 a 21473) ? ) ;
Readln( ISER) ;
U : = RAND2( ISER,PARAM) ;
PARAM : = 1;
Writeln( Quantos Numeros ? ) ;
Readln(N) ;
Writeln( Qual o LIMITE INFERIOR ? ) ;
Readln(LIMINF) ;
Writeln( Qual a Media ? ) ;
Readln(MEDIA) ;
ALFA : = 1. 0 / (MEDIA LIMINF) ;
SOMA : = 0. 0;
4.1 O Mtodo da Transformao Inversa 57
NUMIMP : = 0;
For I : = 1 to N do
Begin
U : = RAND2( ISER,PARAM) ;
U : = EXPONENCIAL(ALFA, LIMINF,U) ;
NUMIMP : = NUMIMP + 1;
If NUMIMP < 6 then Writeln(U) ;
SOMA : = SOMA + U;
End;
Writeln( MEDIA = ,SOMA / N) ;
End.
Emuma execuo, usando-se a srie 1234 da RAND2, emque foramgerados 10.000
nmeros com limite inferior igual a 2 e mdia igual a 6, os seguintes resultados
foram apresentados:
Primeiros 5 nmeros gerados: 3.27141; 3.841; 7.65564; 3.50536 e 5.19165.
Mdia dos 10.000 nmeros gerados: 5.97737.
4.1.3 A Distribuio Geomtrica
Vamos agora considerar uma sequncia de experincias independentes, onde o re-
sultado de cada experincia um sucesso ou um insucesso. Suponha que p a
probabilidade de sucesso de cada experincia (0 < p < 1), e q = (1 p) a
probabilidade de insucesso. A probabilidade de x insucessos at um sucesso dada
por:
f(x) = pq
x
onde x deve ser um inteiro no negativo, isto x = 1, 2, ...
A equao acima representa a densidade probabilstica para a distribuio geom-
trica, cuja mdia dada por:
=
q
p
e cuja varincia dada por:

2
=
q
p
2
=

p
A distribuio cumulativa correspondente pode ser expressa por:
F(x) = f(0) +f(1) +f(2) +. . . +f(x)
= p +pq +pq
2
+. . . +pq
x
=
x

k=0
pq
k
58 Variveis aleatrias no uniformes
Observe que F(0) = p e p F(x) 1.
De maneira a se usar o mtodo da transformao inversa ns devemos expressar a
distribuio cumulativa de uma forma um pouco diferente.
Para fazer isto observamos que:
Prob(X > 0) = 1 F(0) = 1 p = q
Prob(X > 1) = 1 F(0) F(1) = 1 p pq = 1 p p(1 p) = 1 p p +p
2
= 1 2p +p
2
= (1 p)
2
= q
2
.
.
.
Prob(X > x) = 1 F(x) = q
x+1
onde X uma varivel aleatria geomtricamente distribuda. Assim ns podemos
escrever:
1 F(x)
q
= q
x
Ns sabemos que F(x) uniformemente distribuda dentro do intervalo [p, 1].
A diferena 1 F(x) ser uniformemente distribuda em [1 p, 0] ou [0, 1 p] ou
[0, q].
Logo a funo
[1 F(x)]
q
ser uniformemente distribuda sobre o intervalo [0,1].
Como [1 F(x)] = q
x+1
temos que
q
x+1
q
, ou seja q
x
uniformemente distribuda
em [0, 1]. Logo podemos escrever:
U = q
x
onde U uma varivel aleatria uniformemente distribuda no intervalo [0, 1]. Re-
solvendo para x obtemos:
x = Inteiro
_
ln U
ln q
_
onde x ser o valor da distribuio geomtrica.
Exemplo: Gerar 6 variveis aleatrias, geomtricamente distribudas, para um
processo cuja probabilidade de sucesso de 30%. Use os seguintes nmeros aleat-
rios uniformemente distribudos em [0, 1]: 0.35, 0.97, 0.22, 0.15, 0.60, 0.43.
Como p = 0.3 ns sabemos que q = 1 p = 0.7. Logo podemos usar:
X
1
= Inteiro(ln 0.35/ ln 0.70) = 2
X
2
= Inteiro(ln 0.97/ ln 0.70) = 0
4.1 O Mtodo da Transformao Inversa 59
Os 6 nmeros gerados so:
U
i
X
i
0.35 2
0.97 0
0.22 4
0.15 5
0.60 1
0.43 2
O programa a seguir, escrito em Pascal, implementa a gerao de nmeros alea-
trios que seguem a distribuio geomtrica.
O programa permite que se informe quantos nmeros queremos gerar e a probabi-
lidade de sucesso.
Como sada ele imprime os 5 primeiros nmeros gerados,a mdia e o desvio padro,
calculado pela frmula
_
(x
2
i
)/n x
2
, dos nmeros gerados.
O programa usa a RAND2 como o gerador bsico de nmeros aleatrios.
{GEOMETRICA}
{$N+}
{ $E+}
Var
ISER, N,PARAM, I ,NUMIMP, J : Integer ;
U,SOMA: Double;
SUCESSO, INSUCESSO,MEDIA, DESVIO: Real ;
{ $I RAND2. PAS}
{ }
Function GEOMETRICA (INSUCESSO: Real ; U: Double ) : Integer ;
Begin
GEOMETRICA : = TRUNC(LN(U) / LN(INSUCESSO) ) ;
End;
{ }
Begin
PARAM : = 0;
Writeln( Qual a Serie (0 a 21473) ? ) ;
Readln( ISER) ;
U : = RAND2( ISER,PARAM) ;
PARAM : = 1;
Writeln( Quantos Numeros ? ) ;
Readln(N) ;
Writeln( Qual a probabilidade de sucesso ? ) ;
Readln(SUCESSO) ;
INSUCESSO : = 1 SUCESSO;
SOMA : = 0. 0;
DESVIO : = 0. 0;
NUMIMP : = 0;
For I : = 1 to N do
Begin
U : = RAND2( ISER,PARAM) ;
J : = GEOMETRICA(INSUCESSO,U) ;
NUMIMP : = NUMIMP + 1;
60 Variveis aleatrias no uniformes
If NUMIMP < 6 then Writeln( J ) ;
SOMA : = SOMA + J ;
DESVIO : = DESVIO + J J ;
End;
Writeln( MEDIA = ,SOMA / N) ;
Writeln( DESVIO PADRAO = ,SQRT( ( DESVIO/N)(SOMA/N) (SOMA/N) ) ) ;
End.
Emuma execuo, usando-se a srie 1234 da RAND2, emque foramgerados 10.000
nmeros com probabilidade de sucesso igual a 0.30, ou seja com mdia terica igual
a
q
p
=
1 0.30
0.30
= 2.3333 e =
_

p
=

2, 3333
0, 30
= 2, 7886, os seguintes
resultados foram obtidos:
Primeiros 5 nmeros gerados: 0, 1, 3, 1 e 2.
A mdia dos 10.000 nmeros gerados foi igual a 2,3201.
O desvio padro obtido foi igual a 2,73416.
4.1.4 A Distribuio Triangular
A distribuio Triangular tem um uso bastante difundido em Simulao, principal-
mente quando os dados disponveis so poucos ou mesmo inexistentes.
Sua forma permite que dados no conclusivos sejam a ela adaptados, e seus limites,
ou seja A (limite inferior), C (moda) e B (limite superior) sejam interpretados como
os parmetros mais pessimista (A), mais provvel (C) e mais otimista (B) de uma
determinada varivel, como pode ser visto na figura a seguir.
f(x)
A
B
C
x
Sua funo de densidade dada por:
f(x) =
2(x A)
(C A)(B A)
para A x C
=
2(B x)
(B C)(B A)
para C x B
4.1 O Mtodo da Transformao Inversa 61
Podemos usar o Mtodo da Transformao Inversa mas a descontinuidade da fun-
o faz com que seja necessrio desenvolver 2 geradores separados: um para x C
e um para x C. Inicialmente vamos desenvolver um para x C.
A funo de distribuio acumulada F(x) igual a:
F(x) =
_
x
A
2(x A)
(C A)(B A)
dx
=
x
2
2Ax +A
2
(C A)(B A)
Como F(x) e U (gerado por uma RAND), variam em [0 , 1], podemos escrever:
U =
x
2
2Ax +A
2
(C A)(B A)
Fazendo as simplificaes necessrias, chegamos a :
x = A+
_
U(C A)(B A)
Esta frmula pode ser usada se U <
(C A)
(B A)
, pois a razo
(C A)
(B A)
proporcio-
nal a rea sob o tringulo de x = A at x = C.
Para x C temos:
F(x) = U =
_
x
C
2(B x)
(B C)(B A)
dx
U =
x
2
+ 2Bx B
2
(B C)(B A)
+ 1
Operando, para obter o valor de x, obtemos:
x = B
_
(1 U)(B C)(B A)
Esta frmula deve ser usada quando U
(C A)
(B A)
.
A media e o desvio padro da Distribuio Triangular so:
x =
A+B +C
3
=

A
2
+B
2
+C
2
AB AC BC
18
62 Variveis aleatrias no uniformes
Exemplo: Gerar 3 variveis aleatrias seguindo a Distribuio Triangular com li-
mite inferior (A) igual a 2, moda (C) igual a 4 e limite superior (B) igual a 8. Use
os seguintes nmeros aleatrios uniformemente distribudos em [0, 1]: 0.35, 0.97,
0.22.
A frmula a ser usada depende se o valor de U maior ou menor que
(C A)
(B A)
ou
seja
(4 2)
(8 2)
= 0.3333. Assim para o 1
o
U, 0.35 (maior que 0.33) temos:
X
1
= 8
_
(1 0.35)(8 4)(8 2) = 4.050
Para 0.97 (maior) temos:
X
2
= 8
_
(1 0.97)(8 4)(8 2) = 7.151
Para 0.22 (menor) temos:
X
3
= 2 +
_
0.22(4 2)(8 2) = 3.624
O programa a seguir, escrito em Pascal, implementa a gerao de nmeros aleat-
rios que seguem a distribuio triangular.
O programa permite que se informe quantos nmeros queremos gerar e os 3 par-
metros (A,B e C) da distribuio.
Como sada ele imprime os 5 primeiros nmeros gerados, a mdia e o desvio padro
dos nmeros gerados.
O programa usa a RAND2 como o gerador bsico de nmeros aleatrios.
{TRIANGULAR}
{$N+}
{ $E+}
Var
ISER, N,PARAM, I ,NUMIMP: Integer ;
U,SOMA: Double;
A, B, C,MEDIA, DESVIO, T: Real ;
{ $I RAND2. PAS}
{ }
Function TRIANGULAR (A, B, C : Real ;U : Double ) : Real ;
Begin
If (U < ( ( CA) / ( BA) ) ) then
TRIANGULAR : = A + Sqrt (U(CA) ( BA) )
Else TRIANGULAR : = B Sqrt ((1U) ( BC) ( BA) ) ;
End;
{ }
BEGIN
PARAM : = 0;
Writeln( Qual a Serie (0 a 21473) ? ) ;
Readln( ISER) ;
U : = RAND2( ISER,PARAM) ;
PARAM : = 1;
Writeln( Quantos Numeros ? ) ;
Readln(N) ;
Writeln( Qual o limite inferior (A) ? ) ;
Readln(A) ;
Writeln( Qual o limite superior (B) ? ) ;
Readln(B) ;
Writeln( Qual a moda (C) ? ) ;
Readln(C) ;
4.1 O Mtodo da Transformao Inversa 63
SOMA : = 0. 0;
DESVIO : = 0. 0;
NUMIMP : = 0;
For I : = 1 to N do
Begin
U : = RAND2( ISER,PARAM) ;
T : = TRIANGULAR(A, B, C,U) ;
NUMIMP : = NUMIMP + 1;
If NUMIMP < 6 then Writeln( T) ;
SOMA : = SOMA + T;
DESVIO : = DESVIO + T T;
End;
Writeln( MEDIA = ,SOMA / N) ;
Writeln( DESVIO PADRAO = ,SQRT( ( DESVIO/N)(SOMA/N) (SOMA/N) ) ) ;
END.
Emuma execuo, usando-se a srie 1234 da RAND2, emque foramgerados 10.000
nmeros com os parmetros A = 2, B = 8 e C = 4 da triangular, os seguintes
resultados foram obtidos:
Primeiros 5 nmeros gerados: 5.4436, 5.0246, 3.7082, 5.2564 e 4.3677.
A mdia dos 10.000 nmeros gerados foi igual a 4,66286. A mdia terica igual a
4,66666.
O desvio padro obtido foi igual a 1,239. O desvio padro terico igual a 1,247.
4.1.5 A Distribuio de Weibull
A Distribuio de Weibull tem larga aplicao na rea industrial pois inmeros re-
sultados, principalmente sobre a de vida til de um componente, tem mostrado que
variveis que medem este tipo de resultado se ajustam muito bem a esta distribui-
o terica.
Ela tem 2 parmetros: que reflete o tamanho da unidade na qual a varivel ale-
atria x medida e que d a forma (shape) da distribuio.
Sua funo de densidade acumulada F(x) igual a:
F(x) = 1 e

para x, , > 0
Sua mdia e desvio padro so:
x =
_
1

+ 1
_
=

2
_

_
2

+ 1
_

_
1

+ 1
__
2
_
Podemos usar a transformao inversa para gerar variveis aleatrias seguindo a
Distribuio de Weibull. Temos ento:
U = F(x) = 1 e

64 Variveis aleatrias no uniformes


Resolvendo para x em funo de U, chegamos a :
x = (ln U)
1/
Exemplo: Gerar 6 variveis aleatrias seguindo a Distribuio de Weibull com
= 4 e = 1. Use os seguintes nmeros aleatrios uniformemente distribu-
dos em [0, 1]: 0.35, 0.97, 0.22, 0.15, 0.60, 0.43.
Temos ento:
X
1
= 4 (ln 0.35)
1/1
= 4.1993
X
2
= 4 (ln 0.97)
1/1
= 0.1218
X
3
= 4 (ln 0.22)
1/1
= 6.0565
X
4
= 4 (ln 0.15)
1/1
= 7.5885
X
5
= 4 (ln 0.60)
1/1
= 2.0433
X
6
= 4 (ln 0.43)
1/1
= 3.3759
O programa a seguir, escrito em Pascal, implementa a gerao de nmeros aleat-
rios que seguem a Distribuio de Weibull.
O programa permite que se informe quantos nmeros queremos gerar e os 2 par-
metros ( e ) da distribuio.
Como sada, ele imprime os 5 primeiros nmeros gerados, a mdia e o desvio pa-
dro dos nmeros gerados.
O programa usa a RAND2 como o gerador bsico de nmeros aleatrios.
{WEIBULL}
{$N+}
{ $E+}
Var
ISER, N,PARAM, I ,NUMIMP: Integer ;
U,SOMA: Double;
ALFA, BETA,MEDIA, DESVIO: Real ;
{ $I RAND2. PAS}
{ }
Function WEIBULL (ALFA, BETA: Real ;U: Double ) : Real ;
Begin
WEIBULL : = ALFA EXP( ( 1 / BETA) LN(LN(U) ) ) ;
End;
{ }
Begin
PARAM : = 0;
Writeln( Qual a Serie (0 a 21473) ? ) ;
Readln( ISER) ;
U : = RAND2( ISER,PARAM) ;
PARAM : = 1;
Writeln( Quantos Numeros ? ) ;
Readln(N) ;
Writeln( Qual o valor de Alfa ? ) ;
Readln(ALFA) ;
Writeln( Qual o valor de Beta ? ) ;
Readln(BETA) ;
SOMA : = 0. 0;
NUMIMP : = 0;
DESVIO : = 0. 0;
4.2 Simulao Direta 65
For I : = 1 to N do
Begin
U : = RAND2( ISER,PARAM) ;
U : = WEIBULL(ALFA, BETA,U) ;
SOMA : = SOMA + U;
DESVIO : = DESVIO + U U;
NUMIMP : = NUMIMP + 1;
If NUMIMP < 6 then Writeln(U) ;
End;
Writeln( MEDIA = ,SOMA / N) ;
Writeln( DESVIO PADRAO = ,SQRT( ( DESVIO/N)(SOMA/N) (SOMA/N) ) ) ;
End.
Emuma execuo, usando-se a srie 1234 da RAND2, emque foramgerados 10.000
nmeros com os parmetros = 4 e = 1 da Weibull, os seguintes resultados
foram obtidos:
Primeiros 5 nmeros gerados: 1.2714, 1.8409, 5.6556, 1.5053 e 3.1916.
A mdia dos 10.000 nmeros gerados foi igual a 3,977. A mdia terica igual a 4.
O desvio padro obtido foi igual a 3,9212. O desvio padro terico igual a 4.
4.2 Simulao Direta
O mtodo da Transformao Inversa s pode ser usado se uma expresso analtica
puder ser obtida para a funo de distribuio acumulada e ela possa ser resolvida
explicitamente para x. Existem muitas situaes onde isto no possvel, como
para a distribuio normal, por exemplo. Uma tcnica alternativa para estes casos
o uso da simulao direta do processo sob considerao.
4.2.1 A distribuio de Poisson
A distribuio de Poisson est intimamente relacionada com a distribuio expo-
nencial e usada em muitos problemas de simulao que envolvem chegadas e
partidas. Em particular, se o tempo entre sucessivas chegadas (ou partidas) expo-
nencialmente distribudo, ento o nmero de eventos que ocorrem em um intervalo
de tempo finito t ser distribudo de acordo com uma distribuio de Poisson.
Suponha que as marcaes (x) na linha do tempo mostrada abaixo, sejam os ins-
tantes da chegada de clientes em um posto bancrio:
tempo
x x x x I I
I I I I I
E
1
E
3
E
2
E
4
t
0
Seja E
i
uma varivel aleatria exponencialmente distribuda com mdia 1/t, ou
seja o intervalo entre as chegadas.
66 Variveis aleatrias no uniformes
Fazendo S
k
=
k

i=1
E
i
, ento para o intervalo t, temos:
S
k
t < s
k+1
, onde k a varivel Poisson, com mdia t, ou seja o nmero de
chegadas no intervalo t (k = 3 no exemplo grfico acima).
J vimos (pgina 55) que podemos gerar variveis exponencialmente (E
i
) atravs
da relao:
E
i
=
1

ln U
i
Logo a varivel poisson o menor valor de k que garante que:
t
k

i=1
E
i
ou
t
k

i=1

ln U
i
que pode ser escrita como:
t
k

i=1
ln U
i
ou
t ln
k

i=1
U
i
Fazendo t = 1 e exponenciando ambos os lados chegamos a:
k

i=1
U
i
e

Assim sendo, a varivel poisson o menor valor de k que garante a relao acima
ou (k 1) quando na execuo do produtrio, acontece:
k

i=1
U
i
> e

A figura a seguir mostra o fluxo do procedimento:


4.2 Simulao Direta 67
POISSON
F = e
-lambda
P = 1
K = 1
Gerar U
i
P= P * U
i
P < F ?
POISSON=K - 1
No
Sim
K = K + 1
Exerccio: Gerar 5 variveis aleatrias governadas pela distribuio de Poisson
com mdia () = 1.5. Faa os clculos usando o seguinte conjunto de nmeros
aleatrios uniformemente distribudos: 0.35, 0.97, 0.22, 0.15, 0.60, 0.43, 0.79, 0.52,
0.81, 0.65, 0.20, 0.57, 0.10.
Como = 1.5 temos e

= 0.223. De maneira a obter a primeira varivel aleat-


ria, 3 nmeros aleatrios uniformemente distribudos so necessrios como pode-
mos ver a seguir:
(0.35)(0.97) = 0.340 > 0.223
(0.35)(0.97)(0.22) = 0.075 < 0.223
Logo X
1
= (3 1) = 2.
De forma semelhante obtemos: X
2
= 0 pois 0.15 < 0.223
X
3
= 2 pois (0.60)(0.43)(0.79) = 0.204 < 0.223
X
4
= 3 pois (0.52)(0.81)(0.65)(0.20) = 0.055 < 0.223
X
5
= 1 pois (0.57)(0.10) = 0.057 < 0.223
O programa a seguir, escrito em Pascal, implementa a gerao de nmeros alet-
rios que seguem a distribuio de Poisson.
O programa permite que se informe quantos nmeros queremos gerar e o valor de
.
Como sada ele imprime os 5 primeiros nmeros gerados e a mdia de todos os n-
meros gerados.
O programa usa a RAND2 como o gerador bsico de nmeros aleatrios.
68 Variveis aleatrias no uniformes
{POISSON}
{$N+}
{ $E+}
Var
ISER, N,PARAM, I ,NUMIMP, J : Integer ;
U,SOMA: Double;
LAMBDA,MEDIA, F: Real ;
{ $I RAND2. PAS}
{ }
Function POISSON ( F: Real ;U: Double; ISER,PARAM: Integer ) : Integer ;
Var
VMULT : Real ;
NUMPOISSON : Integer ;
Begin
NUMPOISSON : = 0;
VMULT : = 1. 0;
While (VMULT > F) do
Begin
U : = RAND2( ISER,PARAM) ;
VMULT : = VMULT U;
NUMPOISSON : = NUMPOISSON + 1;
End;
POISSON : = NUMPOISSON 1;
End;
{ }
Begin
PARAM : = 0;
Writeln( Qual a Serie (0 a 21473) ? ) ;
Readln( ISER) ;
U : = RAND2( ISER,PARAM) ;
PARAM : = 1;
Writeln( Quantos Numeros ? ) ;
Readln(N) ;
Writeln( Qual o valor de Lambda ? ) ;
Readln(LAMBDA) ;
F : = EXP(LAMBDA) ;
SOMA : = 0. 0;
NUMIMP : = 0;
For I : = 1 to N do
Begin
J : = POISSON( F, U, ISER,PARAM) ;
SOMA : = SOMA + J ;
NUMIMP : = NUMIMP + 1;
If NUMIMP < 6 then Writeln( J ) ;
End;
Writeln( MEDIA = ,SOMA / N) ;
End.
Emuma execuo, usando-se a srie 1234 da RAND2, emque foramgerados 10.000
nmeros com = 1.5, os seguintes resultados foram obtidos:
Primeiros 5 nmeros gerados: 2, 2, 0, 3 e 1.
A mdia () dos 10.000 nmeros gerados foi igual a 1.5074.
4.2 Simulao Direta 69
4.2.2 A Distribuio Gamma
Vamos ver o uso da Simulao Direta para a Distribuio Gamma, cuja densidade
probabilstica dada por:
f(x) =

x
(1)
e
x
( 1)!
onde uma constante positiva e uma constante inteira positiva. Pode ser
mostrado que a mdia e a varincia para a distribuio so:
=

2
=

2
=

Pode-se mostrar ainda que a varivel x pode ser interpretada como a soma de
variveis aleatrias exponencialmente distribudas, cada uma tendo um valor es-
perado de
1

. Assim,
x = x
1
+x
2
+. . . +x

onde
f(x
i
) = e
x
i
A funo de densidade probabilstica para a distribuio gamma no pode ser inte-
grada analticamente e consequentemente o mtodo da transformao inversa no
pode ser usado. Ns podemos, entretanto, simular o processo gamma diretamente,
somando variveis aleatrias exponencialmente distribudas. Assim podemos es-
crever:
X =
_
1

i=1
ln U
i
onde U
i
uma varivel aleatria uniformemente distribuda em [0, 1].
A expresso pode ser escrita de uma forma mais conveniente como:
X =
_
1

_
ln

i=1
U
i
desde que o logartimo de um produto a soma dos logartimos dos fatores indivi-
duais.
Com a equao acima podemos construir a rotina bsica para a gerao de vari-
veis seguindo a distribuio Gamma:
70 Variveis aleatrias no uniformes
INCIO
P = 1
Lao de 1 a
Beta
Obter U
i
P= P * U
i
G=-(1/ alfa ) Ln P
Devemos observar que a distribuio gamma reduz-se distribuio exponencial
quando = = 1.
Exemplo: Gerar 5 variveis governadas pela distribuio gamma com = 1 e
= 2. Faa os clculos usando o seguinte conjunto de variveis aleatrias unifor-
memente distribudas em [0, 1]: 0.35, 0.97, 0.22, 0.15, 0.60, 0.43, 0.79, 0.52, 0.81,
0.65.
X
1
= (1/1) ln [(0.35)(0.97)] = 1.08
X
2
= (1/1) ln [(0.22)(0.15)] = 3.41
X
3
= (1/1) ln [(0.60)(0.43)] = 1.35
X
4
= (1/1) ln [(0.79)(0.52)] = 0.89
X
5
= (1/1) ln [(0.81)(0.65)] = 0.64
O programa a seguir, escrito em Pascal, implementa a gerao de nmeros aleat-
rios que seguem a distribuio gamma.
O programa permite que se informe quantos nmeros queremos gerar, e .
Como sada ele imprime os 5 primeiros nmeros gerados e a mdia de todos os n-
meros gerados.
O programa usa a RAND2 como o gerador bsico de nmeros aleatrios.
{GAMMA}
{$N+}
{ $E+}
Var
ISER, N,PARAM, I ,NUMIMP,BETA: Integer ;
U,SOMA: Double;
ALFA,MEDIA: Real ;
{ $I RAND2. PAS}
{ }
Function GAMMA (ALFA: Real ; BETA : Integer ; U: Double; ISER,PARAM: Integer ) : Double;
Var
NUMGAMMA: Double;
4.2 Simulao Direta 71
J : Integer ;
Begin
NUMGAMMA : = 1. 0;
For J : = 1 to BETA do
Begin
U : = RAND2( ISER,PARAM) ;
NUMGAMMA : = NUMGAMMA U;
End;
GAMMA : = ( 1.0 / ALFA) LN(NUMGAMMA) ;
End;
{ }
Begin
PARAM : = 0;
Writeln( Qual a Serie (0 a 21473) ? ) ;
Readln( ISER) ;
U : = RAND2( ISER,PARAM) ;
PARAM : = 1;
Writeln( Quantos Numeros ? ) ;
Readln(N) ;
Writeln( Qual o valor de Alfa ? ) ;
Readln(ALFA) ;
Writeln( Qual o valor de Beta ? ) ;
Readln(BETA) ;
SOMA : = 0. 0;
NUMIMP : = 0;
For I : = 1 to N do
Begin
U : = GAMMA(ALFA, BETA, U, ISER,PARAM) ;
SOMA : = SOMA + U;
NUMIMP : = NUMIMP + 1;
If NUMIMP < 6 then Writeln(U) ;
End;
Writeln( MEDIA = ,SOMA / N) ;
End.
Emuma execuo, usando-se a srie 1234 da RAND2, emque foramgerados 10.000
nmeros com = 1 e = 2 , ou seja com mdia terica igual a =

=
2
1
= 2,
os seguintes resultados foram obtidos:
Primeiros 5 nmeros gerados: 0.7781; 1.79025; 2.83951; 2.58164 e 0.812912.
A mdia dos 10.000 nmeros gerados foi igual a 2.00018.
72 Variveis aleatrias no uniformes
4.2.3 A distribuio Normal
Muitos tipos de eventos aleatrios so governados pela distribuio Normal. Esta
distribuio caracterizada por uma densidade probabilstica dada por:
f(x) =
1

2
e

1
2

2
onde a mdia e o desvio padro. A funo de densidade normal no pode
ser integrada analticamente e desta forma no podemos usar o mtodo da trans-
formao inversa. Podemos, entretanto, uma vez mais, gerar a varivel aleatria
desejada por simulao direta.
Para fazer isto considere o caso especial onde = 1 e Z =
(x )

.
Temos ento:
f(Z) =
1

2
e

Z
2
2
Esta a funo de densidade probabilstica para a distribuio normal padroni-
zada (standard).
Pelo teorema do limite central sabemos que a soma de N variveis aleatrias uni-
formemente distribudas em [0, 1] segue uma distribuio Normal com =
N
2
e
=
_
N
12
.
Podemos escrever:
Z =
N

i=1
U
i

N
2
_
N
12
Como esta considerao vlida para N > 10, podemos fazer N = 12 para facili-
tar o procedimento computacional, obtendo ento:
Z =
12

i=1
U
i
6
Temos agora um procedimento simples para gerar uma varivel aleatria nor-
malmente padronizada. Simplesmente somamos 12 nmeros aleatrios uniforme-
mente distribudos em [0, 1] e ento subtramos 6, obtendo um valor para Z. Se de-
sejarmos gerar uma varivel normal com mdia e desvio padro , geramos pri-
meiro Z e ento calculamos a varivel aleatria desejada X usando: X = +Z.
Exemplo: Gerar uma varivel aleatria que siga a distribuio normal com mdia 5
e desvio padro 2. Use o seguinte conjunto de variveis aleatrias uniformemente
distribudas em [0, 1]: 0.35, 0.97, 0.22, 0.15, 0.60, 0.43, 0.79, 0.52, 0.81, 0.65, 0.20,
0.57.
4.2 Simulao Direta 73
A soma dos 12 nmeros d:
12

i=1
U
i
= 0.35 + 0.97 +. . . + 0.57 = 6.26
Calculamos ento o valor de Z = (6.26 6) = 0.26.
A varivel aleatria normal pode ento ser obtida por:
X = 5 + (2)(0.26) = 5.52
O programa a seguir, escrito em Pascal, implementa a gerao de nmeros aleat-
rios que seguem a distribuio Normal.
O programa permite que se informe quantos nmeros queremos gerar, a mdia e
o desvio padro .
Como sada ele imprime os 6 primeiros nmeros gerados, a mdia de todos os n-
meros gerados e o desvio padro.
O programa usa a RAND2 como o gerador bsico de nmeros aleatrios.
{NORMAL I }
{$N+}
{ $E+}
Var
ISER, N,PARAM, I ,NUMIMP, J : Integer ;
U,SOMA, Z, DESVIO: Double;
MU,DELTA: Real ;
{ $I RAND2. PAS}
{ }
Function NORMAL(MU,DELTA: Real ;U: Double; ISER,PARAM: Integer ) : Double;
Var
SOMA12 : Double;
Begin
SOMA12 : = 0. 0;
For J : = 1 to 12 do
Begin
U : = RAND2( ISER,PARAM) ;
SOMA12 : = SOMA12 + U;
End;
NORMAL : = MU + DELTA (SOMA12 6. 0) ;
End;
{ }
Begin
PARAM : = 0;
Writeln( Qual a Serie (0 a 21473) ? ) ;
Readln( ISER) ;
U : = RAND2( ISER,PARAM) ;
PARAM : = 1;
Writeln( Quantos Numeros ? ) ;
Readln(N) ;
Writeln( Qual a media ? ) ;
Readln(MU) ;
Writeln( Qual o desvio padrao ? ) ;
Readln(DELTA) ;
SOMA : = 0. 0;
NUMIMP : = 0;
DESVIO : = 0. 0;
For I : = 1 to N do
Begin
74 Variveis aleatrias no uniformes
Z : = NORMAL(MU,DELTA, U, ISER,PARAM) ;
SOMA : = SOMA + Z;
DESVIO : = DESVIO + ( Z Z ) ;
NUMIMP : = NUMIMP + 1;
If NUMIMP < 6 then Writeln( Z ) ;
End;
Writeln( MEDIA = ,SOMA / N) ;
DESVIO : = SQRT( ( DESVIO / N) (SOMA /N) (SOMA / N) ) ;
Writeln( DESVIO PADRAO = ,DESVIO) ;
END.
Emuma execuo, usando-se a srie 1234 da RAND2, emque foramgerados 10.000
nmeros com = 5 e = 2, os seguintes resultados foram obtidos:
Primeiros 5 nmeros gerados: 5.60458, 4.2534, 4.63261, 3.92964 e 6.6514.
A mdia () dos 10.000 nmeros gerados foi igual a 4,994.
O desvio padro () foi igual a 1,998.
Um mtodo alternativo para gerar variveis aleatrias normalmente distribudas
usar uma das seguintes expresses:
Z =
_
(2 ln U
1
) sin (2U
2
)
ou
Z =
_
(2 ln U
1
) cos (2U
2
)
Ambas as expresses geram variveis aleatrias normais padronizadas.
Observe que o mtodo anterior necessita de 12 valores de U
i
para cada valor de
Z enquanto que este ltimo s necessita de 2. Assim aparenta ser mais eficiente
do ponto de vista computacional mas o clculo de logartimo, raiz quadrada e seno
(ou coseno) muito mais demorado que uma soma. Na verdade os 2 mtodos se
equivalem em termos de tempo computacional.
Exemplo: Gere 2 nmeros aleatrios que sigam uma distribuio normal com m-
dia 5 e desvio padro 2. Use o seguinte conjunto de nmeros aleatrios uniforme-
mente distribudos em [0, 1]: 0.35, 0.97, 0.22, 0.15.
Temos ento:
Z
1
=
_
(2) ln (0.35) sin [(2)(0.97)] = 0.27
X
1
= 5 + (2)(0.27) = 4.46
Z
1
=
_
(2) ln (0.22) sin [(2)(0.15)] = 1.41
X
2
= 5 + (2)(1.41) = 7.82
O programa a seguir, escrito em Pascal, implementa a gerao de nmeros aleat-
rios que seguem a distribuio Normal utilizando a frmula do seno.
O programa permite que se informe quantos nmeros queremos gerar, a mdia e
o desvio padro .
Como sada ele imprime os 6 primeiros nmeros gerados, a mdia de todos os n-
meros gerados e o desvio padro.
O programa usa a RAND2 como o gerador bsico de nmeros aleatrios.
4.2 Simulao Direta 75
{NORMAL I I }
{$N+}
{ $E+}
Var
ISER, N,PARAM, I ,NUMIMP: Integer ;
U,SOMA, Z, DESVIO: Double;
MU,DELTA: Real ;
{ $I RAND2. PAS}
{ }
Function NORMAL(MU,DELTA: Real ;U: Double; ISER,PARAM: Integer ) : Double;
Begin
U : = SQRT(( 2.0 LN(RAND2( ISER,PARAM) ) ) ) SIN( 2. 0 PI
RAND2( ISER,PARAM) ) ;
NORMAL : = MU + DELTA U;
End;
{ }
Begin
PARAM : = 0;
Writeln( Qual a Serie (0 a 21473) ? ) ;
Readln( ISER) ;
U : = RAND2( ISER,PARAM) ;
PARAM : = 1;
Writeln( Quantos Numeros ? ) ;
Readln(N) ;
Writeln( Qual a media ? ) ;
Readln(MU) ;
Writeln( Qual o desvio padrao ? ) ;
Readln(DELTA) ;
SOMA : = 0. 0;
NUMIMP : = 0;
DESVIO : = 0. 0;
For I : = 1 tO N dO
Begin
Z : = NORMAL(MU,DELTA, U, ISER,PARAM) ;
SOMA : = SOMA + Z;
DESVIO : = DESVIO + ( Z Z ) ;
NUMIMP : = NUMIMP + 1;
If NUMIMP < 6 then Writeln( Z ) ;
End;
Writeln( MEDIA = ,SOMA / N) ;
DESVIO : = SQRT( ( DESVIO / N) (SOMA /N) (SOMA / N) ) ;
Writeln( DESVIO PADRAO = ,DESVIO) ;
End.
Emuma execuo, usando-se a srie 1234 da RAND2, emque foramgerados 10.000
nmeros com = 5 e = 2, os seguintes resultados foram obtidos:
Primeiros 5 nmeros gerados: 3.82918, 1.902, 6.83981, 4.57527 e 3.6889.
A mdia () dos 10.000 nmeros gerados foi igual a 5,01063.
O desvio padro () foi igual a 1,98415.
76 Variveis aleatrias no uniformes
4.3 O Mtodo da Rejeio
O Mtodo da Rejeio um procedimento geral para gerar variveis aleatrias
para qualquer distribuio cuja densidade probabilstica f(x) contnua e limi-
tada dentro de uma regio finita, isto , necessitamos que 0 f(x) f
max
dentro
do intervalo a x b.
De maneira a se obter a varivel aleatria X, deve-se proceder da seguinte forma:
1. Gerar um par (U
1
, U
2
) de nmeros aleatrios uniformemente distribudos em
(0,1).
2. Obter uma varivel aleatria, K, dentro do intervalo a K b, usando a
relao K = a + (b a) U
1
.
3. Avaliar a densidade probabilstica no ponto K, isto , determinar f(K).
4. Obter uma varivel aleatria, Y , uniforme dentro do intervalo 0 Y
f
max
, usando a relao Y = f
max
U
2
. Os pontos Y e K representam as
coordenadas de algum ponto no espao como ilustrado nas figuras a seguir:
f(x)
0
f
mx
Y
f(K)
K
Y < F(K), logo
aceitamos K
a b x
f(x)
0
f
mx
Y
F(K)
K
Y > F(K), logo
no aceitamos K
a b x
4.3 O Mtodo da Rejeio 77
5. Comparar Y com f(K).
Se Y no maior que f(K) ento o ponto (Y, K) cair em cima ou abaixo
da curva de densidade probabilstica como indicado na primeira figura acima.
Neste caso ns aceitamos K como a varivel aleatria desejada, ou seja, faze-
mos X = K.
Se Y maior que f(K), rejeitamos o ponto.
6. As etapas de 1 a 5 so repetidas sucessivamente at ser encontrado um ponto
que satisfaa a condio.
O procedimento est ilustrado no fluxo a seguir:
REJEIO
Gerar
U
1
e U
2
K=a+(b-a)*U
1
Y=F
mx
* U
2
Y < f(K) ?
X = K
Sim
No
Embora o mtodo da rejeio possa ser usado com muitas distribuies diferentes,
ele ineficiente por causa das diversas tentativas que se tem que fazer para se
obter uma varivel aleatria desejada. Por esta razo s deve ser usado se no
existir outro mtodo.
78 Variveis aleatrias no uniformes
4.3.1 A Distribuio Beta
Para ilustrar o uso do mtodo da rejeio, vamos considerar a distribuio Beta.
Esta distribuio tem a densidade probabilstica dada por:
f(x) =
(
1
+
2
1)!x
(
1
1)
(1 x)
(
2
1)
(
1
1)!(
2
1)!
onde
1
e
2
so inteiros positivos e 0 x 1.
Pode ser mostrado que a mdia e a varincia para esta distribuio so:
=

1
(
1
+
2
)

2
=

2
(
1
+
2
) + (
1
+
2
+ 1)
Alm disto pode ser estabelecido que a varivel x pode ser interpretada como:
x =
x
1
x
1
+x
2
onde x
1
uma varivel gamma com parmetros (,
1
) e x
2
uma varivel gamma
com parmetros (,
2
).
Exemplo: O modo mais fcil de gerar uma varivel aleatria Beta usar simulao
direta. Vamos no entanto, como exemplo, usar o mtodo da rejeio. Em particular
vamos gerar vrias variveis beta com
1
= 2 e
2
= 3, baseado na seguinte
sequncia de nmeros aleatrios uniformemente distribudos em (0,1): 0.35, 0.97,
0.22, 0.15, 0.60, 0.43, 0.79, 0.52, 0.81, 0.65, 0.20, 0.57.
Como 0 x 1, ento a = 0 e b = 1. Logo:
K = a + (b a) U
1
= 0 + (1 0) U
1
= U
1
A funo de densidade probabilstica pode ser escrita como:
f(x) =
(2 + 3 1)!x
(21)
(1 x)
(31)
(2 1)!(3 1)!
= 12x(1 x)
2
A funo toma seu valor mximo em x =
1
3
. Assim sendo, temos:
f
max
= 12
_
1
3
__
3
3
_
2
=
16
9
= 1.78
Como Y igual f
max
U
2
, temos:
Y = 1.78 U
2
Os resultados obtidos com a aplicao do mtodo esto mostrados a seguir:
4.3 O Mtodo da Rejeio 79
U
1
U
2
K f(K) Y Y f(K)? X
0.35 0.97 0.35 1.77 1.73 SIM 0.35
0.22 0.15 0.22 1.61 0.27 SIM 0.22
0.60 0.43 0.60 1.15 0.77 SIM 0.60
0.79 0.52 0.79 0.42 0.93 NO
0.81 0.65 0.81 0.35 1.16 NO
0.20 0.57 0.20 1.54 1.01 SIM 0.20
Assim com 12 nmeros aleatrios em [0, 1], ns geramos 4 variveis beta cujos va-
lores so 0.35, 0.22, 0.60 e 0.20.
O programa a seguir, escrito em Pascal, implementa a gerao de nmeros aleat-
rios que seguem a distribuio Beta utilizando o mtodo da rejeio.
O programa permite que se informe quantos nmeros queremos gerar, o valor de
a, b e F
max
.
Como sada ele imprime os 5 primeiros nmeros gerados, a mdia de todos os n-
meros gerados e o desvio padro.
Ele imprime tambm quantos nmeros aleatrios em [0, 1] foram necessrios.
O programa usa a RAND2 como o gerador bsico de nmeros aleatrios.
{BETA}
{$N+}
{ $E+}
Var
ISER, N,PARAM, I ,NUMIMP: Integer ;
J : Longint ;
U: Double;
A, B,MEDIA,FMAX, K, Y,SOMA, DESVIO,NUMBETA: Real ;
{ $I RAND2. PAS}
Begin
PARAM : = 0;
Writeln( Qual a Serie (0 a 21473) ? ) ;
Readln( ISER) ;
U : = RAND2( ISER,PARAM) ;
PARAM : = 1;
Writeln( Quantos Numeros ? ) ;
Readln(N) ;
Writeln( Qual o valor de A ? ) ;
Readln(A) ;
Writeln( Qual o valor de B ? ) ;
Readln(B) ;
Writeln( Qual o valor de Fmax ? ) ;
Readln(FMAX) ;
SOMA : = 0. 0;
NUMIMP : = 0;
DESVIO : = 0. 0;
I : = 0;
J : = 0;
While I < N do
Begin
U : = RAND2( ISER,PARAM) ;
J : = J +1;
80 Variveis aleatrias no uniformes
K : = A + (B A) U;
U : = RAND2( ISER,PARAM) ;
J : = J + 1;
Y : = FMAX U;
If Y < (12 K ( 1 K) ( 1 K) ) then
Begin
I : = I + 1;
NUMBETA : = K;
SOMA : = SOMA + NUMBETA;
DESVIO : = DESVIO + NUMBETA NUMBETA;
NUMIMP : = NUMIMP + 1;
If NUMIMP < 6 then Writeln(NUMBETA) ;
End;
End;
Writeln( Usados , J , numeros aleatorios ) ;
Writeln( MEDIA = ,SOMA / N) ;
SOMA : = SOMA / N;
DESVIO : = SQRT( ( DESVIO / N) (SOMA SOMA) ) ;
Writeln( Desvio Padrao = ,DESVIO) ;
End.
Emuma execuo, usando-se a srie 1234 da RAND2, emque foramgerados 10.000
nmeros com a = 0, b = 1 e F
max
= 1.78, os seguintes resultados foram obtidos:
Primeiros 5 nmeros gerados: 0.24319; 0.450268; 0.146248; 0.238159 e 0.291242.
A mdia () dos 10.000 nmeros gerados foi igual a 0.403384. Devemos observar
que a mdia terica igual a:
=

1
+
2
=
2
2 + 3
= 0.4
O desvio padro () foi igual a 0.200465. Devemos observar que o desvio padro
terico igual a:
=


2
(
1
+
2
)(
1
+
2
+ 1)
=

0.4 3
(2 + 3)(2 + 3 + 1)
= 0.2
Para se gerar os 10.000 nmeros beta, foramnecessrios 35.804 nmeros aleatrios
gerados pela RAND2, o que mostra a ineficincia do mtodo.
4.4 Outras funes de distribuio
Vimos algumas das funes de distribuio mais importantes. Devemos assina-
lar que existem mtodos e formas de gerar variveis aleatrias para praticamente
qualquer distribuio conhecida e estudada.
Captulo 5
Modelos para simular filas de espera e o uso do ARENA
Neste captulo veremos, inicialmente, 2 programas que permitem a simulao de
alguns modelos de filas de espera. A seguir, veremos uma introduo ao ARENA,
que um programa para se construir e simular modelos no ambiente Windows.
5.1 Simulao de um pequeno posto bancrio
Veremos uma aplicao construda para simular o funcionamento de um pequeno
posto bancrio com uma nico caixa e uma nica fila.
Dados obtidos por amostragem indicam que o intervalo entre chegadas de clientes
segue uma Distribuio Exponencial e a durao do servio prestado, pelo caixa,
tambm segue uma Distribuio Exponencial.
O programa a seguir, escrito em Pascal, implementa a simulao desejada e utiliza
a RAND2 como o gerador de nmeros aleatrios uniformemente distribudos.
Neste tipo de simulao, em que temos 2 eventos aleatrios (intervalo entre che-
gadas e durao do servio), devemos utilizar 2 sries diferentes, uma para cada
tipo de evento. Se o gerador usado fosse, por exemplo a RAND1, deveramos usar
2 sementes para termos 2 geraes distintas.
{ Fila com 1 servi dor : Int erval o ent re chegadas : Exponencial
Ex . Posto bancario Duracao do s e r vi c o : Exponencial
com 1 caixa
Usada RAND2 como gerador de nos . al e at or i os [ 0 , 1] .

Vari avei s pri nci pai s usadas no programa


CLIENTES_NA_FILA Numero de c l i e nt e s esperando na f i l a
CLIENTES_RECEBENDO_SERVICO Cl i ent es sendo servi dos ( 0 ou 1)
CHEGADA( I ) Inst ant e da chegada do ( iesimo 1) c l i e nt e
a ser atendido , assim CHEGADA( 2) e o i nst ant e
de chegada do primeiro na f i l a de espera e
CHEGADA( 1) e o i nst ant e da chegada
do c l i e nt e sendo atendido
INSTANTE_PROXIM0_EVENTO( I ) Inst ant e da ocorrenci a do proximo evento
[ 1 ( chegada ) ou 2 ( saida ) ]
TIPO_PROXIMO_EVENTO Tipo de proximo evento ( 1 ou 2)
DURACAO_SERVICO Duracao do s e r vi c o do ultimo c l i e nt e a receber s e r vi c o
RELOGIO Rel ogi o de cont rol e da simulacao
82 Modelos para simular filas de espera e o uso do ARENA
NUMERO_EVENTOS Numero de event os (=2 ou sej a , chegadas e
s e r vi c os prestados )
INSTANTE_ULTIMO_EVENTO Inst ant e da ocorrenci a do ultimo evento
usada para at ual i zar TEMPO_SERVIDOR_OCUPADO
TEMPO_SERVIDOR_OCUPADO Tempo t ot al de ocupacao da caixa
TEMPO_NO_SISTEMA Tempo que um c l i e nt e f i c a no sistema
SOMA_TEMPOS_NO_SISTEMA Soma tempos no sistema de todos os c l i e nt e s
NO_SERVICOS_PRESTADOS Numero de s e r vi c os prestados , ou sej a ,
c l i e nt e s atendidos
MAIS_DE_4 Numero de c l i e nt e s que ficaram mais de 4 unidades de
tempo na f i l a
MAXIMO_NA_FILA Maior numero de c l i e nt e s na f i l a durante toda a simulacao
INSTANTE_ULTIMO_EVENTO Inst ant e da ocorrenci a do ultimo evento
NUMERO_DE_CLIENTES numero de c l i e nt e s tratados pela simulacao
RHO Taxa de ocupacao do servi dor
PERC_MAIS_4 Percentual de c l i e nt e s que ficam mais de 4 unidades de
tempo na f i l a
TEMPO_TOTAL_NA_FILA Soma dos tempos gasto pel os c l i e nt e s na f i l a
UNIDADE_DE_TEMPO Unidade de medicao do tempo
}
{$N+}
{ $E+}
Uses CRT;
Label
VOLTA;
Var
SALVAZRNG1,SALVAZRNG2: Longint ;
PARAM, SERIE1, SERIE2: Integer ;
U: Double;
MEDIAEXP,ALFA, MEDIAEXP1, ALFA1: Real ;
{ }
MAXIMO_NA_FILA, TIPO_PROXIMO_EVENTO,CLIENTES_RECEBENDO_SERVICO: Integer ;
NUMERO_DE_CLIENTES, NO_SERVICOS_PRESTADOS, MAIS_DE_4: Longint ;
NUMERO_EVENTOS, I : Integer ;
CLIENTES_NA_FILA: Longint ;
RELOGIO,TEMPO_NO_SISTEMA,TEMPO_SERVIDOR_OCUPADO, FMIN,DURACAO_SERVICO: Real ;
INSTANTE_ULTIMO_EVENTO,SOMA_TEMPOS_NO_SISTEMA,RHO, PERC_MAIS_4: Real ;
TEMPO_TOTAL_NA_FILA: Real ;
UNIDADE_DE_TEMPO: Stri ng [ 9 ] ;
INSTANTE_PROXIMO_EVENTO: Array[ 1 . . 2 ] of Real ;
CHEGADA: Array[ 1. . 100] of Real ;
{ }
{ $I c : \workpas\RAND2. PAS}
{ //////////////////////////////////////////////////////////////////////
Funcao para a geracao de nos . al e at or i os exponencialmente di st ri bui dos
}
Function EXPONENCIAL(ALFA: Real ; U: Double ) : Real ;
Begin
EXPONENCIAL: = (1/ALFA) LN(U) ;
End;
{ //////////////////////////////////////////////////////////////////////
I ni c i al i zac ao
}
5.1 Simulao de um pequeno posto bancrio 83
Procedure INICIALIZACAO;
Begin
NUMERO_EVENTOS: =2;
RELOGIO: =0. 0;
CLIENTES_NA_FILA: =0;
CLIENTES_RECEBENDO_SERVICO: =0;
TEMPO_SERVIDOR_OCUPADO: =0. 0;
MAXIMO_NA_FILA: =0;
SOMA_TEMPOS_NO_SISTEMA: =0;
MAIS_DE_4: =0;
NO_SERVICOS_PRESTADOS: =0;
TEMPO_TOTAL_NA_FILA: = 0. 0;
{
Gera a primeira chegada
Faz INSTANTE_PROXIMO_EVENTO[ 2] i gual a i nf i ni t o para i ndi car que uma
partida e i mpossi vel com o sistema vazi o
}
ZRNG: = SALVAZRNG1;
U: = RAND2( SERIE1,PARAM) ;
SALVAZRNG1: = ZRNG;
INSTANTE_PROXIMO_EVENTO[ 1] : = RELOGIO + EXPONENCIAL(ALFA,U) ;
INSTANTE_PROXIMO_EVENTO[ 2] : = 1. 0E30;
End;
{ //////////////////////////////////////////////////////////////////////
Rotina de avanco do tempo para determinar proximo evento
e avancar r e l ogi o para o i nst ant e do proximo evento
}
Procedure AVANCA;
Begin
FMIN: =1. 0E20;
TIPO_PROXIMO_EVENTO: =0;
For I : = 1 to NUMERO_EVENTOS do
Begin
If INSTANTE_PROXIMO_EVENTO[ I ] < FMIN Then
Begin
FMIN : = INSTANTE_PROXIMO_EVENTO[ I ] ;
TIPO_PROXIMO_EVENTO: = I ;
End;
End;
If TIPO_PROXIMO_EVENTO = 0 Then
Begin
Writeln( LISTA DE EVENTOS FUTUROS VAZIA - ERRO ) ;
HALT;
End;
RELOGIO: =INSTANTE_PROXIMO_EVENTO[TIPO_PROXIMO_EVENTO] ;
End;
{ //////////////////////////////////////////////////////////////////////
Tratamento de uma chegada
}
Procedure CHEGADAS;
{
Determina se o servi dor esta ocupado . Menor que 1 esta l i vr e .
}
84 Modelos para simular filas de espera e o uso do ARENA
Begin
If CLIENTES_RECEBENDO_SERVICO < 1 Then
Begin
CLIENTES_RECEBENDO_SERVICO: = 1;
CHEGADA[ 1] : =RELOGIO;
{
Gera uma duracao de s e r vi c o para a nova chegada e programa a
partida desta nova chegada
}
ZRNG: = SALVAZRNG2;
U: = RAND2( SERIE2,PARAM) ;
SALVAZRNG2: = ZRNG;
DURACAO_SERVICO: = EXPONENCIAL(ALFA1,U) ;
INSTANTE_PROXIMO_EVENTO[ 2] : =RELOGIO + DURACAO_SERVICO;
{
Atualiza MAXIMO_NA_FILA e INSTANTE_ULTIMO_EVENTO
}
INSTANTE_ULTIMO_EVENTO: = RELOGIO;
If CLIENTES_NA_FILA > MAXIMO_NA_FILA Then
MAXIMO_NA_FILA : = CLIENTES_NA_FILA;
End
{
O servi dor esta ocupado . Atualiza o estado do sistema e r e gi s t r a
i nst ant e da nova chegada
}
Else
Begin
CLIENTES_NA_FILA: =CLIENTES_NA_FILA + 1;
I : = CLIENTES_NA_FILA + 1;
If I > 100 Then
Begin
Writeln( Fila maior que 100. Aumente dimensoes ) ;
HALT;
End;
CHEGADA[ I ] : =RELOGIO;
{
Atualiza e s t at i s t i c as cumulativas TEMPO_SERVIDOR_OCUPADO e MAXIMO_NA_FILA
}
TEMPO_SERVIDOR_OCUPADO : = TEMPO_SERVIDOR_OCUPADO +
(RELOGIO INSTANTE_ULTIMO_EVENTO) ;
INSTANTE_ULTIMO_EVENTO : = RELOGIO;
IF CLIENTES_NA_FILA >= MAXIMO_NA_FILA Then
MAXIMO_NA_FILA : = CLIENTES_NA_FILA;
End;
{
Gera um i nt erval o ent re chegadas e programa o proximo evento de chegada
}
ZRNG: = SALVAZRNG1;
U: = RAND2( SERIE1,PARAM) ;
SALVAZRNG1: = ZRNG;
INSTANTE_PROXIMO_EVENTO[ 1] : =RELOGIO+EXPONENCIAL(ALFA,U) ;
End;
{ //////////////////////////////////////////////////////////////////////
5.1 Simulao de um pequeno posto bancrio 85
Rotina de s e r vi c o
}
Procedure SERVICO;
{
Atualiza e s t at i s t i c as cumulativas TEMPO_SERVIDOR_OCUPADO,
SOMA_TEMPOS_NO_SISTEMA, NO_SERVICOS_PRESTADOS e MAIS_DE_4MIN.
CLIENTES_NA_FILA e diminuida de modo que MAXIMO_NA_FILA nao muda.
}
Begin
TEMPO_SERVIDOR_OCUPADO: = TEMPO_SERVIDOR_OCUPADO +
(RELOGIO INSTANTE_ULTIMO_EVENTO) ;
INSTANTE_ULTIMO_EVENTO : = RELOGIO;
TEMPO_NO_SISTEMA: = RELOGIO CHEGADA[ 1 ] ;
SOMA_TEMPOS_NO_SISTEMA: = SOMA_TEMPOS_NO_SISTEMA + TEMPO_NO_SISTEMA;
NO_SERVICOS_PRESTADOS: = NO_SERVICOS_PRESTADOS + 1;
If TEMPO_NO_SISTEMA > 4 Then MAIS_DE_4 : = MAIS_DE_4 + 1;
{
Veri f i ca a condicao da f i l a
}
If CLIENTES_NA_FILA < 1 Then
{
Fila vazia . Servidor desocupado . Proxima saida i gual a i nf i ni t o
}
Begin
CLIENTES_RECEBENDO_SERVICO : = 0;
INSTANTE_PROXIMO_EVENTO[ 2] : =1. 0E30;
End
{
Pelo menos 1 c l i e nt e na f i l a . Mover cada c l i e nt e 1 posi cao
}
Else
Begin
For I : =1 to CLIENTES_NA_FILA do
Begin
CHEGADA[ I ] : =CHEGADA[ I +1] ;
End;
{
Atualiza estado do sistema
}
CLIENTES_NA_FILA: = CLIENTES_NA_FILA 1;
TEMPO_TOTAL_NA_FILA: =TEMPO_TOTAL_NA_FILA + (RELOGIO CHEGADA[ 1 ] ) ;
{
Gera nova duracao de s e r vi c o para o c l i e nt e chegando para s e r vi c o
e programa proxima saida
}
ZRNG: = SALVAZRNG2;
U: = RAND2( SERIE2,PARAM) ;
SALVAZRNG2: = ZRNG;
DURACAO_SERVICO: = EXPONENCIAL(ALFA1,U) ;
INSTANTE_PROXIMO_EVENTO[ 2] : =RELOGIO + DURACAO_SERVICO;
End;
End;
{ //////////////////////////////////////////////////////////////////////
86 Modelos para simular filas de espera e o uso do ARENA
Impressao dos resul t ados
}
Procedure RESULTADOS;
Begin
RHO: =TEMPO_SERVIDOR_OCUPADO/RELOGIO;
PERC_MAIS_4: =MAIS_DE_4/ NO_SERVICOS_PRESTADOS;
Writeln( Simulacao de um Sistema de Fila com 1 estacao de servico ) ;
Writeln( -------------------------------------------------------- ) ;
Writeln( Intervalo entre chegadas (Exponencial) = ,MEDIAEXP: 3: 3 ,
,UNIDADE_DE_TEMPO) ;
Writeln( Duracao do servico (Exponencial) = ,MEDIAEXP1: 2: 3 ,
,UNIDADE_DE_TEMPO) ;
Writeln( -------------------------------------------------------- ) ;
Writeln( Total de clientes atendidos = ,NO_SERVICOS_PRESTADOS) ;
Writeln( Taxa de ocupacao do servidor = RHO = ,RHO: 0 : 3 ) ;
Writeln( Maximo de clientes na fila = ,MAXIMO_NA_FILA) ;
Writeln( Percentual de clientes que esperaram mais de 4 ,
UNIDADE_DE_TEMPO, = ,PERC_MAIS_4: 0 : 3 ) ;
Writeln( Tempo medio gasto por cliente na fila = Wq = ,
(TEMPO_TOTAL_NA_FILA/ NO_SERVICOS_PRESTADOS) : 3: 3 , ,UNIDADE_DE_TEMPO) ;
Writeln( Tempo medio gasto por cliente no sistema = W = ,
(SOMA_TEMPOS_NO_SISTEMA/ NO_SERVICOS_PRESTADOS) : 3: 3 , ,UNIDADE_DE_TEMPO) ;
Writeln( Tempo total de simulacao = ,RELOGIO: 6: 3 , ,UNIDADE_DE_TEMPO) ;
End;
{ //////////////////////////////////////////////////////////////////////
ROTINA PRINCIPAL

Recebe os parametros de entrada e s e r i e s para a geracao de


numeros al e at or i os
}
Begin
CLRSCR;
VOLTA:
PARAM: = 0;
Writeln( Qual a serie para o intervalo entre chegadas - 0 a 21473 ? ) ;
Readln( SERIE1 ) ;
SERIE1: = SERIE1 MOD 21474;
U: =RAND2( SERIE1,PARAM) ;
SALVAZRNG1: = ZRNG;
Writeln( Qual a serie para a duracao do servico - 0 a 21473 ? ) ;
Readln( SERIE2 ) ;
SERIE2: = SERIE2 MOD 21474;
IF SERIE1 = SERIE2 Then
Begin
Writeln( SERIES IGUAIS - ERRO!! ) ;
GOTO VOLTA;
End;
U: =RAND2( SERIE2,PARAM) ;
SALVAZRNG2: = ZRNG;
PARAM: = 1;
Writeln( Qual a unidade de tempo a ser usada ? ) ;
Readln(UNIDADE_DE_TEMPO) ;
Writeln( Qual o intervalo, em ,UNIDADE_DE_TEMPO,
5.1 Simulao de um pequeno posto bancrio 87
,entre chegadas - EXPONENCIAL ? ) ;
Readln(MEDIAEXP) ;
ALFA: =1. 0/MEDIAEXP;
Writeln( Qual a media, em ,UNIDADE_DE_TEMPO,
,da duracao do servico - EXPONENCIAL ? ) ;
Readln(MEDIAEXP1) ;
ALFA1: = 1. 0/MEDIAEXP1;
Writeln( Quantos clientes na simulacao ? ) ;
Readln(NUMERO_DE_CLIENTES) ;
CLRSCR;
{ }
INICIALIZACAO;
While (NO_SERVICOS_PRESTADOS < NUMERO_DE_CLIENTES) do
Begin
AVANCA;
If TIPO_PROXIMO_EVENTO = 1 Then CHEGADAS
Else SERVICO;
End;
RESULTADOS;
End.
A execuo deste programa com os seguintes dados de entrada:
Srie, da RAND2, para o intervalo entre chegadas: 7599
Srie, da RAND2, para a durao do servio: 333
Intervalo entre chegadas (exponencial): 2 minutos
Durao do Servio: 1.5 minutos
Nmero de usurios a serem simulados: 10.000
Apresentou a seguinte tela de sada:
Simulacao de um Sistema de Fila com 1 estacao de servico

Intervalo entre chegadas (Exponencial) = 2.000 minutos


Duracao do servico (Exponencial) = 1.500 minutos

Total de clientes atendidos = 10000


Taxa de ocupacao do servidor = RHO = 0.760
Maximo de clientes na fila = 22
Percentual de clientes que esperaram mais de 4 minutos = 0.537
Tempo medio gasto por cliente na fila = Wq = 4.487 minutos
Tempo medio gasto por cliente no sistema = W = 5.990 minutos
Tempo total de simulacao = 19781.519 minutos
Este tipo de fila, tem soluo analtica pois se trata do chamado Modelo M/M/1
da Teoria das Filas.
Aplicando as frmulas tericas chegamos aos seguintes resultados:
88 Modelos para simular filas de espera e o uso do ARENA
Taxa de ocupao do servidor = (rho) = 0.750
Percentual de clientes que esperaram mais de 4 minutos = 0.5134
Tempo mdio gasto por cliente na fila = W
q
= 4.5 minutos
Tempo mdio gasto por cliente no sistema = W = 6.0 minutos
Comparando-se os resultados da simulao com os resultados tericos, podemos
observar que a simulao apresenta resultados totalmente aderentes aos resulta-
dos tericos o que demonstra a potencialidade da tcnica.
Obviamente no teria sentido se construir um modelo de simulao para a situa-
o acima onde temos soluo analtica. O objetivo foi apenas mostrar o uso das
tcnicas de simulao.
5.2 Um software mais verstil
Veremos a seguir um outro programa (simulacao)
1
, um pouco mais verstil do que
acabamos de ver. Ele simula um sistema de filas e permite que se escolha o nmero
de estaes que prestam servio, o nmero mximo de clientes que podem ficar no
sistema, a distribuio do intervalo entre chegadas (exponencial, normal, uniforme
ou emprica), a distribuio da durao do servio prestado (exponencial, normal,
uniforme ou emprica) e a durao da simulao. Pode-se escolher tambm a uni-
dade de tempo a ser usada.
Pode-se determinar tambm o nmero de replicaes (at o mximo de 100), ou seja
quantas vezes deseja-se executar a simulao para o mesmo conjunto de dados de
entrada.
O programa usa a RAND4 como o gerador de nmeros aleatrios e usa sries di-
ferentes, entre 1 e 50, para o intervalo entre chegadas e para a durao do servio.
As sementes e as sries usadas so escolhidas, aleatoriamente, pelo programa. No
caso de se executar replicaes, sries e sementes diferentes so criadas em cada
uma das execues individuais da replicao.
Os resultados mostrados na sada so, no caso das replicaes, as mdias obtidas
com as diversas execues.
1
um dos mdulos do programa PO, que pode ser obtido de www.mpsantos.com.br
5.2 Um software mais verstil 89
5.2.1 Alguns exemplos usando o programa Simulao
Como exemplo do uso do programa, vamos simular um sistema de filas que tenha
soluo analtica para compararmos os resultados.
Vamos simular o sistema de filas de uma agncia bancria, com 3 caixas de aten-
dimento, em que as chegadas sigam uma distribuio exponencial com intervalo
mdio entre chegadas igual a 2 minutos.
A distribuio do tempo de atendimento dos caixas tambm segue uma distribuio
exponencial com atendimento mdio igual a 4 minutos.
A tela de entrada do programa para execuo desta simulao seria a seguinte:
Como no existe limitao para o nmero de clientes na agncia, o campo Mximo
usurios permitido no Sistema ficou com 1000. A durao da simulao foi de
10.000 minutos e solicitamos que 100 replicaes fossem executadas.
O valor em qualquer dos campos pode ser mudado, bastando para isto clicar nele
e apagar o valor existente com as teclas [Delete] ou [Backspace]. Os campos
Unidade de tempo, Distribuio das chegadas e Distribuio do Servio podem ser
mudados com o simples click do mouse no novo tem desejado.
Aps se colocar os valores desejados, clica-se em SIMULAR e a Simulao ser
executada. No nosso exemplo aparecer a seguinte tela:
90 Modelos para simular filas de espera e o uso do ARENA
Caso se tenha uma impressora esta tela poder ser impressa. Clicando-se no boto
VOLTAR samos do programa, voltando-se para o software Po.
Como este modelo simulado um exemplo do modelo M/M/s, podemos comparar
os resultados obtidos na simulao com os resultados tericos obtidos das frmulas
analticas daquele modelo de filas:
Tempo mdio que um cliente permanece na fila (W
q
):
Simulao : 1,758 minutos
Terico : 1,776 minutos
Nmero Mdio de clientes na fila (L
q
):
Simulao : 0,877 clientes
Terico : 0,888 clientes
Taxa de ocupao das estaes de servio (caixas):
Simulao : 66,5%
Terico : 66,7%
Podemos observar que a simulao deu resultados praticamente iguais aos tericos
o que demonstra a robustez da tcnicas de simulao alm de servir para demons-
trar que o programa est se comportando de maneira adequada.
5.2 Um software mais verstil 91
Vamos us-lo agora para simular uma situao de fila em que no existem, pelo
menos de forma fcil, frmulas tericas.
Vamos supor uma agncia bancria, com 4 caixas de atendimento, onde as chega-
das chegam seguindo uma distribuio normal com intervalo mdio entre chegadas
de 2 minutos e desvio padro de 0, 5 minutos. A durao do atendimento prestado
pelos caixas tambm segue uma distribuio normal, com mdia de 8 minutos para
a durao do atendimento e desvio padro de 1, 5 minutos..
A tela de entrada desta simulao seria:
A sada, aps 100 replicaes, cada uma com 20.000 minutos de simulao, apre-
sentou os seguintes resultados:
92 Modelos para simular filas de espera e o uso do ARENA
Os resultados da simulao mostram que esta agncia bancria no est prestando
um servio de boa qualidade pois, em mdia, cada cliente tem que esperar mais de
33 minutos na fila e, em mdia a fila tem quase 17 clientes.
Para melhorar a qualidade do servio prestado vamos examinar os resultados da
simulao se colocamos mais 1 caixa de atendimento. Alterando a entrada e execu-
tando a simulao, chegamos aos seguintes resultados:
5.2 Um software mais verstil 93
Como pode ser visto, a fila praticamente desaparece.
Embora bastante verstil, o programa limitado a determinados tipos de sistema
de fila. Se alteramos as condies bsicas, temos que alterar o programa alterando-
se rotinas j existentes ou incluindo novas rotinas.
Como ilustrao da dificuldade e do custo de se fazer isto, lembramos que o fonte do
programa tem 20 pginas de cdigo de programao. Mesmo se tirarmos as 5 ou 6
pginas de cdigo que so necessrios para o ambiente Windows, ainda restariam
15 pginas de codificao!.
Para cada modelo, a no ser que sejam muito semelhantes como nos exemplos
acima, temos que construir programas de computador cuja complexidade pro-
porcional a complexidade do modelo simulado.
Apesar da vantagem advinda de se ter um programa sob medida, o tempo que se
leva para se obter os primeiros resultados normalmente invalida aquela vantagem,
principalmente em modelos complexos.
Este fato fez com que fossem desenvolvidos programas voltados exclusivamente
para a construo de modelos de simulao. Veremos a seguir, um dos mais usados
na atualidade.
94 Modelos para simular filas de espera e o uso do ARENA
5.3 O software ARENA
O ARENA um software, que roda no ambiente Windows, desenvolvido e de propri-
dade da Rockwell Software Inc. No Brasil representado pela Paragon Tecnologia
Ltda
2
.
O ARENA est construdo em cima de uma linguagem (SIMAN), prpria para si-
mulao, que existe h pelo menos 20 anos. No entanto, como ele roda no ambiente
Windows (grfico), a linguagem fica totalmente transparente podendo-se construir
modelos ignorando-se totalmente o que est por trs das telas grficas.
A tela bsica do ARENA a seguinte:
A esquerda temos a rea dos painis (templates) como Create, Dispose, Process,
etc... Os modelos de simulao so construdos com estes painis, como veremos
mais adiante. Observe que o ttulo da rea de painis Basic Process, ou seja
estes so os blocos bsicos e poderemos acrescentar outros a medida que eles forem
sendo necessrios.
Na verdade, na sua forma mais simplificada, criamos modelos no ARENA cons-
truindo desenhos lgicos com os painis.
2
www.paragon.com.br/brhome.html
5.3 O software ARENA 95
5.3.1 Simulao de um pequeno posto bancrio
Vamos ver o exemplo de um pequeno posto bancrio com um nico caixa.
Como j dissemos, no Arena trabalhamos com blocos e, interligando-os, constru-
mos o modelo. Antes de ver como se faz no Arena, vamos construir nosso modelo
lgico. Podemos representar nosso posto da seguinte forma:
Clientes
Chegam
Clientes so
Atendidos
Clientes vo
embora
Vamos agora para o Arena. O nosso 1
o
bloco, ou seja a chegada de clientes, tem que
ser criado. Clicando e segurando o mouse, arrastamos a caixa Create do lado es-
querdo para a rea de trabalho, que a maior rea branca da tela inicial. Soltamos
o mouse e uma caixa Create1 aparece no espao em branco. A seguir, fazemos o
mesmo com a caixa Process, ou seja clicamos, seguramos o mouse e a arrastamos
para a direita da caixa Create 1. O ARENA conecta automaticamente as 2 caixas
(isto pode ser desligado). Vai ser criada uma caixa chamada Process 1. E, para
finalizar, fazemos o mesmo com a caixa Dispose e a colocamos a direita da Pro-
cess 1.
A aparncia da nossa tela dever ser a seguinte:
96 Modelos para simular filas de espera e o uso do ARENA
Na parte abaixo da rea de trabalho aparece uma espcie de planilha com alguns
dados que ficaro mais claros a medida que formos avanando.
Dando um duplo click na caixa Create1, abre-se o seguinte quadro:
Podemos entrar com os dados da nossa aplicao. Na 1
a
linha, vamos trocar o nome
(Name) de Create 1 para Chegada de Clientes. O tipo da entidade (Entity Type) de
Entity 1 para Clientes.
A 2
a
linha trata da distribuio do intervalo entre chegadas (Time Between Arri-
vals). Em Type, vamos escolher Expression e em Value escolhemos EXPO(Mean),
ou seja estamos dizendo que o intervalo entre chegadas segue uma distribuio
exponencial. No exemplo que queremos simular, o intervalo entre chegadas tem
mdia igual a 2 minutos.
Antes de introduzirmos este valor, devemos saber que o ARENA usa a RAND4 (pg.
27) como gerador de nmeros aleatrios. Assim, alm da mdia, convm informar,
embora seja opcional, qual a srie que deve ser usada para gerar as chegadas de cli-
entes. Em princpio no deve-se usar a srie 10 pois esta a srie que o Arena usa
quando no se informa nada. Vamos usar a srie 23. Colocamos ento no campo
Value a expresso EXPO(2,23), ou seja mdia igual a 2 usando-se na simulao, a
srie 23 da RAND4. A seguir devemos trocar o campo Units para minutos.
A 3
a
linha fica como est pois Entidades por Chegada (Entities per Arrival) igual
a 1, ou seja cada cliente chega sozinho. No existe limite para o nmero de clientes
que podem chegar, assim Max Arrivals igual a Infinito e o instante de criao
(First Creation) da 1
a
chegada o instante 0.0, ou seja o incio da simulao.
Nosso quadro fica ento desta forma:
5.3 O software ARENA 97
Basta clicar em OK para confirmar as alteraes.
Vamos agora dar um duplo click no bloco Process 1. Um novo quadro se abre:
Mudamos o Name para Atendimento aos Clientes, o tipo fica Standard. No campo
Action, deve ser escolhida a opo Seize Delay Release, ou seja CapturaRetm por
algum tempoLibera, que o que um caixa faz com os clientes.
Ao se escolher a ao acima abre-se um novo campo Prioridade (Priority) que deve
98 Modelos para simular filas de espera e o uso do ARENA
ser deixado como Medium(2). Abre-se, tambm um novo quadro para a definio
dos recursos (resources) que, no nosso exemplo, um nico caixa.
Devemos clicar na opo Add para incluir o recurso (Caixa) no modelo, como mos-
trado a seguir:
5.3 O software ARENA 99
Como pode ser visto acima, escolhemos Resource (em Type), Caixa 1 (em Resource
name) e 1 (em quantity).
Precisamos informar agora o tipo de distribuio do atendimento feito pelo caixa
que, no nosso exemplo, segue uma distribuio exponencial com mdia de 1.5 mi-
nutos. Escolhemos ento: Expression (em Delay Type), Minutes (em Units), Value
Added (em Allocation) e EXPO(Mean) (em Expression). Devemos a seguir subs-
tituir o (Mean) por (1.5,7), pois vamos usar a srie 7 da RAND4 para a gerao
da durao do servio. Se no estiver marcado, devemos marcar o campo Report
Statistics. Finalmente clicamos em OK para confirmar nossos dados.
100 Modelos para simular filas de espera e o uso do ARENA
Repetimos o processo para a caixa Dispose. O seguinte quadro aparecer:
Mudamos o nome para Saida de Clientes, marcamos o campo Record Entity Statis-
tics e clicamos em OK, obtendo-se o seguinte quadro.
5.3 O software ARENA 101
A rea de trabalho do ARENA estar da seguinte forma;
Podemos reparar que aparece uma linha em cima do bloco Atendimento aos Cli-
entes. Esta linha representa a fila que se forma no caixa. Na parte de baixo, a
medida que se clica em um dos blocos, aparece uma planilha com as informaes
pertinentes a cada bloco. Podemos alterar, se for o caso, as informaes na planilha
que elas passaro a valer para o bloco.
Neste ponto, o modelo est construdo mas antes de executar a simulao, temos
que ajustar alguns parmetros. Assim, devemos clicar em Run Setup, no
menu. O quadro a seguir (j com as alteraes feitas), para Replication Parameters
aparecer:
102 Modelos para simular filas de espera e o uso do ARENA
Vamos fazer apenas uma simulao (1 replicao) com durao de 10.000 minutos.
Tambm no Run Setup, aba Project Parameters, podemos entrar com os
parmetros do projeto tais como nome do projeto, nome do analista, descrio do
projeto, etc...
Para finalizar clicamos em OK.
Para executar a simulao clicamos, no menu, em Run Go. Passamos a ver
ento a simulao dinamicamente acontecendo como no retrato a seguir (obtido
apertando-se, durante a simulao, a tecla <ESC>):
Neste ponto j tinham chegado 846 clientes, 841 j tinham sido atendidos, 4 esta-
vam na fila e 1 estava sendo atendido.
Ao final da simulao, o ARENA emite dezenas de relatrios que podem ser acessa-
dos a partir da aba Reports que existe na parte esquerda da tela. Vamos mostrar
5.3 O software ARENA 103
alguns destes relatrios e ver os resultados obtidos.
O 1
o
o Queues que d informaes sobre a fila em si:
O tempo de espera mdio na fila de 4,59 minutos. O terico (W
q
), modelo M/M/1,
4,50 minutos. O nmero mdio de clientes na fila 2,30 clientes. O terico (L
q
)
igual a 2,25 clientes. O nmero mximo de clientes na fila foi 21.
O prximo relatrio que podemos examinar o de Resources que, no nosso exemplo
o caixa.
104 Modelos para simular filas de espera e o uso do ARENA
Como podemos observar, o Caixa ficou ocupado 75% do tempo. Este resultado
exatamente igual ao terico ( = 0.75).
Outro relatrio que pode ser visto o de Processes:
Ele mostra que a maior espera total de um cliente foi de 46.85 minutos, o aten-
dimento mais demorado foi 14,71 minutos e a maior espera na fila foi de 44.59
minutos.
Como citamos anteriormente, vrios outros relatrios, com grficos inclusive, so
impressos e podem ser examinados.
5.3.2 Simulao de um check-in
Vamos imaginar a seguinte situao: passageiros, que vo viajar em determinada
companhia area, chegam ao aeroporto com intervalo mdio de 1.6 minutos, de
acordo com uma distribuio exponencial. Estes viajantes, desde do momento em
que entram no aeroporto at chegar ao balco de check-in, demoram entre 2 e 3
minutos com distribuio uniforme entre estes 2 valores. No check-in, os viajantes
temque entrar emuma fila nica at que umdos 5 atendentes o atenda.Otempo no
check-in segue uma Distribuio de Weibull com parmetros = 3.91 e = 7.76.
Aps o check-in, eles podem se dirigir aos portes de embarque. Visando melhorar o
atendimento, deseja-se determinar uma srie de variveis tais como o tempo mdio
que um passageiro gasta desde de que chega no aeroporto at ser liberado para o
5.3 O software ARENA 105
embarque, o nmero mdio de viajantes na fila do check-in, o n
o
de passageiros
atendidos no check-in de 8:00 horas da manh at 22:00 horas, etc...
O modelo desta situao pode ser representado pelo grfico a seguir:
Chegada dos
Passageiros
Procura pelo
Check-in
Check-in
Sada para
embarque
Como fizemos no 1
o
exemplo, vamos construir um modelo equivalente no ARENA.
Nossos blocos bsicos ficam como:
O bloco de chegada idntico ao que j fizemos no exemplo anterior e escolhemos
EXPO(1.6,7) para a distribuio exponencial, usando a srie 7 da RAND4. Vamos
chamar de Passageiros a entidade que vai circular na simulao. Temos ento:
O 2
o
bloco referente a procura pelo balco de check-in. A ao, neste caso s De-
lay porque s h um atraso, uniformemente distribudo, para chegar at o balco.
O quadro preenchido fica da seguinte forma:
106 Modelos para simular filas de espera e o uso do ARENA
O bloco do check-in tambm bastante similar ao que vimos anteriormente com a
diferena de que escolhemos o nome de Atendentes para o recurso e a distribuio
do atendimento escolhida como WEIB(7.76,3.91,23), ou seja uma Weibull com os
parmetros dados e usando-se a srie 23 da RAND4. Temos ento:
5.3 O software ARENA 107
No bloco Dispose, para os portes, muda-se apenas o nome para Sada.
Neste momento devemos nos lembrar que temos 5 atendentes no balco de check-
in. Como informar isto ao modelo ? No lado esquerdo da tela do ARENA (onde esto
os blocos), rolando com o mouse vo aparecer desenhos de planilhas e uma delas
referente a Resources. Clicando nela vai aparecer, na parte inferior, uma planilha
referente aos recursos (atendentes no nosso caso). Um dos campos da planilha
Capacity que dever estar com1. Deve ser alterado para 5, como mostrado a seguir:
Podemos agora escolher um smbolo que represente os passageiros na dinmica da
simulao. No lado esquerdo, clicamos a planilha Entity. Vai abrir, em baixo a
direita, a planilha relativa aos passageiros. No campo Initial Picture, escolhemos a
108 Modelos para simular filas de espera e o uso do ARENA
figura Picture.women que um boneco representando uma mulher, como podemos
ver a seguir:
Para a fila, representada por uma linha contnua, vamos inicialmente aumentar
seu tamanho (clicando nela e puxando, com o mouse, as suas extremidades). A
seguir, vamos alterar a sua forma de linha para pontos. Dando um duplo click, o
seguinte quadro aparece:
Mudamos de Line para Point e depois clicando em Points.., vai abrir outro quadro
onde, clicando no boto Add, podemos ir colocando pontos ou seja lugares na fila
(at o mximo de 14). Neste exemplo colocamos 10 pontos. No final clica-se em OK.
5.3 O software ARENA 109
Para dar um toque mais realista a simulao, vamos acrescentar o balco do check-
in e os 5 pontos de atendimento. Iniciamos clicando, na 2
a
barra de botes em cima,
em que far com que a seguinte tela aparea:
Escolhendo Atendentes como Identif ier, podemos selecionar figuras para represen-
tar os atendentes ociosos (Idle) ou ocupados (Busy). importante notar que as
figuras que aparecem fazem parte da chamada biblioteca padro. Podemos (cli-
cando no open deste quadro) abrir outras bibliotecas que possuem outras figuras.
Para escolher uma figura para Idle, por exemplo, clica-se em Idle, clica-se na figura
desejada e depois clica-se em .
Antes de clicar em OK, devemos marcar Seize Area. Isto faz com que junto a figura
seja criada uma linha (semelhante a da fila) para identificar os pontos de atendi-
mento. No nosso exemplo criamos 5 pontos (de maneira similar ao feito para a fila)
pois temos 5 atendentes.
Para finalizar, vamos colocar um relgio para melhor visualizao do andamento
da simulao. Para tanto basta clicar no boto (clock) e arrast-lo apara a
rea de trabalho. Escolhemos 8:00 horas como a hora inicial marcada pelo relgio.
Nosso modelo est pronto e sua aparncia :
110 Modelos para simular filas de espera e o uso do ARENA
Ajustamos a seguir os parmetros da simulao (Run Setup) e escolhemos 14
horas para a durao da simulao (das 8:00 s 22:00 horas). A figura a seguir
mostra um retrato da simulao:
O relgio marca 01:37:54, ou seja j temos 5,5 horas de simulao sendo que 218
passageiros j chegaram, 208 j passaram pelo check-in sendo que os 5 atendentes
esto ocupados e 2 passageiros aguardam na fila. Temos tambm 3 passageiros
procurando pelo balco de check-in.
Dos relatrios emitidos ao final da simulao, podemos extrair, entre outros, os se-
guintes dados:
Passageiros atendidos pelo check-in das 8:00 s 22:00 : 524
Tempo total gasto, em mdia, por um passageiro, da entrada a sada : 13,19 minu-
tos
Menor tempo gasto por um passageiro, da entrada a sada : 4,91 minutos
Maior tempo gasto por um passageiro, da entrada a sada : 29,35 minutos
5.3 O software ARENA 111
Percentual de ocupao dos Atendentes : 89% do tempo
Nmero mdio de clientes na fila do check-in : 2,26 passageiros
Maior tempo gasto por um passageiro na fila do check-in : 26,90 minutos
Como j citado, dezenas de outros relatrios podem ser impressos com dados da
simulao.
5.3.3 Simulao de um processo de produo
Uma indstria eletrnica produz 2 medidores eletrnicos que chamaremos de A e
B. Basicamente os 2 aparelhos, embora com funes distintas, tem as mesmas ca-
ractersticas quais sejam, uma placa de circuito impresso, onde so soldados com-
ponentes, e uma embalagem de plstico com alguns botes.
As placas de circuito impresso e as embalagens so produzidas externamente e, ao
chegar a indstria, so enviadas para uma rea onde, as placas, so preparadas
para receber os componentes que sero soldados. Por sua vez, as embalagens so
pintadas e colocados os botes. Estas reas de preparao so, dadas as caracters-
ticas tcnicas, diferentes para os aparelhos A e B.
Aps a preparao, as placas e embalagens so enviadas para a rea de monta-
gem (nica para A e B) onde os componentes so soldados e o aparelho montado.
Nesta rea , ao final, feita uma inspeo de qualidade onde dados histricos tem
mostrado que 91% dos aparelhos acabados esto perfeitos e so enviados direta-
mente para a seo de venda. Os que no passam no controle de qualidade (9%),
so enviados para um outro setor onde as causas da rejeio so analisadas e, se
for o caso, corrigidas.
Dados estatsticos mostram que 80% dos aparelhos que caem neste setor conse-
guem ser recuperados e vendidos enquanto que os restantes 20% vo para sucata.
Foram efetuadas amostras estatsticas em todo o processo e ficou comprovado que
todas as atividades (chegadas, preparao, montagem, etc...) so processos aleat-
rios que seguem determinadas distribuies. A figura a seguir d a viso geral de
todo o processo:
112 Modelos para simular filas de espera e o uso do ARENA
Assim, as placas e embalagem do produto A, chegam seguindo uma distribuio
exponencial com intervalo mdio de 5 minutos entre chegadas. J as placas e em-
balagens do modelo B chegam, em lotes de 4, tambm seguindo uma distribuio
exponencial com intervalo mdio de 30 minutos entre chegadas.
O tempo de preparao de cada unidade tipo A segue uma distribuio triangular
com parmetros 1, 4 e 8 minutos enquanto que a do produto B tambm segue uma
triangular com parmetros 3, 5 e 10 minutos.
Aps preparados, tanto as placas como embalagens dos 2 produtos vo para a seo
de montagem. L, cada unidade do produto tipo A montada num tempo que segue
uma distribuio triangular com parmetros 1, 3 e 4 minutos. J uma unidade do
produto B montada em um tempo que segue uma Weibull com = 2.5 e = 5.3.
Os produtos rejeitados vo para a seo de reparo onde so consertados em um
tempo que tambm segue a distribuio exponencial com durao de 45 minutos.
Deseja-se simular esta situao para determinar algumas varveis tais como n
o
de
unidade na fila, tempo total de produo, etc...
Vamos construir o modelo no Arena. Inicialmente vamos construir um bloco Cre-
ate para a chegada dos componentes do produto A.
Escolhemos a srie 7 da RAND4 para a gerao das variveis aleatrias exponen-
cialmente distribudas. Criamos de forma idntica um bloco Create para as che-
gadas das placas e embalagens do produto tipo B. Temos ento:
5.3 O software ARENA 113
Devemos notar que Entities per Arrival foi alterado para 4, pois as placas e em-
balagens de B chegam em lotes de 4. Usamos a srie 22 para a Rand4.
Neste ponto temos que nos preocupar com um ponto que no apareceu nos modelos
anteriores. Depois de chegar e ser preparado, os componentes do modelo A vo
para a seo de montagem. No entanto com o modelo tipo B ocorre a mesma coisa,
ou seja ambos usam a seo de montagem mas com tempos seguindo distribuies
diferentes. No podemos definir 2 distribuies para o mesmo processo nem definir
2 processos porque na verdade s existe uma seo de montagem. Para contor-
nar isto, vamos definir um atributo Tempo de Montagem a quem atribuiremos o
tempo de montagem apropriado para cada tipo de produto. O bloco que faz estas
atribuies no Arena o Assign. Temos ento:
114 Modelos para simular filas de espera e o uso do ARENA
Demos o nome de Tempo de Montagem A e criamos, com o boto Add, 2 atributos:
Tempo Montagem informando a distribuio do tempo de montagem e Instante
Chegadas informando o instante da chegada, ou seja da criao, das peas de um
modelo A. Usamos a varivel TNOW que uma varivel do Arena que contm o
instante do evento que acabou de ocorrer, no caso a chegada dos componentes de
um modelo tipo A.
Obviamente temos que fazer o mesmo para o produto B.
Podemos agora criar os blocos (Process) para a etapa de preparao.
Para o tipo A temos:
5.3 O software ARENA 115
Para o tipo B temos:
Temos agora a Montagem onde devemos usar o atributo Tempo Montagem que
criamos anteriormente.
116 Modelos para simular filas de espera e o uso do ARENA
Aps montados, os produtos passam por uma inspeo de qualidade. Podemos
represent-la usando o bloco Decide. Temos ento:
Podemos escolher o percentual, no caso 9% de rejeio. Estes rejeitados vo para a
rea de conserto que, no Arena, ser representado por mais um bloco Process.
5.3 O software ARENA 117
Temos aps o conserto uma re-inspeo para verificar as que podem ser comercia-
lizadas. Temos ento mais um bloco de deciso. Podemos represent-lo usando o
bloco Decide. Temos ento:
Tendo definido todas as operaes, precisamos nos preocupar com a obteno das
informaes que queremos analisar.Lembre-se que, como parte da prpria simula-
o, ns obtemos estatsticas sobre a utilizao dos recursos, tamanho das filas e
espera em cada uma das filas. No entanto, queremos tambm informaes sobre a
durao do ciclo para os produtos que passam no controle de qualidade e para os
que no passam, queremos conhecer o ciclo dos que so consertados e dos que vo
para a sucata. O bloco Record permite que se tenha estes dados. Para os que vo
para a sucata, temos:
Para Type, escolhemos Time Interval e no atributo escolhemos Instante Chegada.
Comisto o Arena vai registrar cada durao desde que as partes do produto chegam
118 Modelos para simular filas de espera e o uso do ARENA
at irem para a sucata. Para os demais itens (comercializadas direto e comerciali-
zados aps reparo), o procedimento o mesmo.
Finalmente no podemos esquecer dos mdulos de sada, ou seja Dispose. Aps
coloc-los, nosso modelo tem a seguinte aparncia:
5.3 O software ARENA 119
Executando a simulao para um perodo de 32 horas, os seguintes resultados fo-
ram obtidos nos relatrios impressos pelo Arena:
Espera mdia na Fila (W
q
) Minutos
Na prep A 1,65
Na prep B 5,78
Na montagem 12,11
No conserto 421,96
Tamanho mdio da Fila (L
q
)
Na prep A 0,33
Na prep B 0,90
Na montagem 4,31
No conserto 13,27
Vendas Quantidade
Direto 610
Consertados 33
Utilizao do Recurso () %
Prep A 54
Prep B 35
Montagem 88
Conserto 93
Os resultados mostram que temos um problema na rea de conserto. Ao final da
simulao, existiam 19 modelos na fila aguardando reparo. Pode-se ver tambm
que a rea est ocupada quase 100% do tempo. Para se melhorar o processo de
produo, teramos que aumentar a capacidade de produo da seo de conserto.
5.3.4 Consideraes finais
O que vimos, at aqui, do ARENA deve representar de 10% a 20% do que pos-
svel fazer com o software. Modelos bastante sofisticados e anlise de custos so
possveis de serem realizados. Alm disto o ARENA possui outros mdulos, como
por exemplo o Input Analyzer em que, a partir de dados coletados em uma amos-
tragem, pode-se determinar a distribuio que melhor adere queles dados.
Atravs dos exemplos e com o help que vem com o prprio software possvel,
mesmo sem um curso especfico, se usar o software em simulaes com razovel
nvel de sofisticao. Obviamente que se for possvel fazer um curso, o uso e o do-
mnio do programa se dar em menos tempo.
Para finalizar vamos apresentar a tela de um modelo de simulao de uma agn-
cia bancria. Este exemplo vem no prprio CD do Arena e mostra como possvel
desenhar modelos mais sofisticados.
120 Modelos para simular filas de espera e o uso do ARENA
5.4 Exerccios 121
5.4 Exerccios
1) Usando o mtodo dos quadrados mdios, calcule os 12 primeiros nmeros gera-
dos, com 4 dgitos, a partir de uma semente igual a 7308.
2) Use o mtodo congruente linear para gerar um seqencia de 3 nmeros aleat-
rios de 2 dgitos. Use x
0
= 27, a = 8, c = 47 e m = 100.
3) Encontramos algum problema no exerccio anterior se x
0
= 0 ?
4) Considere o mtodo congruente multiplicativo para os seguintes casos:
a) a = 11 m = 16 x
0
= 7
b) a = 11 m = 16 x
0
= 8
c) a = 7 m = 16 x
0
= 7
d) a = 7 m = 16 x
0
= 8
Gere, para cada caso, todo o perodo. O que podemos inferir dos resultados
encontrados ?
5) Construa, para a RAND2, um cubo idntico ao mostrado na pgina 21 para o
gerador RANDU.
6) Pesquise na internet para descobrir qual a frmula usada pela planilha Excel
no seu gerador de nmeros aleatrios padro.
7) Desenvolva um gerador de nmeros aleatrios, usando o mtodo da transforma-
o inversa, para a seguinte distribuio probabilstica:
f(x) =
_
e
2x
, < x 0
e
2x
, 0 < x <
8) Idem para:
f(x) =
_

_
1
3
, 0 x 2
1
24
, 2 < x 10
0, x > 10
9) Com uma calculadora que tenha a funo para gerar nmeros aleatrios uni-
formemente distribudos em [0, 1], gere 10 nmeros seguindo a distribuio de
Poisson com mdia () igual a 2, 5.
122 Modelos para simular filas de espera e o uso do ARENA
10) Modifique o programa da pgina 48 para calcular a probabilidade de um valor
(x) de uma distribuio normal, com mdia () igual a 1.500 e desvio padro
() igual a 300, estar entre 1.300 e 1.800. Use, no programa, a frmula da
distribuio normal:
f(x) =
1

2
2
e

(X )
2
2
2
Compare o valor obtido pela simulao com o valor obtido da tabela normal.
11) A gerente de uma loja de eletro-domsticos est desconfiada que o seu estoque
de foges est acima do que seria necessrio. Antes de modificar a poltica de
estoques, ela registrou o nmero de foges vendidos, diariamente, nos ltimos
25 dias. Os dados encontrados esto mostrados a seguir:
Foges vendidos 2 3 4 5 6
Nmero de dias 4 7 8 5 1
a) Use os dados para estimar a distribuio de probabilidade das vendas dirias
de foges.
b) Calcule a mdia da distribuio obtida na parte (a).
c) Descreva como nmeros aleatrios uniformemente distribudos em [0, 1] po-
dem ser usados para simular as vendas dirias.
d) Usando os nmeros aleatrios 0.4475, 0.9713 e 0.0629, simule as vendas di-
rias de 3 dias.
e) Usando uma planilha eletrnica (Excel, por exemplo), faa um modelo para
simular as vendas dirias. Realize 300 replicaes e obtenha a mdia de
vendas dirias.
12) Utilizando como sementes os valores 1234, 76545, 88787, 77712, 564783 e 5434
encontre os 3 primeiros nmeros gerados pela RAND4.
13) Pesquise e descubra os comandos para a gerao de nmeros aleatrios no Turbo
Pascal, inclusive com a escolha da semente.
14) Utilizando uma planilha eletrnica (Excel, por exemplo), construa um modelo
para a seguinte situao: Um posto de gasolina do governo, que tem somente
uma bomba de gasolina, est sempre aberto e tem 2 tipos de clientes. Uma
ambulncia chega, exatamente, a cada 30 minutos, com o 1
o
carro chegando
no instante, 15 minutos. Carros de outras reparties pblicas, que no so
ambulncias, chegam com um intervalo mdio entre chegadas, exponencial, de
5, 6 minutos, com o 1
o
carro chegando no instante 0. O tempo de servio, para
todos os tipos de carros, tem uma mdia de 4, 8 minutos (exponencial).
Um carro que chega e encontra a bomba vazia vai ser atendido imediatamente
enquanto que os que chegam com a bomba ocupada, formam uma fila nica.
Isto s no vale para as ambulncias que, ao chegar, vo imediatamente para o
5.4 Exerccios 123
incio da fila (assuma que, se j tem uma ou mais ambulncias no incio da fila,
esta nova chegada passa a ser a 1
a
da fila). Considere que no incio da simulao
(instante 0), o posto est vazio. Execute a simulao at que 500 carros, no total,
tenham sido atendidos. Estime o tempo de espera mdio na fila para os 2 tipos
de carro, o nmero mdio de carros na fila para os 2 tipos de carro e a taxa de
ocupao da bomba de gasolina.
15) Desenvolva um modelo para um sistema com 2 processos consecutivos (I e II).
Os tens chegamao sistema comintervalo, mdio, entre chegadas de 10 minutos.
Assim que chegam, os tens so imediatamente enviados para o processo I que
temuma fila ilimitada e umrecurso simples comuma durao, mdia, do servio
de 9 minutos. Aps terminar o 1
o
processo, os tens so enviados para o processo
II que idntico ao processo I. Aps o servio do processo II ser completado,
os tens deixam o sistema. As medidas de interesse no sistema so o nmero
mdio de tens na fila, em cada processo, e o tempo total, mdio, que um tem
permanece no sistema. Usando 10.000 minutos como a durao a ser estudada,
faa as 4 simulaes a seguir e compare os resultados.
a) Intervalo entre chegadas exponencial e durao do servio exponencial.
b) Intervalo entre chegadas exponencial e durao do servio constante.
c) Intervalo entre chegadas constante e durao do servio exponencial.
d) Intervalo entre chegadas constante e durao do servio constante.
16) Peas chegam a uma estao de trabalho com um intervalo, mdio, entre che-
gadas de 21 segundos (exponencial). Aps a chegada, as peas so processadas.
O tempo de processamento segue uma distribuio triangular com parmetros
16, 19 e 22. Existem caractersticas visuais que determinam se uma pea tem
um eventual problema de qualidade. Esto peas, que so cerca de 10% do total,
so enviadas para outra estao onde sofrem uma rigorosa inspeo. As demais
(90%) so enviadas para a expedio e consideradas boas.
A distribuio do tempo de inspeo rigorosa , em mdia, igual a 95 segundos
mais uma varivel aleatria que segue uma distribuio de Weibull com par-
metros iguais a 48,5 e 4,04. Em torno de 14% das peas que sofrem inspeo,
so reprovadas e viram sucata. As demais vo para a expedio.
Execute a simulao para 10.000 segundos para determinar o nmero de peas
boas, o nmero de peas sucateadas e o nmero de peas que so inspecionadas
parcialmente e rigorosamente.
17) Clientes chegam a uma caixa com um intervalo, mdio, entre chegadas igual
a 10 minutos (exponencial). Um nico funcionrio recebe o pagamento alm
de conferir o pedido. Ele demora, em mdia, entre 8 a 10 minutos para fazer
estas tarefas, variando a durao uniformemente naquele intervalo. Aps esta
atividade estar completada, o cliente , aleatoriamente, atribudo a um de 2
funcionrios do estoque que separam e embalam a mercadoria para entregar
ao cliente. O tempo desta atividade tambm uniformemente distribudo entre
124 Modelos para simular filas de espera e o uso do ARENA
16 e 20 minutos. Cada um dos 2 funcionrios do estoque s podem atender
clientes que foram designados para ele. Aps receber sua mercadoria, o cliente
vai embora.
Desenvolva um modelo e rode a simulao para 5.000 minutos.
H uma sugesto de que os 2 funcionrios possam atender qualquer cliente que
ficariam em uma fila nica esperando atendimento. Rode a simulao tambm
para 5.000 minutos e compare os resultados.
Apndice A
Tabela do
2
0,25 0,10 0,05 0,025 0,01 0,005 0,001

1 1,32 2,70 3,84 5,02 6,63 7,87 10,82


2 2,77 4,60 5,99 7,37 9,21 10,59 13,81
3 4,10 6,25 7,81 9,34 11,34 12,83 16,26
4 5,38 7,77 9,48 11,14 13,27 14,86 18,46
5 6,62 9,23 11,07 12,83 15,08 16,75 20,51
6 7,84 10,64 12,59 14,44 16,81 18,54 22,45
7 9,03 12,01 14,06 16,01 18,47 20,27 24,32
8 10,21 13,36 15,50 17,53 20,09 21,95 26,12
9 11,38 14,68 16,91 19,02 21,66 23,58 27,87
10 12,54 15,98 18,30 20,48 23,20 25,18 29,58
11 13,70 17,27 19,67 21,92 24,72 26,75 31,26
12 14,84 18,54 21,02 23,33 26,21 28,30 32,90
13 15,98 19,81 22,36 24,73 27,68 29,81 34,52
14 17,11 21,06 23,68 26,11 29,14 31,31 36,12
15 18,24 22,30 24,99 27,48 30,57 32,80 37,69
16 19,36 23,54 26,29 28,84 32,00 34,26 39,25
17 20,48 24,76 27,58 30,19 33,40 35,71 40,79
18 21,60 25,98 28,86 31,52 34,80 37,15 43,31
19 22,71 27,20 30,14 32,85 36,19 38,58 43,82
20 23,82 28,41 31,41 34,17 37,56 39,99 45,31
21 24,93 29,61 32,67 35,47 38,93 41,40 46,79
22 26,03 30,81 33,92 36,78 40,28 42,79 48,26
23 27,14 32,00 35,17 38,07 41,63 44,18 49,72
24 28,24 33,19 36,41 39,36 42,98 45,55 51,17
25 29,33 34,38 37,65 40,64 44,31 46,92 52,62
26 30,43 35,56 38,88 41,92 45,64 48,29 54,05
27 31,52 36,74 40,11 43,19 46,96 49,64 55,47
28 32,62 37,91 41,33 44,46 48,27 50,99 56,89
29 33,71 39,08 42,55 45,72 49,58 52,33 58,30
30 34,80 40,25 43,77 46,97 50,89 53,67 59,70
40 45,61 51,80 55,75 59,34 63,69 66,76 73,40
50 56,33 63,16 67,50 71,42 76,15 79,49 86,66
126 Tabela do
2
Bibliograa
[1] Averril M. Law and W.David Kelton, Simulation Modeling and Analysis, 3
a
Edition, McGraw-Hill, 2000.
[2] W. David Kelton, Randall P. Sadowski and Deborah A. Sadowski, Simulation
with Arena, 2
a
Edition, McGraw-Hill, 2000.
[3] Paulo Jos de Freitas Filho, Introduo a Modelagem e Simulao de Siste-
mas, Visual Books, 2001.
[4] Kevin Watkins, Discret Event Simulation in C, McGraw-Hill, 1993.
[5] Jerry Banks, John S. Carson II and Barry L. Nelson, Discret-Event System
Simulation, 2
a
Edition, Prentice Hall, 1996.
[6] James R. Evans and David L. Olsen, Introduction to Simulation and Risk
Analysis, Prentice-Hall, 1998.
[7] Donald E. Knuth, The Art of Computer Programming, Volume 2, Addison-
Wesley, 1998.
[8] Clovis Perin Filho, Introduo Simulao de Sistemas, Editora da Unicamp,
1995.
[9] Thomas J. Schriber, An Introduction to Simulation, John Wiley & Sons, 1991.
[10] Byron J.T. Morgan, Elements of Simulation, Chaoman and Hall, 1984.
[11] Michael Pidd, Computer Simulation in Management Science, John Wiley &
Sons, 1984.
[12] Byron S. Gottfried, Elements of Stochastic Process Simulation, Prentice-Hall,
1984.
[13] Hugh J. Watson and John H. Blackstone Jr., Computer Simulation, 2
a
Edition,
John Wiley & Sons, 1989.
[14] Zaven A. Karian and Edward J. Dudewicz, Modern Statistical, Systems and
GPSS Simulation, 2
a
Edition, CRC Press, 1999.
[15] James A. Chisman, Introduction to Simulation Modeling using GPSS,
Prentice-Hall, 1992.

Você também pode gostar