library(sets)
sets_options("universe", seq(1, 100, 0.5))
variables <- set(
  temperature = fuzzy_partition(varnames = c(cold = 30, good = 70, hot = 90),
                                sd = 5.0),
  humidity = fuzzy_partition(varnames = c(dry = 30, good = 60, wet = 80), 
                             sd = 3.0),
  precipitation = fuzzy_partition(varnames = c(no.rain = 30, little.rain = 60,
                                               rain = 90), sd = 7.5),
  weather = fuzzy_partition(varnames = c(bad = 40, ok = 65, perfect = 80),
                            FUN = fuzzy_cone, radius = 10)
)
# Fuzzy rules
rules <- set(
  fuzzy_rule(temperature %is% good && humidity %is% dry &&
               precipitation %is% no.rain, weather %is% perfect),
  fuzzy_rule(temperature %is% hot && humidity %is% wet &&
               precipitation %is% rain, weather %is% bad),
  fuzzy_rule(temperature %is% cold, weather %is% bad),
  fuzzy_rule(temperature %is% good || humidity %is% good ||
               precipitation %is% little.rain, weather %is% ok),
  fuzzy_rule(temperature %is% hot && precipitation %is% little.rain,
             weather %is% ok),
  fuzzy_rule(temperature %is% hot && humidity %is% dry &&
               precipitation %is% little.rain, weather %is% ok)
)
model <- fuzzy_system(variables, rules)
print(model)
A fuzzy system consisting of 4 variables and 6 rules.

Variables:

weather(bad, ok, perfect)
humidity(dry, good, wet)
temperature(cold, good, hot)
precipitation(no.rain, little.rain, rain)

Rules:

temperature %is% hot && precipitation %is% little.rain => weather %is% ok
temperature %is% hot && humidity %is% dry && precipitation %is%  => weather %is% ok
    little.rain => weather %is% ok
temperature %is% hot && humidity %is% wet && precipitation %is%  => weather %is% bad
    rain => weather %is% bad
temperature %is% good && humidity %is% dry && precipitation %is%  => weather %is% perfect
    no.rain => weather %is% perfect
temperature %is% good || humidity %is% good || precipitation %is%  => weather %is% ok
    little.rain => weather %is% ok
temperature %is% cold => weather %is% bad
plot(model)

example.1 <- fuzzy_inference(model, list(temperature = 75, humidity = 0,
                                       precipitation = 70))
gset_defuzzify(example.1, "centroid")
[1] 65

example.2 <- fuzzy_inference(model, list(temperature = 30, humidity = 0,
                                       precipitation = 70))
gset_defuzzify(example.2, "largestofmax")
[1] 40

LS0tDQp0aXRsZTogIlIgRnV6enkgRXhhbXBsZSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyfQ0KbGlicmFyeShzZXRzKQ0Kc2V0c19vcHRpb25zKCJ1bml2ZXJzZSIsIHNlcSgxLCAxMDAsIDAuNSkpDQpgYGANCg0KYGBge3J9DQp2YXJpYWJsZXMgPC0gc2V0KA0KICB0ZW1wZXJhdHVyZSA9IGZ1enp5X3BhcnRpdGlvbih2YXJuYW1lcyA9IGMoY29sZCA9IDMwLCBnb29kID0gNzAsIGhvdCA9IDkwKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2QgPSA1LjApLA0KICBodW1pZGl0eSA9IGZ1enp5X3BhcnRpdGlvbih2YXJuYW1lcyA9IGMoZHJ5ID0gMzAsIGdvb2QgPSA2MCwgd2V0ID0gODApLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2QgPSAzLjApLA0KICBwcmVjaXBpdGF0aW9uID0gZnV6enlfcGFydGl0aW9uKHZhcm5hbWVzID0gYyhuby5yYWluID0gMzAsIGxpdHRsZS5yYWluID0gNjAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaW4gPSA5MCksIHNkID0gNy41KSwNCiAgd2VhdGhlciA9IGZ1enp5X3BhcnRpdGlvbih2YXJuYW1lcyA9IGMoYmFkID0gNDAsIG9rID0gNjUsIHBlcmZlY3QgPSA4MCksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgRlVOID0gZnV6enlfY29uZSwgcmFkaXVzID0gMTApDQopDQpgYGANCg0KYGBge3J9DQojIEZ1enp5IHJ1bGVzDQpydWxlcyA8LSBzZXQoDQogIGZ1enp5X3J1bGUodGVtcGVyYXR1cmUgJWlzJSBnb29kICYmIGh1bWlkaXR5ICVpcyUgZHJ5ICYmDQogICAgICAgICAgICAgICBwcmVjaXBpdGF0aW9uICVpcyUgbm8ucmFpbiwgd2VhdGhlciAlaXMlIHBlcmZlY3QpLA0KICBmdXp6eV9ydWxlKHRlbXBlcmF0dXJlICVpcyUgaG90ICYmIGh1bWlkaXR5ICVpcyUgd2V0ICYmDQogICAgICAgICAgICAgICBwcmVjaXBpdGF0aW9uICVpcyUgcmFpbiwgd2VhdGhlciAlaXMlIGJhZCksDQogIGZ1enp5X3J1bGUodGVtcGVyYXR1cmUgJWlzJSBjb2xkLCB3ZWF0aGVyICVpcyUgYmFkKSwNCiAgZnV6enlfcnVsZSh0ZW1wZXJhdHVyZSAlaXMlIGdvb2QgfHwgaHVtaWRpdHkgJWlzJSBnb29kIHx8DQogICAgICAgICAgICAgICBwcmVjaXBpdGF0aW9uICVpcyUgbGl0dGxlLnJhaW4sIHdlYXRoZXIgJWlzJSBvayksDQogIGZ1enp5X3J1bGUodGVtcGVyYXR1cmUgJWlzJSBob3QgJiYgcHJlY2lwaXRhdGlvbiAlaXMlIGxpdHRsZS5yYWluLA0KICAgICAgICAgICAgIHdlYXRoZXIgJWlzJSBvayksDQogIGZ1enp5X3J1bGUodGVtcGVyYXR1cmUgJWlzJSBob3QgJiYgaHVtaWRpdHkgJWlzJSBkcnkgJiYNCiAgICAgICAgICAgICAgIHByZWNpcGl0YXRpb24gJWlzJSBsaXR0bGUucmFpbiwgd2VhdGhlciAlaXMlIG9rKQ0KKQ0KYGBgDQoNCmBgYHtyfQ0KbW9kZWwgPC0gZnV6enlfc3lzdGVtKHZhcmlhYmxlcywgcnVsZXMpDQpgYGANCg0KYGBge3J9DQpwcmludChtb2RlbCkNCmBgYA0KDQpgYGB7cn0NCnBsb3QobW9kZWwpDQpgYGANCmBgYHtyfQ0KZXhhbXBsZS4xIDwtIGZ1enp5X2luZmVyZW5jZShtb2RlbCwgbGlzdCh0ZW1wZXJhdHVyZSA9IDc1LCBodW1pZGl0eSA9IDAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXBpdGF0aW9uID0gNzApKQ0KYGBgDQoNCmBgYHtyfQ0KZ3NldF9kZWZ1enppZnkoZXhhbXBsZS4xLCAiY2VudHJvaWQiKQ0KYGBgDQoNCmBgYHtyfQ0KcGxvdChleGFtcGxlLjEpDQpgYGANCmBgYHtyfQ0KZXhhbXBsZS4yIDwtIGZ1enp5X2luZmVyZW5jZShtb2RlbCwgbGlzdCh0ZW1wZXJhdHVyZSA9IDMwLCBodW1pZGl0eSA9IDAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXBpdGF0aW9uID0gNzApKQ0KZ3NldF9kZWZ1enppZnkoZXhhbXBsZS4yLCAibGFyZ2VzdG9mbWF4IikNCmBgYA0KYGBge3J9DQpwbG90KGV4YW1wbGUuMikNCmBgYA0KDQo=