2014-09-25 39 views
4

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

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

你只是有一堆的错别字。您的规则匹配值应该与您的变量定义相对应。例如,你已经为 “produccion” 定义了三种级别

  • bajo = fuzzy_trapezoid_gset(...)
  • normal = fuzzy_trapezoid_gset(...)
  • alto = fuzzy_trapezoid_gset(...)

然而,在你的规则,你做参考

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

这些名称必须完全匹配。 “tendencia”价值观也是如此。