Professional Documents
Culture Documents
1. Parte 1 - Simulador
Zo = 313
a = 1103515245
c = 12345
m = 4294967296
Zi = (a*Zi-1 + c) mod m
Ri = z/m
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
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.
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
- Cálculo das probabilidades de cada estado (não normalizado), onde W₀, W₁,..., W₅
são os seis estados do sistema.
- Perda: quantidade de clientes que estão sendo perdidos por unidade de tempo.
- Teste para verificar se a soma das probabilidades dos quatro estados da fila 1 é
igual a 1.
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%
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%