Simulaç˜ao de Filas

Propaganda
Simulação de Filas
Marcus Vinicius de Oliveira
[email protected]
DMAT - Universidade Federal de Minas Gerais
13 de dezembro de 2011
Resumo
O objetivo deste trabalho é apresentar um algorı́tmo de simulação de filas M/M/n,
com a implementação para uma fila M/M/2. O algorı́tmo segue a metodologia apresentada em [1]. A implementação foi realizada em MATLAB (código anexo). O
objetivo é obter o comprimento médio das filas e o tempo médio de espera em função
das taxas de chegada e partida.
1
Introdução
A Teoria de Filas encontra aplicações nos mais diversos ramos, seja para a otimização de
filas em seu sentido mais popular (de um banco por exemplo), seja em sistemas computacionais para organização de acesso à CPU, disco, memória e outros recursos. Dessa forma,
os clientes podem ser pessoas, processos, threads, jobs, pacotes, transações de bancos de
dados, etc. A razão pela qual as filas existem é óbvia: a demanda de serviço é maior que a
capacidade de atendimento do sistema.
A Teoria de Filas é um ramo da probabilidade que estuda o fenômeno de formação de
filas de solicitantes de serviços, fonecidos por um determinado recurso. Permite estimar
importantes medidas de desempenho de um sistema a partir de propriedades mensuráveis
das filas, possibilitando seu dimensionamento segundo as demandas dos clientes, evitando
desperdı́cios e inúmeros problemas. O comportamento estocástico das filas será analisado
e simulado neste trabalho, visando obter resultados como o tempo médio de permanência
na fila até que o cliente seja atendido.
As filas que serão abordadas neste trabalho são do tipo M/M/n em que esta notação
indica as caracterı́sticas da fila: Markov/Markov/(n servidores), idicando que o processo
de chegada é Markoviano, a distribuição dos tempor de serviço é exponencial, Markoviana,
e existem n servidores. Esta notação é denominada Notação de Kendall.
2
Modelagem de uma fila
Uma fila basicamente é um servidor que fornece um serviço aos clientes, formando-se uma
fila até que o cliente seja atendido. Naturalmente podem existir vário servidores. Nas
1
próximas seções apresentaremos duas topologias de fila, a saber M/M/1 e M/M/n. Em
ambos os casos as filas são únicas e os servidores são iguais a n.
2.1
Filas M/M/1
Nesta topologia existe apenas um servidor disponı́vel para atender aos clientes. A chegada
de clientes segue um processo de Poisson com taxa λ e portanto o tempo entre duas chegadas
tem distribuição exponencial de parâmetrp λ. A figura 2.1. Os clientes chegam a uma taxa
λ e portanto o tempo médio entre duas chegadas de clientes é igual a 1/λ, ao passo que
a taxa de serviço será denotado por µ, e analogamente o tempo médio de serviço é 1/µ.
Define-se intensidade de trafego como a razão entre as taxas de chegada e de partida.
ρ=
λ
µ
(1)
Figura 1: Esquema de uma fila M/M/1
Note que a propriedade de Markov é verificada para a quantidade de clientes na fila,
uma vez que trivialmente vale que:
N (t + h) = N (t) + A(h) − D(h)
em que N (t) é o número de clientes na fila no tempo t, A(h) é o número de clientes que
chega à fina no intervalo (t, t + h) e D(h) é o número de pessoas que sai da fila no intervalo
(t, t + h). Como tanto A quanto D só dependem de h, como a própria notação sugere, a
propriedade de Markov é válida.
2.2
Filas M/M/n
Uma fila M/M/n é uma fila que tem n servidores disponı́veis para atender aos clientes. O
esquema desta topologia é apresentado na figura 2.2. Nas simulações, assume-se inicialmente que a taxa de chegada é igual a 1000bps (bits por segundo), nomenclatura que se
justifica pela aplicação em tráfego de redes. Fixada uma taxa de chegada, assume-se que
os servidores tem ambos o mesmo desempenho, sendo a taxa de serviço variada através da
variação da intensidade de tráfego.
2
Figura 2: Esquema de uma fila M/M/2
2.3
O algorı́tmo
O algorı́tmos pode ser apresentado pelo fluxograma da figura 2.3. A implementação foi
realizada como apresentado em [1].Inicialmente verifica-se o servidor que tem o evento de
partida mais próximo. Se for um evento de partida, ou seja se o valor corrente de AT for
menor que DT para ambos os servidores então será um evento de partida, sendo acionado
o bloco evento de chegada. Caso contrario será disparado um evento de partida. Para
disparar o evento de partida é necessário escolher qual é o servidor que apresenta este
evento mais próximo, como pode ser observado no código anexo.
Figura 3: Algorı́tmo para simulação de uma fila M/M/n
No caso em que existem k servidores, existem k pessoas sendo servidas ao mesmo tempo
e como cada uma é servida com taxa µ, então a taxa de serviço é igual a kµ. Isso significa
que é possı́vel modelar a fila como um processo birth-and-death com λn = λ e:
3
µn =
nµ, n ≤ k
kµ, n ≥ k
(2)
A figura 2.3 apresenta um diagrama de transição de estados para modelagem de uma
fila M/M/m. Basicamente ela apenas traduz o que está apresentado na equação2. Pela
figura é fácil ver que a condição de espabilidade da fila é que mµ > λ.
Figura 4: Modelagem de uma fila markoviana M/M/m
O fluxograma de processamento de chegada e partida não serão apresentados e podem ser
consultados em [1]. Em anexo estão descritos detalhadamente as definições das variáveis de
interesse, também seguindo o proposto por [1], além de todo o código utilizado na simulação.
Estes resultados também podem res obtidos utilizando-se o modelo em simulink na figura
Figura 5: Modelo em Simulink para M/M/m
Os resultados apresentados na seção anterior foram obtidos utilizando os códigos anexos, não o modelo acima, que pode ser encontrado na toolbox Simevents mo Matlab. É
possı́vel variar os parâmetros da fila e verificar o comportamento e a estabilidade da fila,
além de variar a quantidade de servidores. Há ainda a possibilidade de implementar com
maior facilidade uma situação em que os servidores não sejam homogêneos, o que não é
contemplado neste trabalho.
3
Resultados
Nesta seção serão apresentados os resultados de simulação de uma fila M/M/2, como os
apresentados em [1], além de comparações com resultados teóricos, que serão assumidos
sem demonstração. Para o funcionamento correto dos códigos deve-se atentar para o nome
de cada arquivo.
4
Figura 6: Curva de tempo médio de espera em função da intensidade de tráfego ρ
As formulas analı́ticas para o tempo médio, e para o comprimento da fila permitem a
validação dos resultados obtidos experimentalmente. Os parâmetros ρ e λ correspondem à
intensidade de trafego e taxa de chegada, respectivamente, e n é o número de servidores.
A equação 3 fornece os valores de Tq em ms.
Tq =
p0 =
ρn (ρ/n)
p0
n!(1 − ρ/n)2
" n−1
X ρk
k=0
ρn
1
+
k!
n! 1 − ρ/n
(3)
#−1
Nq = λTq
h
i−1 h
2
1
Para o caso n = 2, tem-se que p0 = 1 + ρ + ρ2 1−ρ/2
= 1+ρ+
5
(4)
(5)
ρ2
2−ρ
i−1
.
Figura 7: Comparação de tempo médio entre o resultado experimental e a expressão teórica
(3)
Pela figura 3, observa-se que os resultados experimentais são bastante próximos das
expressões teóricas apresentadas em [1]. Nota-se que quanto maior for a intensidade de
tráfego, ou seja, a razão entre as taxas de chegada e de partida, maior será o tempo
médio de espera, o que é absolutamente natural e intuitivo. Já ao aumentar a quantidade
de servidores, espera-se que o tempo médio de espera deve aumentar para um mesmo ρ.
Como pode ser observado, os valores de ρ simulados foram limitados a 1.9. Isso se justifica
pelo fato de que se a taxa de chegada for maior que duas vezes a taxa de partida, ou seja
se ρ > 2 a fila crescerá arbitrariamente. Isso pode ser confirmado pela equação 3, uma vez
que:
lim−
ρ→n
ρn nρ
n! 1 −
p
ρ 2 0
n
=∞
Deve-se argumentar porém que à medida que ρ se aproxima de n à esquerda o denominador da expressão diminui com expoente quadrado, ao passo que p0 também diminui
porém em primeira ordem, fazendo com que Tq cresca arbitratiamente. Como para ρ > n
a tendência seria a mesma, tem-se que para estabilizar a fila é necessário impor ρ < n.
A figura 3 apresenta o comprimento médio da fila em função do parâmetro ρ. Os
resultados experimentais corroboram a expressão analı́tica, equação 5. O comprimento
médio da fila aumenta arbitrariamente à medida que se ρ se aproxima de n(= 2).
6
Figura 8: Comparação de comprimento médio entre o resultado experimental e a expressão
teórica (5
4
Conclusão
Verificou-se que o algorı́tmo proposto por [1] apresenta ótimo desempenho para simulação
de filas do tipo M/M/n, em particular para n = 2, configuração para a qual os testes foram
realizados. Verficou-se as condições necessárias para a estabilidade da fila, bem como a
dependência do tempo médio de espera e do comprimento da fila com a intensidade de
trafego (ρ). As compatações entre expressões teóricas e resultados experimentais foram
altamente satisfatórias.
5
Código MATLAB utilizado nas simulações
Utilizando o algorı́tmo proposto por [1] foi implementado o seguinte código em MATLAB
com o qual obteve-se os resultados apresentados.
% Trabalho Final de Processos Estocásticos - UFMG
% Marcus Vinicius de Oliveira
%
%
%
%
%
%
%
%
%
%
-----------------------Definiç~
oes das variáveis
-----------------------DT[j] : Tempo de Partida, j=1,2
BS[j] : Servidor ocupado, j=1,2 (Variável booleana)
QL
: Comprimento da fila
ART
: Tempo médio de chegada
SERT : Tempo médio de serviço (assumido id^
entico para ambos
CLK
: Clock global da simulaç~
ao
CITs : Intervalo entre chegada de clientes (aleatório)
7
% CST
% TWT
% NMS
: Intervalo entre atendimento de clientes (aleatório)
: Tempo total de espera
: Número total de clientes atendidos
% --------------------------------------------------------------------
clc;
close all;
%clear all;
% Definiç~
oes
RHO = i;
Taxa_chegada = 1000;
ART = 1/Taxa_chegada;
Taxa_servico = Taxa_chegada/RHO;
SERT = 1/Taxa_servico;
Tfinal = 200;
% Inicializaç~
ao de variáveis
CLK = 0;
QL = 0;
TWT = 0;
NMS = 0;
AT = 0;
BS = [false;false];
DT = [1e25;1e25];
stop = false;
while (stop == false)
% Analisa se é um evento de chegada ou de partida
x = [AT;AT] - DT;
if(x<[0;0])
evento = {’chegada’;0};
% Atualiza o evento
processa_chegada;
% Processa a chegada
else
server = find(DT == min(DT)); % Escolhe servidor melhor
evento = {’partida’;server}; % Atualiza o evento
processa_partida;
% Processa a partida
end;
if (CLK >= Tfinal)
stop = true;
resultados
8
end;
end;
% Código de processamento de partida
TWT = TWT + QL*(DT(server)-CLK);
CLK = DT(server);
BS(server) = false;
NMS = NMS + 1;
if(QL > 0)
BS(server) = true;
QL = QL-1;
DT(server) = CLK - SERT*log(rand);
else
DT(server) = 1e25;
end;
% Código de processamento de chegada
TWT = TWT + QL*(AT-CLK);
CLK = AT;
AT = CLK - ART*log(rand);
if(BS == [true;true])
QL = QL+1;
else
server = min(find(BS == false));
BS(server) = true;
DT(server) = CLK - SERT*log(rand);
end;
% Gera gráficos para relatório a partir da simulaç~
ao
k = 1;
j = 0.1:0.1:1.9;
for i=0.1:0.1:1.9
trabalho_est;
Tempo_medio(k) = Tempo_medio_espera;
Comprimento_medio(k) = Comp_medio;
k = k+1;
end;
plot(j,Tempo_medio);
9
Referências
[1] SADIKU, M. N and TOFIGHI, M. R.A Tutorial on Simulation of Queueing Models,
International Journal of Electrical Engineering Education, vol. 36, pp. 102-120, 1999
10
Download