
Tulisan ini lanjutan dari Belajar Algoritma Fuzzy Bagian 2, dengan studi kasus yang berbeda agar kalian lebih paham cara menggunakan toolbox. Studi kasus yaitu sistem pengatur kecepatan mesin menggunakan dengan masukan berupa
- sensor suhu dan
- sensor cahaya
Menulis fuzzy lebih mudah menggunakan code by code lho daripada menggunakan editor fuzzy bawaan matlab
Variabel Fuzzy: sensor suhu
Contents
untuk variabel fuzzy suhu mempunyai semesta pembicara 0-50 yang terdiri dari himpunan fuzzy: dingin, sejuk, normal, hangat, dan panas. Masing-masing himpunan fuzzy mempunyai domain dan fungsi keanggotan sebagai berikut
Input 1 : Sensor suhu |
|
SUHU |
KETERANGAN |
Dingin |
0 0C – 15 0C |
Sejuk |
11 0C – 25 0C |
Normal |
21 0C – 30 0C |
Hangat |
28 0C – 40 0C |
Panas |
36 0C – 50 0C |
Lebih lengkap mengenai membership function dari sensor suhu yaitu
- dingin: type trimf, Params [0, 0, 15]
- sejuk: type trimf, Params [11, 18, 25]
- normal: type trimf, Params [21, 25, 30]
- hangat: type trimf, Params [28, 34, 40]
- panas: type trimf, Params [36, 50, 50]
trimf adalah triangular/segitiga
Variabel Fuzzy: sensor cahaya
untuk variabel fuzzy sensor cahaya mempunyai semesta pembicara 0-100 yang terdiri dari himpunan fuzzy: gelap, normal, terang. Masing-masing himpunan fuzzy mempunyai domain dan fungsi keanggotan sebagai berikut
Input 2 : Sensor cahaya |
|
CAHAYA |
KETERANGAN |
Gelap |
0 Cd– 35 Cd |
Normal |
31 Cd– 85 Cd |
Terang |
81 Cd- 100 Cd |
Lebih lengkap mengenai membership function dari sensor cahaya yaitu
- gelap: type trimf, Params [0, 0, 35]
- normal: type trimf, Params [31, 50, 85]
- terang, type trimf, Params [81, 100, 100]
Variabel Fuzzy: kecepatan mesin
untuk variabel fuzzy kecepatan mesin mempunyai semesta pembicara 0-45 yang terdiri dari himpunan fuzzy: lambat, sedang, cepat. Masing-masing himpunan fuzzy mempunyai domain dan fungsi keanggotan sebagai berikut
Output: kecepatan mesin |
|
KEC. MESIN |
KETERANGAN |
Lambat |
0 m/s– 15 m/s |
Sedang |
11 m/s – 21 m/s |
Cepat |
19 m/s – 45 m/s |
Lebih lengkap mengenai membership function dari kecepatan mesin yaitu
- lambat: type trimf, Params [0, 0, 15]
- sedang: type trimf, Params [11, 15, 21]
- cepat: type trimf, Params [19, 50, 50]
Kode matlab untuk logika Fuzzy
Setelah didapatkan informasi variabel fuzzy, himpunan semesta, dan membership functionnya, maka saat nya membuat kode di matlab, seperti berikut kodenya
clc;clear all;close all; a = newfis('mesin'); a = addvar(a,'input','suhu',[0,50]); a = addmf(a,'input',1,'dingin','trimf',[0,0,15]); a = addmf(a,'input',1,'sejuk','trimf',[11,18,25]); a = addmf(a,'input',1,'normal','trimf',[21,25,30]); a = addmf(a,'input',1,'hangat','trimf',[28,34,40]); a = addmf(a,'input',1,'panas','trimf',[36,50,50]); a = addvar(a,'input','cahaya',[0,100]); a = addmf(a,'input',2,'gelap','trimf',[0,0,35]); a = addmf(a,'input',2,'normal','trimf',[31,50,85]); a = addmf(a,'input',2,'terang','trimf',[81,100,100]); a = addvar(a,'output','kecepatan',[0,45]); a = addmf(a,'output',1,'lambat','trimf', [0,0,15]); a = addmf(a,'output',1,'sedang','trimf', [11,15,21]); a = addmf(a,'output',1,'cepat','trimf', [19,50,50]);
Fuzzy Rule
Adapun fuzzy rule yang digunakan mengikuti aturan sebagai berikut (semuanya menggunakan AND)
No. |
INPUT |
OUTPUT |
|
SUHU |
CAHAYA |
KEC. MESIN |
|
1 |
Dingin |
Gelap |
Lambat |
2 |
Dingin |
Normal |
Lambat |
3 |
Dingin |
Terang |
Lambat |
4 |
Sejuk |
Gelap |
Lambat |
5 |
Sejuk |
Normal |
Lambat |
6 |
Sejuk |
Terang |
Sedang |
7 |
Normal |
Gelap |
Sedang |
8 |
Normal |
Normal |
Sedang |
9 |
Normal |
Terang |
Sedang |
10 |
Hangat |
Gelap |
Sedang |
11 |
Hangat |
Normal |
Cepat |
12 |
Hangat |
Terang |
Cepat |
13 |
Panas |
Gelap |
Cepat |
14 |
Panas |
Normal |
Cepat |
15 |
Panas |
Terang |
Cepat |
Untuk mempermudah membuat aturan, kami punya trick khusus, yaitu cukup dibuat type variable struct seperti dibawah ini
suhu.dingin = 1; suhu.sejuk = 2; suhu.normal = 3; suhu.hangat = 4; suhu.panas = 5; cahaya.gelap = 1; cahaya.normal = 2; cahaya.terang = 3; kecepatan.lambat = 1; kecepatan.sedang = 2; kecepatan.cepat = 3;
Kalau sudah OK, dengan mengikuti uraian yang ada ditabel, maka kita cukup membuat kalimat berikut
rule1 = [suhu.dingin, cahaya.gelap, kecepatan.lambat, 1, 1]; rule2 = [suhu.dingin, cahaya.normal, kecepatan.lambat, 1, 1]; rule3 = [suhu.dingin, cahaya.terang, kecepatan.lambat, 1, 1]; rule4 = [suhu.sejuk, cahaya.gelap, kecepatan.lambat, 1, 1]; rule5 = [suhu.sejuk, cahaya.normal, kecepatan.lambat, 1, 1]; rule6 = [suhu.sejuk, cahaya.terang, kecepatan.sedang, 1, 1]; rule7 = [suhu.normal, cahaya.gelap, kecepatan.sedang, 1, 1]; rule8 = [suhu.normal, cahaya.normal, kecepatan.sedang, 1, 1]; rule9 = [suhu.normal, cahaya.terang, kecepatan.sedang, 1, 1]; rule10 = [suhu.hangat, cahaya.gelap, kecepatan.sedang, 1, 1]; rule11 = [suhu.hangat, cahaya.normal, kecepatan.cepat, 1, 1]; rule12 = [suhu.hangat, cahaya.terang, kecepatan.cepat, 1, 1]; rule13 = [suhu.panas, cahaya.gelap, kecepatan.cepat, 1, 1]; rule14 = [suhu.panas, cahaya.normal, kecepatan.cepat, 1, 1]; rule15 = [suhu.panas, cahaya.terang, kecepatan.cepat, 1, 1]; ruleList = [rule1;rule2;rule3;... rule4;rule5;rule6;... rule7;rule8;rule9;... rule10;rule11;rule12;... rule13;rule14;rule15]; a = addrule(a,ruleList); showrule(a)
hasil rule fuzzy yaitu
'1. If (suhu is dingin) and (cahaya is gelap) then (kecepatan is lambat) (1) ' '2. If (suhu is dingin) and (cahaya is normal) then (kecepatan is lambat) (1)' '3. If (suhu is dingin) and (cahaya is terang) then (kecepatan is lambat) (1)' '4. If (suhu is sejuk) and (cahaya is gelap) then (kecepatan is lambat) (1) ' '5. If (suhu is sejuk) and (cahaya is normal) then (kecepatan is lambat) (1) ' '6. If (suhu is sejuk) and (cahaya is terang) then (kecepatan is sedang) (1) ' '7. If (suhu is normal) and (cahaya is gelap) then (kecepatan is sedang) (1) ' '8. If (suhu is normal) and (cahaya is normal) then (kecepatan is sedang) (1)' '9. If (suhu is normal) and (cahaya is terang) then (kecepatan is sedang) (1)' '10. If (suhu is hangat) and (cahaya is gelap) then (kecepatan is sedang) (1)' '11. If (suhu is hangat) and (cahaya is normal) then (kecepatan is cepat) (1)' '12. If (suhu is hangat) and (cahaya is terang) then (kecepatan is cepat) (1)' '13. If (suhu is panas) and (cahaya is gelap) then (kecepatan is cepat) (1) ' '14. If (suhu is panas) and (cahaya is normal) then (kecepatan is cepat) (1) ' '15. If (suhu is panas) and (cahaya is terang) then (kecepatan is cepat) (1) '
Bila sudah OK, kita akan tampilkan saja menggunakan perintah fuzzy() yaitu fuzzy(a)
Kalian bisa cek satu-persatu ketika ada input berupa
- Suhu : 10
- Cahaya: 20
menghasilkan output
Atau menggunakan kode berikut
output = evalfis([10 20],a)
Surface Viewer
Kita bisa melihat surface viewer nya
Bagaimana menurut kalian? menulis kode satu-persatu menggunakan kode diatas? sebenarnya ada cara drag and drop menggunakan perintah fuzzy(), namun cukup repot harus klik sana-sini