Belajar Algoritma Fuzzy Bagian 3

By | January 14, 2021
1,514 Views

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

  1. sensor suhu dan
  2. sensor cahaya

Menulis fuzzy lebih mudah menggunakan code by code lho daripada menggunakan editor fuzzy bawaan matlab

Variabel Fuzzy: sensor suhu

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

  1. dingin: type trimf, Params [0, 0, 15]
  2. sejuk: type trimf, Params [11, 18, 25]
  3. normal: type trimf, Params [21, 25, 30]
  4. hangat: type trimf, Params [28, 34, 40]
  5. 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

  1. gelap: type trimf, Params [0, 0, 35]
  2. normal: type trimf, Params [31, 50, 85]
  3. 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

  1. lambat: type trimf, Params [0, 0, 15]
  2. sedang: type trimf, Params [11, 15, 21]
  3. 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

  1. Suhu : 10
  2. 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