Вчера ответить не получилось, приношу извинения...
Сегодня немного покорпел над примером и результат все-таки сошелся с теорией. Поэтому пакетом sets в принципе можно пользоваться (а может это открытие только для меня

). За основу взял пример из книги (стр 52-56): Макеева А.В. Основы нечёткой логики. Монография. Учебное пособие для ВУЗов. ВГИПУ Н. Новгород 2009.
Извиняюсь но ссылку дать не могу, вроде искал но может меня в гугле забанили...
Привожу листинг скрипта (перед использованием нужно установить библиотеку sets):
Код: Выделить всё
library("sets")
## set universe
sets_options("universe", seq(from = 0, to = 150, by = 0.1))
## set up fuzzy variables
variables <-
set(davl =
fuzzy_variable(
d_low = fuzzy_trapezoid(corners = c(-100, 0, 0, 100)),
d_medium = fuzzy_trapezoid(corners = c(0, 50, 50, 100)),
d_hight = fuzzy_trapezoid(corners = c(0, 100, 150, 450))
),
temp =
fuzzy_variable(
t_low = fuzzy_trapezoid(corners = c(-50, 0, 50, 100)),
t_medium = fuzzy_trapezoid(corners = c(0, 50, 100, 150)),
t_hight = fuzzy_trapezoid(corners = c(50, 100, 150, 450))
),
rasx =
fuzzy_partition(varnames=c(
r_low = 2, r_medium = 4, r_hight = 6),
FUN = fuzzy_cone, radius = 3.5)
)
## set up rules
rules <-
set(
fuzzy_rule(temp %is% t_low && rasx %is% r_low, davl %is% d_low),
fuzzy_rule(temp %is% t_medium, davl %is% d_medium),
fuzzy_rule(temp %is% t_hight || rasx %is% r_hight, davl %is% d_hight)
)
## combine to a system
system <- fuzzy_system(variables, rules)
print(system)
plot(system) ## plots variables
## do inference
fi <- fuzzy_inference(system, list(temp = 85, rasx = 3.5))
## plot resulting fuzzy set
plot(fi)
## defuzzify
##gset_defuzzify(x,
## method = c("meanofmax",
## "smallestofmax",
## "largestofmax",
## "centroid"))
gset_defuzzify(fi, "largestofmax")
## reset universe
sets_options("universe", NULL)
Результат приведенный в книге "сходится" с тем, что выдает этот скрипт. Если кому будет интересно то могу некоторые вещи пояснить (насколько это понимаю я)
При выборе дефазификации методами
Код: Выделить всё
"meanofmax", "smallestofmax", "largestofmax",
ответ уверенно 50, а вот при
около 80 (в книге ответ= 50 методом первого максимума).
Пробовал вручную перепроверить используя метод центра тяжести, получил результат около 58 (вычислялось "на коленке" с погрешностями линейки, глаза, карандаша и тп.) поэтому можно его принять как верный.
Вывод из всего этого: пакетом можно пользоваться, работать в принципе несложно (если разобраться) хотя примеров, связанных с нечетким выводом довольно маловато (всего один). Кроме официальной документации примеров применения не нашел...