Escolar Documentos
Profissional Documentos
Cultura Documentos
Niterói
2013
Fabio Mascarenhas Loureiro
Niterói
2013
Fabio Mascarenhas Loureiro
BANCA EXAMINADORA
Valentin Sisko
Doutor em Estatı́stica
CDD -
Dedico este trabalho àquelas pessoas que me
ajudaram e me apoiaram até aqui mas que não
resistiram para compartilhar deste momento
junto a mim.
Resumo
Não poderia deixar de agradecer algumas pessoas que fizeram parte do meu
desenvolvimento pessoal (DCE): Linda, Cissa, Dani, Thalita, Paola, Keilane, Leo(a),
Luciana(p), Nadine, Pablo, Bruno, Evandro, Riba, Barrientos, Garçom da Mineira, China,
Orelha, Nariz, Paulista, Ubá, José, Natan e Lage.
Gostaria ainda de não só agradecer, mas também dedicar este trabalho a quatro
pessoas. Pessoas que foram e continuarão sendo muito importantes na minha vida.
Pai (Hélio), depois que entrei na faculdade nunca mais o vi, mas saiba, aonde
estiver, que sempre quis poder conversar e dizer tudo que cresci e evoluı́.
Regina, você pode não ver o término desta etapa da minha vida, não fisica-
mente, mas sei que está olhando e torcendo por mim. Obrigado pela ajuda no inı́cio da
faculdade e por me dar a oportunidade de ter te conhecido. Ao pegar o diploma, lembrarei
da sua fala: “Estarei velhinha e indo lá te ver formando!”. Tenho certeza que estará!
Tia (Bené), nunca esquecerei a sra. Você tinha um sentimento por mim e pela
minha mãe que inexplicavelmente é maior do que o de muitas pessoas que já passaram
por nossas vidas. Não só agradeço, mas afirmo que sempre lembrarei do auxı́lio e “dicas”
que me deu em vida. Obrigado!
Por último, mas não menos importante, gostaria de agradecer a pessoa que me
incentivou e acreditou desde sempre na minha capacidade, meu avô (Carlos). É com uma
alegria, seguida de profunda tristeza, que escrevo este agradecimento. Vô, infelizmente
não está comigo agora, mas cada etapa, cada passo que der, estarei lembrando de tudo
que me disse e me ensinou. O sr. ajudou a construir a pessoa que sou hoje e, por todo
o tempo, paciência, dedicação e incentivo que me deste serei eternamente grato. Você
teve a mim como um filho e eu o considero como tal! Não poderei abraçá-lo após minha
apresentação nem após meu último dia na faculdade, mas sempre lembrarei de você. Por
isso, mesmo não estando comigo fisicamente, estará sempre presenta na minha vida.
4
Sumário
Lista de Figuras 7
Lista de Tabelas 8
1 Introdução 9
4 Simulação de Sistemas 24
5.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2 Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2.3 Comentários . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6 Conclusões 51
Lista de Figuras
1 Introdução
Ao modelar um sistema que envolve variáveis estocásticas muitas vezes é pre-
ciso optar entre um modelo mais fiel à realidade ou outro modelo que seja mais matemati-
camente tratável. Como por exemplo, ao modelar um sistema bancário pode-se optar por
um modelo mais realista que considere chegadas não homogêneas ao longo do dia, variação
no tempo de atendimento entre diferentes atendentes, possı́veis faltas de funcionários ou
até mesmo pausas durante o expediente. Porém para que esse sistema tenha uma solução
analı́tica é preciso simplificá-lo bastante, por exemplo, considerar as chegadas homogêneas
e descartar as demais complicações citadas.
Um dos métodos mais utilizados para se tentar realizar tal simulação é o mé-
todo congruencial multiplicativo (Ross, 2006; Gentle, 2003). A proposta deste gerador é
construir uma sequência de números pseudo-aleatórios onde, primeiramente é gerada uma
sequência de números naturais {xn }∞
n=1 de acordo com a expressão (2.1), que calcula, de
xn
un = (2.2)
m
Exemplo 2.1.1. Ao definir x0 = 1, a = 5 e m = 139, os dez primeiros termos da sequência
xn serão gerados da seguinte maneira:
2.1 Números Pseudo-Aleatórios 12
u1 = 5/139 = 0, 0359
u2 = 25/139 = 0, 1799
u3 = 125/139 = 0, 8993
u4 = 69/139 = 0, 4964
u5 = 67/139 = 0, 4820
u6 = 57/139 = 0, 4101
u7 = 7/139 = 0, 0504
u8 = 35/139 = 0, 2518
u9 = 36/139 = 0, 2590
u10 = 41/139 = 0, 2950
Como foi visto, este método utiliza 3 parâmetros para ser inicializado e todos
devem ser fornecidos pelo programador, assim, é razoável que se tome algumas medidas
para maior eficiência do método.
Para este trabalho só foi utilizado o método congruencial multiplicativo, assim,
para maiores detalhes acerca de outros métodos de geração veja Ross (2006).
1 Gera discreta
2
3 Gerar uma variável aleatória U ∼ U nif (0, 1), isto é, um número pseudo-aleatório;
4 Definir i = 0 e F = P0 ;
5 Se U < F , retorna xi ;
2.2 Geração de Variáveis Aleatórias 15
6 Incrementa i : i = i + 1;
7 Incrementa F : F = F + Pi ;
8 Voltar para a linha 5.
Exemplo 2.2.1. Considere uma variável aleatória X com distribuição dada por:
X 0 1 2
P(X = xj ) = pj 1/4 1/2 1/4
Nesse exemplo, mostramos abaixo como pode-se gerar X usando como base o
pseudo-código gera discreta.
Note que para se obter uma amostra com vários elementos, basta replicar o
procedimento descrito diversas vezes.
1 Gera contı́nua
2
3 Gerar uma variável aleatória U ∼ U nif (0, 1), isto é, um número pseudo-aleatório;
4 Retornar X = F −1 (U ).
Veja que assim observação gerada realmente vem de uma população cuja dis-
tribuição acumulada é dada por F :
Exemplo 2.2.2. Seja X uma variável aleatória com densidade f (x) = 2x, 0 < x < 1. Logo,
a distribuição acumulada é dada por
0, se x<0
F (x) = x2 , se 0 ≤ x < 1
x≥1
1, se
Suponha que se quer gerar um valor de X e para isso o pseudo código“Gera contı́nua”.
Primeiramente deve-se encontrar a função de distribuição acumulada inversa:
X 2 = U ⇒ X = U 1/2
Definição 2.2.3. Seja X uma variável aleatória contı́nua com função de densidade de
probabilidade dada por
−ln(1 − u)
F (x) = 1 − e−λx ⇒ F −1 (u) = .
λ
Vide então que o método da transformada inversa pode ser facilmente utilizado
para a geração de variáveis aleatórias com distribuição exponencial como é mostrada no
pseudo-código Gera exponencial implementado a seguir.
1 Gera exponencial
2
Podemos simplicar ainda mais este código uma vez que U ∼ U nif (0, 1) ⇒
1 − U ∼ U nif (0, 1). Logo, podemos alterar nosso método de geração para uma forma um
pouco mais simples, computacionalmente e matematicamente. Desta forma, temos que
1 Gera exponencial
2
ii. N (t) ≥ 0;
iii. N (t) é um valor oriundo de um contagem, portanto deve ser um valor inteiro;
v. Dado s < t, então N (t) − N (s) deve ser igual ao número de eventos ocorridos no
intervalo (s, t].
i. N (0) = 0;
3.1 Processo de Poisson 20
ii. O processo possui incrementos independentes;
(λt)n
P {N (t + s) − N (s) = n} = e−λt , n = 0, 1, . . .
n!
Observe que à partir de iii temos que E[N (t)] = λt e devido a isto λ é chamado
de taxa do processo.
Demonstração:
FT 1 (t) = P (T1 ≤ t)
= 1 − P (T1 > t)
= 1 − P (nenhum evento ocorrer em (0, t))
= 1 − P (N (t) = 0)
0 , se t < 0;
=
1 − e−λt , se t ≥ 0.
Logo, FT1 (t) = 1 − e−λt , t ≥ 0. O que nos faz concluir que T1 ∼ Exp(λ)
Então, Xi ∼ Exp(λ).
i. N (0) = 0;
Proposição 3.2.2. Suponha que eventos ocoram de acordo com um processo de Poisson
homogêneo com taxa λ. Suponha também que, independente de qualquer coisa que tenha
acontecido, um evento que ocorra no instante t é contado com probabilidade p(t). Então
este processo de contagem obedece um processo de Poisson não homogêneo com função
de intensidade λ(t) = λp(t).
1 Prox t h
2
3 Entrada: t > 0;
4 Gera U ∼ U nif (0, 1);
ln(U )
5 t=t− λ
;
6 Retornar t.
Uma vez já implementada esta função, caso queira gerar n tempos de ocorrên-
cia de eventos, basta utilizar esta função sucessivas vezes, atualizando sempre o t como o
tempo da última ocorrência.
Como já citado anteriormente, nem todos os processos que se deseja modelar
são bem ajustados a um processo de Poisson homogêneo. Alguns sistemas podem não
possuir suas taxas de chegada constantes ao longo do tempo, mas sim variáveis.
1 Prox t
2
3 Entrada: t > 0;
4 Gerar U ∼ U nif (0, 1);
ln(U )
5 t=t− λ
;
6 Gerar V ∼ U nif (0, 1);
7 Se V ≤ λ(t)/λ retorne t, senão:
8 Volte para a linha 4.
4 Simulação de Sistemas
Apresentando o conceito de modelo, este é, por definição, uma representação
estática do mundo. A simulação então adiciona aspectos temporais ao “modelo” buscando
representar como o sistema modelado varia no decorrer do tempo. Assim, a simulação
pode ser definida como uma representação tempo-variável do modelo (Sokolowski e Banks,
2009).
Vide pela definição, então, que os modelos apresentados e os que serão imple-
mentados ao longo do trabalho são modelos de simulação estocástico de eventos discretos.
Segue então que, o princı́pio de uma simulação deve ser a definição das variáveis
que serão utilizadas bem como os eventos possı́veis, pois serão eles que irão nortear nosso
algoritmo para uma maior proximidade da realidade. Para o sistema deste trabalho usou-
se basicamente três tipos de variáveis:
1. Variáveis que definem o sistema - tempo máximo T que o servidor irá funcionar;
e taxa de chegada λ(t) dos clientes no sistema;
4.2 Sistema com um servidor e fila única 27
2. Variáveis de interesse - um array que guarda o horário de chegada dos clientes
no sistema, denominado N A; um array que guarda o horário de saı́da dos clientes,
denominado N D;
1 Inicialização:
2 t = 0;
3 ta = ∞;
4 tc = prox t(0);
5 n = 0;
6 S = 0.
7 N A = N D = N U LL;
8
Note que para a obtenção de estatı́sticas tais como tempo médio de atendi-
mento e ou total de clientes atendidos no sistema, basta analisarmos as variáveis N A,
N D e S. A exemplo, sendo N A e N D arrays que guardam o horário de chegada e saı́da
dos clientes, logo N A − N D é um array que guarda o tempo que cada cliente ficou no
sistema.
Saı́da de clientes
Servidor 1
Entrada de Clientes ..
.
Clientes
Saı́da de clientes
Servidor k
Para este tipo de sistema deve-se levar em consideração algo que não era im-
portante para um sistema com um único servidor. Na seção 4.2 seguia-se um sistema
FIFO, coisa que neste tipo de sitema não podemos afirmar. Ou seja, o i-ésimo cliente que
chega ao sistema não necessariamente será o i-ésimo cliente a sair do sistema, uma vez
que este pode demorar mais no atendimento do que outro cliente que chegue depois dele.
1. Variáveis que Definem o Sistema - tempo máximo que o servidor irá funcionar
(T ); e taxa de chegada dos clientes no sistema (λ(t));
1 Inicialização:
2 t = 0;
3 ta = (∞, . . . , ∞);
4 n = 0;
5 S = 0;
6 tc = prox t(0);
7 N A = N D = N U LL;
8
Caso queira inferir em cima dos dados simulados vale as considerações realiza-
das na seção 4.2, basta utilizar N A, N D, S e qualquer outro tipo de variável de interesse
que o pesquisador queira incrementar no pseudo-código implementado. São exemplos de
variáveis que não estamos controlando neste pseudo-código: tamanho máximo da fila e
quantidade de pessoas atendidas por servidor. Note também que os servidores atendiam
todos segundo uma função G e caso queira tornar os sistema mais real deve-se levar
em consideração uma distribuição diferente para cada servidor, já que, usualmente, os
atendentes, servidores, dificilmente atenderão de forma idêntica.
Para este sistema, tal qual na Seção 4.3, o sistema não segue um padrão F IF O.
Entretanto, aqui o cliente opita por qual servidor será atendido logo na sua chegada, en-
4.4 Sistema com vários servidores e filas em paralelo 32
quanto que, no sistema da seção 4.3, os clientes escolhiam isto na exata hora do atendi-
mento.
Fila 1 Servidor 1
.. ..
. .
Fila k Servidor k
1. Variáveis que definem o sistema - tempo máximo que o servidor irá funcionar
(T ); e taxa de chegada dos clientes no sistema λ(t);
Com as variáveis definidas, tem-se que o pseudo-código para este tipo de sis-
tema pode ser implementado como é mostrado a seguir.
1 Inicialização:
2 t = 0;
3 ta = (∞, . . . , ∞);
4 n = 0;
4.4 Sistema com vários servidores e filas em paralelo 33
5 S = 0;
6 f ila = (0, . . . , 0);
7 N A = N D = N U LL;
8 tc = prox t(0);
9
Alcançar tal resultado seria bastante complexo, talvez até impossı́vel, analiti-
camente devido a dificuldade em trabalhar com taxas de chegada não homogêneas, por
exemplo.
Existem duas versões principais dessa lei, a versão fraca e a forte. A dife-
rença entre elas é o tipo de convergência usada: a lei fraca garante a convergência em
probabilidade enquanto a versão forte garante a convergência quase certa.
Pela lei dos grandes números podemos garantir que Wi −−−→ E[T ]. Dessa
i→∞
forma o número de simulações será determinado pela variável Wi . Enquanto Wi varia
muito, deve-se continuar simulando. A partir do momento que Wi varia pouco com a
atualização feita devido a novas simulações, podemos assumir que Wi já está próximo do
seu limite, logo próximo de E[T ]. Nesse caso assumimos que o último Wi calculado é uma
boa aproximação para o valor procurado E[T ].
36
Neste capı́tulo será apresentada uma aplicação dos conceitos falados até agora
para simular um sistema de elevadores. Nas Seções 5.2 e 5.3 serão apresentadas desde
a implementação do pseudo-código utilizado na simulação do sistema até a extração das
informações e posterior análise das mesmas. Serão realizada também comparações acerca
das melhores formas de disposição do sistema, visando otimizar os tempos de espera dos
clientes.
5.1 Introdução
Devido a isto, é comum nos depararmos com longas filas ou uma grande quanti-
dade de elevadores que ficam em desuso por não considerar a taxa de chegada dos clientes
naquele local.
Tendo em vista tais problemas, neste capı́tulo iremos abordar algumas manei-
ras de se dispor um sistema de elevadores, de modo a poder otimizar o tempo gasto pelas
pessoas na fila e a quantidade de elevadores ótima.
5.2 Algoritmo
Veja que para as simulações seguintes foram incluı́das uma lista de funções
úteis para a implementação do algoritmo. Tais funções servirão para descrever de forma
mais realı́tica o fenômeno que se quer simular.
1. Variáveis que definem o sistema - tempo máximo que o servidor irá funcionar
(T ); taxa de chegada dos clientes no sistema (λ); número máximo de pessoas por
elevador, (max elevador); quantidade de elevadores no sistema (n elevadores); e
número de andares (n andares);
Além das variáveis, foram utilizadas algumas funções úteis durante a simulação
com o intuito de gerar os andares escolhidos pelos passageiros, atualizar o tempo de viagem
dos elevadores dentre outras.
1 Inicialização:
2
3 N A = N D = N U LL;
4 Nc = Ne = 0;
5 max f ila = 0;
6 andaresn andares×n elevadores = 0;
7 tc = prox t(0);
8 temp volta = (∞, . . . , ∞);
9 temp viag = (∞, . . . , ∞);
10 n f ila = 0;
11
12 Caso 1: tc < min(temp viag) e tc < min(temp volta) (um passageiro chega na fila)
13
14 t = tc ;
15 Nc = Nc + 1;
16 N A[Nc ] = t;
17 Se existe algum elevador no térreo e seja i o seu ı́ndice:
18 - - Ne = Ne + 1;
19 - - N D[Ne ] = t;
5.2 Algoritmo 39
20 - - Atualizar o vetor andares[i, ] com o andar escolhido pelo passageiro;
21 - - Atualizar temp viag[i];
22 - - tc = prox t(t);
23 Caso não exista elevador no térreo, e seja k o elevador que irá descer primeiro;
24 - - Se n f ila = 0, então:
25 - - - Atualizar temp volta[k];
26 t c = prox t(t);
27 n f ila = n f ila + 1;
28
29 Caso 2: min(temp viag) < tc , min(temp viag) < min(temp volta) (o elevador vai
30 parar)
31
35 Caso 3: min(temp volta) < tc ) e min(temp volta) < min(temp viag) (o elevador será
36 recarregado)
37
Para a definição dos intervalos de parada foi utilizada a divisão mais igualitária
possı́vel dentre a quantidade de elevadores disponı́veis. Assim, supondo um sistema com
três elevadores e onze andares, os intervalos seriam elevador1 = [1, 2, 3, 4], elevador2 =
[5, 6, 7, 8] e elevador3 = [9, 10, 11]. Note que o intervalo de andares é formado de forma
consecutiva.
1. Variáveis que definem o sistema - tempo máximo que o servidor irá funcionar
(T ); taxa de chegada dos clientes no sistema (λ); número máximo de pessoas por
elevador (max elevador); quantidade de elevadores no sistema (n elevadores); e o
número de andares (n andares).
1 Inicialização:
2
12 Caso 1: tc < min(temp viag) e tc < min(temp volta) (Chega um passageiro na fila)
13
14 t = tc ;
15 Nc [j] = Nc [j] + 1, onde j corresponde ao elevador que o passageiro usará;
16 N A[[j]] = t, atualiza N A de acordo com o elevador escolhido;
17 Se existe algum elevador no térreo (passageiro entra direto):
18 - - Ne [j] = Ne [j] + 1;
19 - - N D[[j]] = t, atualiza N D de acordo com o elevador escolhido;
20 - - atualiza andares[[j]] de acordo com o andar escolhido;
21 - - atualiza temp viag[j];
22 - - tc = prox t(t);
23 Senão:
24 - - atualiza temp volta;
5.2 Algoritmo 42
25 - - tc = prox t(t);
26 - - n f ila[j] = n f ila[j] + 1;
27
28 Caso 2: min(temp viag) < tc ) e min(temp viag) < min(temp volta) (Um elevador
29 vai parar)
30
35 Caso 3: min(temp volta) < tc e min(temp volta) < min(temp viag) (Um elevador
36 será recarregado)
37
Primeiramente, note que não foi enunciado sobre o tipo de fila utilizado no
sistema 2. Isto se deve ao fato de, no sistema 2, o indivı́duo ao escolher o andar desejado,
já escolhe automaticamente o elevador que lhe atenderá, criando diretamente uma fila
para cada elevador.
Dito isto, foi utilizado o software estatı́stico R, versão 2.15.1 para realizarmos
a simulação e podermos analisar cada modelo.
Com base na Lei dos Grandes Números apresentada na Seção 4.5, utilizaremos
o vetor W para checarmos se a quantidade de dias simulados foi suficiente e qual o tempo
médio dentro de sistema por passageiro.
Entretanto, como já foi apresentado, a chegada dos passageiros no sistema pode
se comportar de forma homogênea ou não homogênea. Por isto, realizamos simulações
distintas para cada tipo de taxa de chegada.
Inicialmente foram gerados para cada sistema cem iterações com a quantidade
de elevadores variando de um à cinco.
λ
2 3 4 5 6 7 8
E
λ
2 3 4 5 6 7 8
E
correta, uma vez que os dois sistemas são idênticos para este caso. Por outro lado, não
podemos generalizar quando nos referimos ao melhor sistema.
Como já falado anteriormente, os valores obtidos nas Tabelas 5.3 e 5.4, foram
obtidos através do vetor W . Assim, dispomos nas Figuras 5.1, 5.2, 5.3 e 5.4 os gráficos
dos vetores W ’s obtidos para os sistemas cujo λ ∈ {2, 3, 4, 5} e possuiam três elevadores.
Nas tabelas 5.5 e 5.6 estão alocados os tempos médios de permanência dos
passageiros em cada combinação E × λ para os sistemas 1 e 2.
Por outro lado quando comparamos os resultados obtidos para λ2 (t), notori-
amente o sistema 2 foi o mais eficiente. De forma similar à λ1 (t), este resultado já era
esperado pois os possı́veis valores da função λ2 (t) se encontram em um intervalo mais
amplo e como já havı́amos visto para o caso homogêneo, conforme vamos aumentando a
taxa de chegada, o sistema 2 passa a ser mais eficáz.
E λ1 (t) λ2 (t)
1 141.537 799.131
2 17.345 328.891
3 0.938 178.035
4 0.793 129.446
5 0.797 117.931
E λ1 (t) λ2 (t)
1 141.440 798.419
2 10.236 253.235
3 1.212 96.832
4 1.001 36.606
5 0.931 11.729
Note que como já foi dito, nos gráficos de 5.6 o melhor sistema é notoriamente
melhor do que o segundo, ou seja, o sistema parando em todos os andares nos retorna um
tempo médio estimado de atendimento dos passageiros menor do que o caso de elevadores
parando em intervalos de andares. Entretanto, quando olha-se para os gráficos de 5.7,
o melhor modelo de fato passa ser o segundo, com o elevador parando em intervalo de
andares.
Assim, verificamos que como na seção 5.4, para um λ não homogêneo, obtemos
diferentes “sistemas ótimos”, variando de acordo com a quantidade de elevadores e função
λ(t) usada.
6 Conclusões
O intuito deste trabalho foi analisar o tempo médio de passageiros em um
sistema de elevadores. Para isso, usamos duas abordagens: uma com os elevadores pa-
rando em todos os andares e outra com cada elevador parando em andares especı́ficos.
As simulações foram realizadas com número de elevadores variados e taxas de chegada
homogêneas e não homogêneas.
Além disso, para encontrar o sistema ótimo supondo a taxa não homogênea
vale a pena também testar o uso de um sistema misto, onde à partir de um certo instante
o funcionamento dos elevadores se inverte de uma abordagem para a outra. Por exemplo,
de manhã quando a taxa de chegada é alta os elevadores funcionariam como no sistema
2 e depois de um certo horário passariam a funcionar de acordo com o sistema 1.
Referências Bibliográficas
Gentle, J. E. (2003) Random Number Generation and Monte Carlo Methods. Springer, 2
edn.