library(sets)
sets_options("universe", seq(1, 100, 0.5))
Mendefinisikan variabel cuaca dari sistem fuzzy, variabel yang di pilih adalah ‘suhu’, ‘kelembaban’ dan ‘curah hujan’. Keadaan cuaca buruk dan baik akan ditentukan menurut variabel suhu, kelembaban dan curah hujan.
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)
)
Pertama-tama kita menentukan variabel pertama ‘suhu’, memiliki tiga atribut atau tingkatan yang berbeda: ‘dingin’, ‘baik’ dan ‘panas’, dengan nilai 30, 70 dan 90. Artinya jika suhu (menggunakan Fahrenheit kali ini ) adalah 30, maka ‘dingin’, jika 70, ‘baik’ dan jika 90, ‘panas’. Untuk variabel ‘kelembaban’ dan ‘curah hujan’ dibacanya sebagai “jika persentase kelembaban adalah 30, maka itu kering” atau “ada kemungkinan 60% hari ini akan hujan”.
The fuzzy rules
Setelah variabel didefinisikan, langkah selanjutnya adalah mendefinisikan aturan fuzzy dari sistem. Di bagian sebelumnya, saya menunjukkan variabel yang disebut ‘cuaca’ yang merupakan keadaan akhir atau respons sistem. Aturan fuzzy adalah hubungan antara variabel “non-final” (suhu, kelembaban dan curah hujan) dan ‘cuaca’.
# 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)
)
Pada sistem ini, ada enam aturan yang didefinisikan.
Jika suhu ‘baik’ (lihat variabel untuk melihat apa yang ‘baik’), kelembapannya ‘kering’ dan curah hujannya ‘tidak hujan’, maka cuacanya ‘sempurna’. Jika suhu ‘panas’, kelembaban ‘basah’ dan curah hujan ‘hujan’, maka cuacanya ‘buruk’. Jika suhu ‘dingin’, maka cuacanya ‘buruk’. Jika suhunya ‘baik’ atau kelembapannya ‘baik’ atau curah hujannya ‘sedikit.hujan’, maka cuacanya ‘baik’. Jika suhunya ‘panas’ dan curah hujannya ‘sedikit.hujan’, maka cuacanya ‘oke’. Jika suhu ‘panas’, kelembapan ‘kering’ dan curah hujan ‘sedikit.hujan’, maka cuaca ‘oke’. Perhatikan && dan ||.
Sekarang, mari kita bangun sistemnya.
Sistem logika fuzzy
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)
Seperti dapat kita lihat, beberapa plot menampilkan tumpang tindih antara properti variabel. Misalnya pada plot temperatur terdapat overlapping antara ‘baik’ dan ‘panas’, jadi jika suhu 80, maka sekitar 0,15 ‘baik’, 0,15 ‘panas’ dan 0,0 ‘dingin’.
Contoh yang dilakukan untuk menguji sistem. Suhu = 75, kelembaban = 0 dan curah hujan = 70
example.1 <- fuzzy_inference(model, list(temperature = 75, humidity = 0, precipitation = 70))
gset_defuzzify(example.1, "centroid")
## [1] 65
plot(example.1)