Essa função calcula o tempo médio de resposta R em um sistema M/M/c. Primeiro, verifica se o sistema está estável (ρ < 1). Se não estiver, retorna Inf. Depois, aplica:
p_queue: probabilidade de haver espera
Wq: tempo médio na fila
R = 1/μ + Wq: tempo total de resposta (serviço + espera)
library(ggplot2)
calc_response_time <- function(lambda, mu, c) {
rho <- lambda / (c * mu)
if (rho >= 1) return(Inf)
sum_term <- sum(sapply(0:(c-1), function(k) (lambda/mu)^k / factorial(k)))
last_term <- ((lambda/mu)^c / factorial(c)) * (1 / (1 - rho))
p_queue <- ((lambda/mu)^c / factorial(c)) * (1 / (1 - rho)) / (sum_term + last_term)
Wq <- p_queue / (c * mu - lambda)
R <- 1 / mu + Wq
return(R)
}
Define os 5 tipos de servidores, cada um com um valor de μ.
ρ = 0.97 é a condição dada pelo enunciado.
rmax_seq é o intervalo de tempos máximos de resposta
que queremos avaliar.
mu_list <- c(10, 20, 30, 40, 45)
rho_target <- 0.97
rmax_seq <- seq(0.4, 1.4, by = 0.01)
Para cada servidor (μ) e cada Rmax,
buscamos o menor c tal que o tempo de resposta seja
menor ou igual a Rmax. Como λ = ρ * c * μ, o valor de
λ depende do número de servidores. Assim que
encontramos esse c, o loop interno é interrompido para
eficiência. Os resultados são armazenados e enviados para construção do
gráfico:
result <- data.frame()
for (i in 1:length(mu_list)) {
mu <- mu_list[i]
for (rmax in rmax_seq) {
best_c <- NA
for (c in 1:100) {
lambda <- rho_target * c * mu
R <- calc_response_time(lambda, mu, c)
if (R <= rmax) {
best_c <- c
break
}
}
result <- rbind(result, data.frame(
Servidor = paste0("Servidor ", i, "\nμ=", mu),
Rmax = rmax,
Servidores_Necessarios = best_c
))
}
}
ggplot(result, aes(x = Rmax, y = Servidores_Necessarios)) +
geom_step(linewidth = 1, color = "#0072B2") +
facet_wrap(~ Servidor, ncol = 3, scales = "free_y") +
labs(
title = "Mínimo de servidores em função de Rmax",
x = "Tempo máximo de resposta",
y = "Servidores necessários"
) +
theme_minimal(base_size = 14)
À medida que μ aumenta, ou seja, o servidor é mais rápido, o gráfico tem:
Menos degraus
Degraus maiores
Vemos que, quando a taxa de serviço μ aumenta, o número mínimo de servidores necessários se torna menos sensível ao tempo máximo de resposta (Rmax). Isso ocorre porque servidores mais rápidos reduzem o tempo de atendimento individual, o que diminui a espera total no sistema. Matematicamente, como o tempo médio de resposta \(R=\frac{1}{\mu}+W_q\), um aumento em μ reduz a fração e também o tempo médio na fila Wq, já que o sistema se aproxima mais rapidamente da estabilidade.