library(sets)
## Warning: package 'sets' was built under R version 4.1.2
variables <- set(bmi = 
 fuzzy_partition(varnames =
 c(under = 9.25, fit = 21.75,
 over = 27.5, obese = 35),
 sd = 3.0), a1c =
 fuzzy_partition(varnames =
 c(l = 4, n = 5.25, h = 7),
 FUN = fuzzy_cone, radius = 5),
rating =
 fuzzy_partition(varnames =
 c(DC = 10, ST = 5, PF = 1),
 FUN = fuzzy_cone, radius = 5), bp = 
 fuzzy_partition(varnames =
 c(norm = 0, pre = 10, hyp = 20,
 shyp = 30), sd = 2.5)
 )
rules <-
 set(
 fuzzy_rule(bmi %is% under || bmi %is% 
obese || a1c %is% l,
 rating %is% DC),
 fuzzy_rule(bmi %is% over || a1c %is% n 
|| bp %is% pre,
 rating %is% ST),
 fuzzy_rule(bmi %is% fit && a1c %is% n 
&& bp %is% norm,
 rating %is% PF)
 )
system <- fuzzy_system(variables, rules)
print(system)
## A fuzzy system consisting of 4 variables and 3 rules.
## 
## Variables:
## 
## a1c(l, n, h)
## rating(DC, ST, PF)
## bmi(under, fit, over, obese)
## bp(norm, pre, hyp, shyp)
## 
## Rules:
## 
## bmi %is% fit && a1c %is% n && bp %is% norm => rating %is% PF
## bmi %is% over || a1c %is% n || bp %is% pre => rating %is% ST
## bmi %is% under || bmi %is% obese || a1c %is% l => rating %is% DC
plot(system)

fi <- fuzzy_inference(system, list(bmi = 29, a1c=5, bp=20))
plot(fi)

gset_defuzzify(fi, "centroid")
## [1] 7.445238