Vous êtes sur la page 1sur 12

ADS 2011-1 - Trabalho 1

Mateus Martins Nudelmann


Vinicius Martins Nudelmann

1. Parte 1 - Simulador

Para construir um ambiente de simulação discreta, inicialmente foi criada uma


classe Biblioteca. Nesta classe, primeiramente foi implementado o procedimento para a
geração de números pseudo-aleatórios segundo o método da congruência linear. Para isto
foi utilizado o gerador de números aleatórios do UNIX, pois este possui uma boa
qualidade. Abaixo são mostrados a fórmula utilizada e os dados de entradas, os quais são
utilizados pelo gerador do UNIX.

Zo = 313
a = 1103515245
c = 12345
m = 4294967296

Zi = (a*Zi-1 + c) mod m
Ri = z/m

Logo após foi implementado o procedimento para geração de números aleatórios


seguindo a distribuição exponencial com média m. Neste procedimento o valor m, que
representa a média desejada, é passado como parâmetro para a função Exp. Abaixo é
mostrada a função.

Exp(m) = -m * lnU(0,1)

Depois disso, foi criada uma classe chamada Núcleo, a qual contém os métodos
para controle de eventos, controle do tempo e controle para inicialização e fim da
simulação. Para executar a classe Núcleo tem que passar como parâmetro um número
inteiro para indicar qual a realidade proposta no trabalho que vai ser simulada.
Nesta classe primeiramente foi feito um método para inicializar a simulação,
chamado inicializa. Neste método, a classe modelo1 é inicializada se é a realidade 1 que
está sendo simulada e a classe modelo2 é inicializada se é a realidade 2 que está sendo
simulada. Dessa forma, a simulação é inicializada, dando início ao agendamento de
eventos.
Para fazer o agendamento de eventos, foi criado o método agendamentoEvento.
Este método possui dois parâmetros de entrada, o parâmetro nomeEvento, pelo qual é
passado o nome do evento que está sendo agendado; e o parâmetro média, que é
utilizado para o cálculo da distribuição exponencial, ou seja, é o parâmetro m na função
Exp da distribuição exponencial mostrada acima. Assim o método agendamentoEvento
chama a função Exp, passando como parâmetro o valor média, para que seja calculada a
distribuição exponencial. Em seguida é obtida a hora que o evento deve ser executado, a
qual é calculada pela hora atual acrescida do valor m, calculado anteriormente pela
função Exp. Por fim o método agendamentoEvento cria o evento, o qual possui como
atributos o seu nome e a hora em que deve ser executado, e coloca o evento na lista de
eventos, chamada de listaEventos.
Em seguida, para fazer o controle de tempo foi criado o método controlaTempo.
Esse método fica num laço while conferindo se chegou o momento de disparar algum
evento que está agendado na lista de eventos. Quando chega no horário de algum evento
agendado, o método retorna o índice do evento, pelo qual é informado o evento que deve
ser executado. O pseudo-código do método controlaTempo é mostrado a seguir.

Após isso, para fazer o controle de eventos foi criado o método disparaEvento.
Esse método faz a chamada do método controlaTempo (mostrado acima), para saber qual
evento deve ser executado. Tendo essa informação, se o programa está simulando a
realidade 1, o método verifica se esse evento selecionado é de chegada, saída ou fim, e
assim, acessa o método do evento. Caso o programa esteja simulando a realidade 2, o
método verifica se esse evento selecionado é de chegada fila 1, saída fila 1, saída fila 1 -
chegada fila 2, saída fila 2 ou fim, e assim, acessa o método do evento.
Também, através do método disparaEvento é chamado o método finaliza, que é
executado somente se não tiver nenhum evento na lista de eventos. O método finaliza
apresenta a contabilização de resultados e depois encerra a simulação.

1.1. Realidade 1

Na Realidade 1 é modelada uma fila M/M/1/5 contendo intervalos entre chegadas


conforme uma distribuição exponencial de média 5 (12 por unidade de tempo) e tempo
de serviço conforme uma distribuição exponencial de média 3 (20 por unidade de tempo).
Na figura 1 é mostrada a rede que representa a realidade 1.

Figura 1: Rede que modela a Realidade 1


Para representar a realidade 1, foi criada a classe Modelo1. Nesta classe
primeiramente foi feito um método para inicializar a simulação, chamado inicializa. Neste
método o relógio é setado para 0, assim começando a partir do tempo 00:00:00. Também
nele, uma variável que conta o tamanho da fila, chamada de tamFila, é setada para 0,
porque inicialmente não tem ninguém na fila. Depois disso, um evento de chegada é
colocado na fila de eventos, ou seja, um evento é agendado. Por fim, o método inicializa
agenda o evento Fim, que estabelece o prazo para o final da simulação.
A seguir são mostrados os pseudo-código dos métodos que simulam a execução
dos eventos da realidade 1.

- Método que representa o evento de chegada de um cliente na fila

- Método que representa o evento de saída de um cliente da fila

Além disso, foi criado o método que representa o evento de encerramento,


chamado de eventoFim. Neste método, todos os eventos agendados na lista de eventos
são deletados, representando assim que a partir deste momento ninguém chega na fila.

1.2. Realidade 2

A rede proposta para a Realidade 2 possui duas filas, a fila 1 contém 4 estados e a
fila 2 contém 3 estados. Considerando que a unidade de tempo é minutos, a taxa de
chegada de clientes da fila 1 é um cliente a cada 4 segundos (15 clientes por minuto) e a
taxa de serviço da fila 1 é um cliente a cada 3 segundos (20 clientes por minuto). Dos
clientes que saem da fila 1, 40% vão embora e 60% vão para a fila 2, ou seja, 8 clientes vão
embora por minuto da fila 1 e 12 clientes vão da fila 1 para a fila 2 por minuto. Assim a
taxa de chegada de clientes da fila 2 é 12 cliente por minuto (1 cliente a cada 5 segundos).
Quanto a taxa de serviço da fila 2 é 14 clientes por minuto (1 cliente a cada 4,3 segundos).
Na figura 1 é apresentada a rede proposta para a Realidade 2.
Figura 2: Rede que modela a Realidade 2

Para representar a realidade 2, assim como na realidade 1, foi criada uma classe,
chamada de Modelo2. Nesta classe primeiramente foi feito um método para inicializar a
simulação, chamado inicializa. Este método tem as mesmas funções do método inicializa
da classe Modelo1, com a diferença de que foram criadas duas variáveis que servem para
contar o tamanho de cada uma das duas filas do modelo, chamadas de tamFila1 e
tamFila2.
A seguir são mostrados os pseudo-código dos métodos que simulam a execução
dos eventos da realidade 2.

- Método que representa o evento de chegada de um cliente na fila 1


- Método que representa o evento de saída de um cliente da fila 1

- Método que representa o evento de saída de um cliente da fila 1 e chegada na


fila 2

- Método que representa o evento de saída de um cliente da fila 2

Além disso, da mesma forma que na realidade 1, foi criado o método que
representa o evento de encerramento, chamado de eventoFim.
2. Parte 2

2.1. Realidade 1: Processo de Nascimento e Morte

Nesta seção são apresentadas as etapas para a resolução de um Processo de


Nascimento e Morte equivalente a rede utilizada na realidade 1 da Parte 1 do trabalho
(Figura 1). Para fazer os cálculos necessários foi utilizado o sistema de álgebra
computacional Maple.

- Cálculo das probabilidades de cada estado (não normalizado), onde W₀, W₁,..., W₅
são os seis estados do sistema.

- Normalizando as probabilidades de cada estado, onde P₀, P₁,..., P₅ são os seis


estados do sistema.
- Teste para verificar se a soma das probabilidades é igual a 1.

- Perda: quantidade de clientes que estão sendo perdidos por unidade de tempo.

2.2. Realidade 2: Cadeias de Markov

Nesta seção são apresentadas as etapas para a resolução de uma Cadeia de


Marcov equivalente a rede utilizada na realidade 2 da Parte 1 do trabalho (Figura 2). Para
fazer os cálculos necessários foi utilizado o sistema de álgebra computacional Maple.

- Vetor de igualdade utilizado no Sistema de Equações.

- Matriz que representa o Sistema de Equações.


- Resolvendo o Sistema de Equações com a função Linsolve, na qual são passados
como parâmetros a matriz M e o vetor de igualdade b.

- Abaixo os valores do vetor de resultados acima são atribuídos às variáveis X₀,


X₁,..., X₁₁, demonstrando assim a probabilidade de cada um dos doze estados do sistema.
- Teste para verificar se a soma das probabilidades dos doze estados é igual a 1.

- Cálculo da probabilidade de estar em cada um dos estados da fila 1, onde


fila₁est₀, fila₁est₁, fila₁est₂ e fila₁est₃ são os quatro estados da fila 1.

- Teste para verificar se a soma das probabilidades dos quatro estados da fila 1 é
igual a 1.

- Cálculo da probabilidade de estar em cada um dos estados da fila 2, onde


fila₂est₀, fila₂est₁ e fila₂est₂ são os três estados da fila 2.
- Teste para verificar se a soma das probabilidades dos três estados da fila 2 é igual
a 1.
3. Parte 3

Na tabela abaixo, são mostrados as probabilidades de estar em cada estado da


rede utilizada na realidade 1 obtidas usando o modelo analítico (Processo de Nascimento
e Morte) e o modelo de simulação executada com um tempo de 5 e 20 minutos.

Realidade 1
Estado Modelo Analítico Modelo de Simulação Modelo de Simulação
(5 minutos) (20 minutos)
P₀ 41,96% 46,33% 41,14%
P₁ 25,17% 23,67% 23,33%
P₂ 15,10% 15,67% 14,26%
P₃ 9,063% 7,333% 8,904%
P₄ 5,438% 5,667% 8,162%
P₅ 3,263% 1,333% 4,204%

Na tabela abaixo, são mostrados as probabilidades de estar em cada estado da


rede utilizada na realidade 2 obtidas usando o modelo analítico (Cadeias de Markov) e o
modelo de simulação executada com um tempo de 5 e 20 minutos.

Realidade 2
Estado Modelo Analítico Modelo de Simulação Modelo de Simulação
(5 minutos) (20 minutos)
Fila 1
P₀ 31,61% 44,85% 43,17%
P₁ 26,91% 18,94% 24,42%
P₂ 22,71% 23,26% 18,58%
P₃ 18,76% 12,96% 13,83%
Fila 2
P₀ 52,04% 64,12% 61,83%
P₁ 30,52% 25,91% 29,5%
P₂ 17,44% 9,967% 8,667%
Fila 1 e Fila 2
P₀₀ 16,43% 31,89% 25,25%
P₁₀ 13,01% 8,970% 14,42%
P₂₀ 11,14% 12,96% 12,25%
P₃₀ 11,45% 10,30% 9,917%
P₀₁ 10,17% 9,302% 13,92%
P₁₁ 8,565% 3,987% 7,5%
P₂₁ 7,356% 9,967% 5,167%
P₃₁ 4,430% 2,658% 2,917%
P₀₂ 5,015% 3,654% 4%
P₁₂ 5,331% 5,980% 2,5%
P₂₂ 4,220% 0,3322% 1,167%
P₃₂ 2,877% 0% 1%

Comparando os resultados do modelo computacional executado por 5 minutos


com os resultados do modelo analítico, percebe-se que as probabilidades dos estados nos
dois modelos são diferentes, porém possuem semelhanças. E as probabilidades são ainda
mais parecidas se comparar o modelo analítico com o modelo computacional executado
por 20 minutos. A partir dessa observação entende-se que quanto mais tempo durar a
simulação do modelo computacional, mais semelhantes serão os resultados dos dois tipos
de simulação. Dessa forma pode-se afirmar que um dos fatores para a diferença
encontrada nos resultados aconteceu porque no modelo de simulação computacional foi
considerado o tempo de execução do sistema, variável que não foi considerada no modelo
analítico.
A diferença do modelo analítico para o modelo computacional é que o segundo
parece fazer uma simulação mais realista da realidade, enquanto que o modelo analítico
parece fazer uma simulação mais artificial da realidade. Isto porque o modelo
computacional pode fazer uma simulação com mesmo tempo de funcionamento da
realidade, enquanto que no modelo analítico o resultado da simulação é retornado
diretamente, através de uma fórmula matemática.
A desvantagem do modelo de simulação computacional em relação ao modelo
analítico é que ele tenta capturar a aleatoriedade do sistema, o que é difícil uma vez que
computadores só trabalham com números pseudo-aleatórios, além disso, isto se torna
mais complicado se o gerador de números aleatórios utilizado não possuir uma boa
qualidade. Desse jeito pode ser difícil avaliar se o comportamento do sistema acontece
porque ele está se comportando corretamente ou porque os números gerados não estão
tendo a aleatoriedade desejada.