Dissertacao_SIFintroducao

Author

Renato Barreira

Definindo as variáveis e as funções de graus de pertinência.

library(sets)
sets_options("universe", seq(from = 0, to = 10, by = 0.1)) 
variaveis = set(
    ideologia = fuzzy_variable(
      esquerda = fuzzy_trapezoid(corners = c(-1 , 0, 2, 4)),
      centro = fuzzy_trapezoid(corners = c(2 , 4, 6, 8)),
      direita = fuzzy_trapezoid(corners = c( 6, 8, 10, 11))),
    
    intervencionismo = fuzzy_variable(
      nulo = fuzzy_trapezoid(corner = c(-1, 0, 0.1, 1)),
      medio = fuzzy_trapezoid(corner = c(1, 2, 2.1, 3)),
      alto = fuzzy_trapezoid(corner = c(2, 3, 10, 11))),
    
    conservadorismo = fuzzy_variable(
      baixo = fuzzy_trapezoid(corners = c(-1 , 0, 2, 4)),
      medio = fuzzy_trapezoid(corners = c(2 , 4, 6, 8)),
      alto = fuzzy_trapezoid(corners = c( 6, 8, 10, 11)))
    )
# Visualizando a variável ideologia
plot(variaveis$ideologia, main = "Variável Fuzzy: Ideologia")

# Visualizando a variável intervencionismo
plot(variaveis$intervencionismo, main = "Variável Fuzzy: Intervencionismo")

# Visualizando a variável conservadorismo
plot(variaveis$conservadorismo, main = "Variável Fuzzy: Conservadorismo")

Definindo as regras do sistema lógico

rules = set(
    fuzzy_rule(ideologia %is% esquerda && intervencionismo %is% nulo, conservadorismo %is% baixo),
    fuzzy_rule(ideologia %is% esquerda && intervencionismo %is% medio, conservadorismo %is% medio),
    fuzzy_rule(ideologia %is% esquerda && intervencionismo %is% alto, conservadorismo %is% alto),
    fuzzy_rule(ideologia %is% centro && intervencionismo %is% nulo, conservadorismo %is% medio),
    fuzzy_rule(ideologia %is% centro && intervencionismo %is% medio, conservadorismo %is% alto),
    fuzzy_rule(ideologia %is% centro && intervencionismo %is% alto, conservadorismo %is% alto),
    fuzzy_rule(ideologia %is% direita && intervencionismo %is% nulo, conservadorismo %is% medio),
    fuzzy_rule(ideologia %is% direita && intervencionismo %is% medio, conservadorismo %is% alto),
    fuzzy_rule(ideologia %is% direita && intervencionismo %is% alto, conservadorismo %is% alto)
    )
system <- fuzzy_system(variaveis, rules)
fi <- fuzzy_inference(system, list(ideologia = 5 ,  intervencionismo = 3))
plot(fi)

gset_defuzzify(fi, "centroid")
[1] 8.470492
library(plotly)
Carregando pacotes exigidos: ggplot2

Attaching package: 'plotly'
The following object is masked from 'package:ggplot2':

    last_plot
The following object is masked from 'package:sets':

    %>%
The following object is masked from 'package:stats':

    filter
The following object is masked from 'package:graphics':

    layout
# Função para calcular o valor de saída baseado na inferência fuzzy
calc_output <- function(input1, input2) {
  result <- fuzzy_inference(system, list(ideologia = input1, intervencionismo = input2))
  return(gset_defuzzify(result, "centroid"))
}

# Gerando os dados para o gráfico 2D
ideologia_vals <- seq(0, 10, by = 0.5)
intervencionismo_vals <- seq(0, 10, by = 0.5)
conservadorismo_vals <- outer(ideologia_vals, intervencionismo_vals, Vectorize(calc_output))

# Preparando os dados para o plotly
df <- expand.grid(ideologia = ideologia_vals, intervencionismo = intervencionismo_vals)
df$conservadorismo <- as.vector(conservadorismo_vals)

# Plotando o gráfico 2D
plot_ly(df, x = ~ideologia, y = ~intervencionismo, z = ~conservadorismo, type = 'contour') %>%
  layout(title = "Sistema de Inferência Fuzzy",
         xaxis = list(title = 'Ideologia'),
         yaxis = list(title = 'Intervencionismo'))