R中的模糊系统

时间:2014-09-25 20:50:44

标签: r

我正在尝试使用包“sets”在R中创建一个模糊系统。在我的模型中,我有三种类型的模糊集,每种都有三种状态,并且具有不同的“宇宙”。当我绘制系统时我没有问题但是当我尝试进行推理时,我得到了这个错误:“gset_charfun(x)中的错误:参数'x'必须是一个通用集。”有没有人有这个问题的解决方案?这是代码。

library(sets)
U1 <- seq(from = 0, to = 1, by = 0.0001)
U2  <- seq(from = -0.5, to = 0.5, by = 0.001)

##  se definen los conjuntos difusos

variables <- set(produccion = fuzzy_variable(
                             bajo = fuzzy_trapezoid_gset(corners = c(-2, 0, 0.3, 0.6),universe=U1),
                             normal = fuzzy_trapezoid_gset(corners = c(0.4, 0.55, 0.55, 0.7), universe=U1), 
                             alto = fuzzy_trapezoid_gset(corners = c(0.5, 0.7, 1, -2), universe=U1)), 

tendencia = fuzzy_variable(bajo = fuzzy_trapezoid_gset(corners = c(-10, -0.4, -0.05, 0.1),universe=U2),
                           normal = fuzzy_triangular_gset(corners = c(-0.067, 0.067, 0.2), universe=U2), 
                           alto = fuzzy_trapezoid_gset(corners = c(0.1, 0.15, 0.15, -10), universe=U2) ) ,

zona = fuzzy_variable(roja = fuzzy_triangular_gset(corners = c(-2, 0, 0.33), universe=U1),
                      amarilla = fuzzy_triangular_gset(corners = c(0.33, 0.5, 0.66),universe=U1), 
                      verde = fuzzy_triangular_gset(corners = c(0.66, 1, 2), universe=U1))
)


## definir las reglas
reglas <-
        set(
                fuzzy_rule(produccion %is% alta || tendencia %is% alta, zona %is% verde),
                fuzzy_rule(produccion %is% alta || tendencia %is% baja, zona %is% amarilla), 
                fuzzy_rule(produccion %is% media|| tendencia %is% baja, zona %is% roja), 
                fuzzy_rule(produccion %is% baja || tendencia %is% alta, zona %is% verde), 
                fuzzy_rule(produccion %is% baja || tendencia %is% baj, zona %is% roja)

        )

## combina el sistema 


system <- fuzzy_system(variables, reglas)
print(system)
plot(system) ## plots variables

## se realiza la inferencia 
inferencia <- fuzzy_inference(system, list(produccion = 0.6, tendencia = 0.2))

## Error in gset_charfun(x) : Argument 'x' must be a generalized set.

1 个答案:

答案 0 :(得分:1)

你只是有一堆拼写错误。您的规则匹配值应与您的变量定义相对应。例如,您为&#34; produccion&#34;

定义了三个级别
  • bajo = fuzzy_trapezoid_gset(...)
  • normal = fuzzy_trapezoid_gset(...)
  • alto = fuzzy_trapezoid_gset(...)

但是,在您的规则中,您引用了

  • produccion %is% alta
  • produccion %is% media
  • produccion %is% baja

这些名称需要完全匹配。同样适用于&#34; tendencia&#34;值。