library(sets)
sets_options("universe", seq(from = 0, to = 10, by = 0.1))
= set(
variaveis 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)))
)
Dissertacao_SIFintroducao
Definindo as variáveis e as funções de graus de pertinência.
# 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
= set(
rules 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)
)
<- fuzzy_system(variaveis, rules) system
<- fuzzy_inference(system, list(ideologia = 5 , intervencionismo = 3))
fi 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
<- function(input1, input2) {
calc_output <- fuzzy_inference(system, list(ideologia = input1, intervencionismo = input2))
result return(gset_defuzzify(result, "centroid"))
}
# Gerando os dados para o gráfico 2D
<- seq(0, 10, by = 0.5)
ideologia_vals <- seq(0, 10, by = 0.5)
intervencionismo_vals <- outer(ideologia_vals, intervencionismo_vals, Vectorize(calc_output))
conservadorismo_vals
# Preparando os dados para o plotly
<- expand.grid(ideologia = ideologia_vals, intervencionismo = intervencionismo_vals)
df $conservadorismo <- as.vector(conservadorismo_vals)
df
# 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'))