library(ggplot2)
urgencia <- seq(0, 10, by = 0.05)
# Funções de pertinência da saída: baixa, moderada, alta
mu_baixa <- pmax(0, pmin((urgencia)/3, (4 - urgencia)/1))
mu_mod <- pmax(0, pmin((urgencia - 3)/2, (8 - urgencia)/2))
mu_alta <- pmax(0, pmin((urgencia - 6)/1.5, 1))
# Graus de ativação das regras do exemplo anterior
a_R1 <- 0.25; a_R2 <- 0.40
# Consequentes truncados
tronc_mod <- pmin(mu_mod, a_R1)
tronc_alta <- pmin(mu_alta, a_R2)
# Agregação: máximo
agregado <- pmax(tronc_mod, tronc_alta)
df <- data.frame(
x = rep(urgencia, 4),
mu = c(tronc_mod, tronc_alta, agregado, pmax(mu_mod, mu_alta)),
tipo = rep(c("R1 truncada (mod, α=0.25)",
"R2 truncada (alta, α=0.40)",
"Agregado (máximo)",
"Original (sem truncamento)"), each = length(urgencia))
)
ggplot(df, aes(x = x, y = mu, color = tipo, linetype = tipo)) +
geom_line(linewidth = 1.1) +
scale_color_manual(values = c("#7ecff7","#f07050","#a8f77e","#ccc")) +
scale_linetype_manual(values = c("solid","solid","solid","dashed")) +
labs(title = "Agregação Mamdani — Função de Saída Combinada",
x = "Urgência (0–10)", y = "Grau de pertinência", color = "", linetype = "") +
theme_minimal(base_size = 13) +
theme(legend.position = "bottom")