Ferramenta de Cálculo de Métricas de Teoria das Filas
Este projeto implementa uma calculadora de métricas M/M/1 e M/M/c (Erlang‑C), com duas formas de uso: 1) Entradas diretas: informar λ e μ e obter as métricas. 2) A partir de CSV do JMeter: estimar λ e μ automaticamente e calcular as métricas.
Como executar: Abra o link local no navegador,
escolha o modelo e: - informe λ e μ diretamente, ou - envie um CSV do
Simple Data Writer do JMeter (com colunas
timeStamp e elapsed).
Como estimamos λ e μ a partir do JMeter - λ (taxa de chegada) =
N / duração (s), onde: - N é o número de
linhas do CSV (amostras), - duração (s) =
(max(timeStamp) − min(timeStamp)) / 1000 - μ
(taxa de serviço) ≈ 1 / média(elapsed_s), onde
elapsed_s = elapsed_ms / 1000
Observação: quando o sistema está no limite (muito carregado), μ estimado por
1/avg_elapsedtende a ser conservador. Em cargas leves, usar o Throughput do Summary Report também é aceitável como estimativa de μ.
Métricas retornadas:
M/M/1 - ρ = λ/μ - L = ρ / (1 − ρ) - Lq = ρ² / (1 − ρ) - W = 1 / (μ − λ) - Wq = λ / (μ(μ − λ)) - P0 = 1 − ρ
M/M/c (Erlang‑C):
Estrutura:
fila.py — biblioteca com mm1,
mmc, calc_from_jmeter_csv. (Original)app.py — UI Streamlit. (Original)*.Rmd — Relatório R Markdown com funções R adaptadas
(Este arquivo)Esta aba apresenta 50 cenários simulados de check-in aéreo para demonstrar a Teoria das Filas. Utilize os campos de busca acima das colunas (Linha Aérea, Horário) e o seletor para ajustar a visualização de 5 a 100 registros.
Esta seção apresenta a análise e interpretação dos resultados, com foco na variação das métricas nos diferentes cenários de check-in aéreo (Passageiros = Clientes; Atendentes = Servidores).
A análise das 50 linhas dinâmicas revela:
AZUL de Pico com \(\lambda=5.5\), \(\mu=1.5\) e \(c=4\) teria \(\rho \approx 0.9167\), gerando longas
filas.Pico e Linhas Aéreas com alta demanda (como LATAM/GOL)
tendem a apresentar maior \(\rho\) e
\(P_w\) (Probabilidade de Espera),
impactando a experiência do passageiro.Esta aba demonstra o código R necessário para integrar um
dataset CSV local de testes de performance (como o JMeter) ao
relatório, simulando a funcionalidade do app.py.
ATENÇÃO: O RPubs ou o relatório HTML gerado não podem aceitar upload de arquivos dinamicamente no navegador. Para analisar um CSV real, você deve executar o R Markdown localmente no RStudio, substituindo a linha do
read.csv()pelo caminho do seu arquivo.
A lógica de cálculo de \(\lambda\) e \(\mu\) do JMeter, conforme detalhado na aba “Sobre”, é implementada na função abaixo:
# Funções de estimativa de Lambda e Mu a partir de CSV (JMeter)
calc_from_jmeter_csv_r <- function(file_path, c_servidores = 2) {
# 1. Carregar o CSV do JMeter
# SUBSTITUA 'caminho/para/seu/arquivo.csv' pelo caminho real do arquivo
df <- read.csv(file_path)
# 2. Renomear colunas para consistência (JMeter usa 'timeStamp' e 'elapsed')
ts_col <- 'timeStamp'
elapsed_col <- 'elapsed'
# 3. Cálculo de Duração Total do Teste (em segundos)
min_ts <- min(df[[ts_col]])
max_ts <- max(df[[ts_col]])
duration_s <- (max_ts - min_ts) / 1000
# 4. Cálculo da Taxa de Chegada (λ)
N <- nrow(df) # Número de amostras (passageiros virtuais)
lambda_estimado <- N / duration_s
# 5. Cálculo da Taxa de Serviço (μ)
avg_elapsed_ms <- mean(df[[elapsed_col]])
mu_estimado <- 1 / (avg_elapsed_ms / 1000)
# 6. Cálculo das Métricas (M/M/c)
res_final <- mmc(lambda = lambda_estimado, mu = mu_estimado, c = c_servidores)
return(list(
lambda = lambda_estimado,
mu = mu_estimado,
metricas = res_final
))
}
# --- EXEMPLO DE USO LOCAL ---
# Para rodar, remova o 'eval=FALSE' no chunk e use:
# resultados <- calc_from_jmeter_csv_r(file_path = "Caminho/para/seu/arquivo.csv", c_servidores = 3)
# print(resultados$metricas)
Observação: A função mmc utilizada acima está
definida na seção de setup inicial deste relatório.
| Métrica | Equação (LaTeX) | Significado |
|---|---|---|
| Utilização (ρ) | \[ \rho = \frac{\lambda}{\mu} \] | Proporção de tempo que o atendente de check-in está ocupado. |
| Prob. Sistema Vazio (P0) | \[ P_0 = 1 - \rho \] | Probabilidade de haver zero passageiros no sistema (o guichê estar livre). |
| Passageiros no Sistema (L) | \[ L = \frac{\rho}{1 - \rho} \] | Número médio de passageiros no sistema (fila + check-in). |
| Passageiros na Fila (Lq) | \[ L_q = \frac{\rho^2}{1 - \rho} \] | Número médio de passageiros esperando na fila. |
| Tempo no Sistema (W) | \[ W = \frac{1}{\mu - \lambda} \] | Tempo médio que um passageiro gasta no sistema (espera + check-in). |
| Tempo na Fila (Wq) | \[ W_q = \frac{\lambda}{\mu(\mu - \lambda)} \] | Tempo médio que um passageiro espera na fila. |
| Métrica | Equação (LaTeX) | Significado |
|---|---|---|
| Utilização (ρ) | \[ \rho = \frac{\lambda}{c \mu} \] | Intensidade de tráfego média por atendente de check-in. |
| Prob. de Espera (Pw) | \[ P_w = \frac{\frac{(\lambda / \mu)^c}{c!} \cdot P_0}{1 - \rho} \] | Probabilidade de um passageiro ter que esperar na fila (todos os \(c\) atendentes ocupados). |
| Passageiros na Fila (Lq) | \[ L_q = \frac{P_w \cdot \rho}{1 - \rho} \] | Número médio de passageiros esperando na fila. |
| Tempo na Fila (Wq) | \[ W_q = \frac{L_q}{\lambda} \] | Tempo médio que um passageiro espera na fila. |
| Tempo no Sistema (W) | \[ W = W_q + \frac{1}{\mu} \] | Tempo total médio que um passageiro gasta no sistema. |
| Passageiros no Sistema (L) | \[ L = \lambda W \] | Número médio de passageiros no sistema (Lei de Little). |
Estas são as equações usadas para estimar os parâmetros \(\lambda\) e \(\mu\) a partir dos dados brutos de um CSV do JMeter (contexto de testes de performance de sistemas de aviação/passagens).
| Métrica | Equação (LaTeX) | Significado |
|---|---|---|
| Taxa de Chegada (\(\lambda\)) | \[ \lambda = \frac{N}{Duração_{(s)}} \] | Número total de requisições de passageiros virtuais (\(N\)) dividido pela duração total do teste em segundos. |
| Taxa de Serviço (\(\mu\)) | \[ \mu \approx \frac{1}{\text{Média}(\text{elapsed}_s)} \] | O inverso do tempo médio de processamento de uma requisição de check-in em segundos. |
| Duração (\(Duração_{(s)}\)) | \[ \frac{\max(timeStamp) - \min(timeStamp)}{1000} \] | Diferença entre o último e o primeiro timestamp do teste, convertida para segundos. |