Objetivo

Mostrar cómo funciona un sistema difuso para controlar un ventilador según la temperatura ambiente.


Lógica difusa: conceptos clave


Tabla de simulación lógica difusa

## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
Tabla de simulación: salida estimada del ventilador
Temperatura…C. Frío Templado Caliente Salida.estimada….
10 1.0 0.0 0.00 25.0
11 0.9 0.1 0.00 27.5
12 0.8 0.2 0.00 30.0
13 0.7 0.3 0.00 32.5
14 0.6 0.4 0.00 35.0
15 0.5 0.5 0.00 37.5
16 0.4 0.6 0.00 40.0
17 0.3 0.7 0.00 42.5
18 0.2 0.8 0.00 45.0
19 0.1 0.9 0.00 47.5
20 0.0 1.0 0.00 50.0
21 0.0 0.9 0.00 45.0
22 0.0 0.8 0.00 40.0
23 0.0 0.7 0.00 35.0
24 0.0 0.6 0.00 30.0
25 0.0 0.5 0.00 25.0
26 0.0 0.4 0.07 25.3
27 0.0 0.3 0.13 25.7
28 0.0 0.2 0.20 26.0
29 0.0 0.1 0.27 26.3
30 0.0 0.0 0.33 26.7
31 0.0 0.0 0.40 32.0
32 0.0 0.0 0.47 37.3
33 0.0 0.0 0.53 42.7
34 0.0 0.0 0.60 48.0
35 0.0 0.0 0.67 53.3
36 0.0 0.0 0.73 58.7
37 0.0 0.0 0.80 64.0
38 0.0 0.0 0.87 69.3
39 0.0 0.0 0.93 74.7
40 0.0 0.0 1.00 80.0
library(plotly)
## Cargando paquete requerido: ggplot2
## 
## Adjuntando el paquete: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
df <- data.frame(
  temperatura = temps,
  Frio = f,
  Templado = m,
  Caliente = c,
  salida = salida
)

df_long <- df %>%
  pivot_longer(cols = c("Frio", "Templado", "Caliente"),
               names_to = "Etiqueta", values_to = "Grado") %>%
  mutate(Etiqueta = factor(Etiqueta, levels = c("Frio", "Templado", "Caliente")),
         y = as.numeric(Etiqueta) - 1)

plot_ly() %>%
  add_trace(data = df_long,
            x = ~temperatura, y = ~y, z = ~Grado, color = ~Etiqueta,
            type = "scatter3d", mode = "lines", line = list(width = 6)) %>%
  add_trace(data = df,
            x = ~temperatura, y = rep(3, length(temps)), z = ~salida / 100,
            type = "scatter3d", mode = "lines",
            name = "Salida del ventilador",
            line = list(color = "black", width = 5, dash = "dot")) %>%
  layout(
    title = "Sistema Difuso: Visualización 3D",
    scene = list(
      xaxis = list(title = "Temperatura (°C)"),
      yaxis = list(title = "Etiqueta / Salida", tickvals = 0:3,
                   ticktext = c("Frío", "Templado", "Caliente", "Salida")),
      zaxis = list(title = "Grado de pertenencia / Activación (%)")
    )
  )