Belajar Algoritma Fuzzy Bagian 2
Setelah kalian mempelajari dasar-dasar logika fuzzy, dilanjutkan dengan sebuah kasus berikut ini
Karena hari ini ulang tahun, maka Yogi ingin mengajak teman-temannya makan di restoran. Yogi akan memberikan uang tip ke pelayan restoran melalui paramater dari tingkat PELAYANAN(service) dan kualitas MAKANAN (food) yang dihidangkan. Jika setelah menikmati hidangan dan fasilitas PELAYANAN diberikan nilai, sebagai berikut:
- MAKANAN = 8
- PELAYANAN = 7
Penilaian PELAYANAN dan MAKANAN berada pada rentang nilai 0-10. Adapun aturan pemberian rating yang ditetapkan sebagai berikut:
- Jika MAKANAN Tengik, ATAU PELAYANAN Jelek maka Rating Murah
- Jika PELAYANAN Sedang, maka Rating Standar
- Jika MAKANAN Lezat ATAU PELAYANAN Bagus, maka Rating Mahal
Variabel Fuzzy: Makanan
Contents
untuk variabel fuzzy makanan mempunyai semesta pembicara 0-10 yang terdiri dari himpunan fuzzy: tengik dan lezat. Masing-masing himpunan fuzzy mempunyai domain dan fungsi keanggotan sebagai berikut
- tengik : trapesium(0, 0, 1, 3)
- lezat : trapesium (7, 9, 10, 10)
Bila kita gambarkan dalam bentuk grafik yaitu
Variabel Fuzzy: Pelayanan
untuk variabel fuzzy pelayanan mempunyai semesta pembicara 0-10 yang terdiri dari himpunan fuzzy: jelek, sedang, bagus. Masing-masing himpunan fuzzy mempunyai domain dan fungsi keanggotan sebagai berikut
- jelek : segitiga (-4, 0, 4)
- sedang : segitiga (1, 5, 9)
- bagus: segitiga (6, 10, 14)
Bila kita gambarkan dalam bentuk grafik yaitu
Variabel Fuzzy: Rating
untuk variabel fuzzy rating mempunyai semesta pembicara 0-30 yang terdiri dari himpunan fuzzy: murah, standar, mahal. Masing-masing himpunan fuzzy mempunyai domain dan fungsi keanggotan sebagai berikut
- murah : segitiga (0, 5, 10)
- standar : segitiga (10, 15, 20)
- mahal: segitiga (20, 25, 30)
Bila kita gambarkan dalam bentuk grafik yaitu
Toolbox Fuzzy di Matlab
Untuk membuat logika fuzzy di Matlab sangatlah mudah, mari kita coba untuk menggunakan perintah berikut
clc;clear all;close all; a = newfis('restoran'); a = addvar(a,'input','makanan',[0,10]); a = addmf(a,'input',1,'tengik','trapmf',[0,0,1,3]); a = addmf(a,'input',1,'lezat','trapmf',[7,9,10,10]); a = addvar(a,'input','pelayanan',[0,10]); a = addmf(a,'input',2,'jelek','trimf',[-4,0,4]); a = addmf(a,'input',2,'sedang','trimf',[1,5,9]); a = addmf(a,'input',2,'bagus','trimf',[6,10,14]); a = addvar(a,'output','rating',[0,30]); a = addmf(a,'output',1,'murah','trimf', [0,5,10]); a = addmf(a,'output',1,'standar','trimf', [10,15,20]); a = addmf(a,'output',1,'mahal','trimf', [20,25,30]);
perintah a = newfis('restoran');
mempunyai jenis fuzzy seperti berikut
a = struct with fields: name: 'restoran' type: 'mamdani' andMethod: 'min' orMethod: 'max' defuzzMethod: 'centroid' impMethod: 'min' aggMethod: 'max' input: [] output: [] rule: []
Membuat Matrix Fuzzy Rule
Untuk membuat matrix fuzzy rule, maka caranya sebagai berikut
makanan | pelayanan | rating |
input 1 | input 2 | output 1 |
1. tengik | 1. jelek | 1. murah |
2. lezat | 2. sedang | 2. standar |
3. bagus | 3. mahal |
Kalian bisa melihat setiap variable fuzzy mempunyai urutan himpunan fuzzy, sedangkan hubungan antar variable fuzzy berupa OR AND, didalam Matlab sebagai berikut
hubungan |
1. AND |
2. OR |
Sedangkan matrix fuzzy rule setidaknya ada 5 kolom yaitu
kolom ke 1 | kolom ke 2 | kolom ke 3 | kolom ke 4 | kolom k5 | |
aturan | input 1 | input 2 | output 1 | nilai | hubungan |
Misalkan ada aturan berikut
Jika MAKANAN Tengik, ATAU PELAYANAN Jelek maka Rating Murah
kolom 1 akan diisi 1 karena tengik no urut 1
kolom 2 akan diisi 1 karena jelek no urut 1
kolom 3 akan diisi 1 karena murah no urut 1
kolom 4 akan diisi dengan nilai 1 karena menghasilkan true / benar
kolom 5 akan diisi 2 karena hubungan antara makanan dan pelayanan adalaha atau yaitu no 2
rule1 = [1 1 1 1 2];
Untuk rule 2
Jika PELAYANAN Sedang, maka Rating Standar
karena makanan tidak ada atau bernilai 0
rule2 = [0 2 2 1 1];
untuk rule 3
Jika MAKANAN Lezat ATAU PELAYANAN Bagus, maka Rating Mahal
kode rule nya yaitu
rule3 = [2 3 3 1 2];
Kode lengkapnya serta cara menampilkannya yaitu
rule1 = [1 1 1 1 2]; rule2 = [0 2 2 1 1]; rule3 = [2 3 3 1 2]; ruleList = [rule1;rule2;rule3]; a = addrule(a,ruleList); showrule(a)
hasil
ans = 3×76 char array '1. If (makanan is tengik) or (pelayanan is jelek) then (rating is murah) (1)' '2. If (pelayanan is sedang) then (rating is standar) (1) ' '3. If (makanan is lezat) or (pelayanan is bagus) then (rating is mahal) (1) '
ataupun kalian bisa menggunakan editor visual melalui perintah ruleedit()
ruleedit(a)
sampai saat ini kalian, sudah belajar cara membuat fuzzy di matlab, saatnya untuk melakukan evaluasi
Menampilkan Fuzzy
Untuk menampilkan fuzzy, bisa kalian gunakan perintah fuzzy(),
fuzzy(a)
maka akan tampil fuzzy sebagai berikut
Evaluasi Fuzzy
Untuk melakukan evaluasi fuzzy, gunakan akses View -> Rules atau melalui perintah ruleview()
ruleview(a)
Jika kita menilai restoran sebagai berikut
MAKANAN = 8
PELAYANAN = 7
maka nilai rating nya adalah 20
Bagaimana menghitung Defuzifikasi?
Untuk proses perhitungan defuzifikasi sebagai berikut, pada kasus diatas didapatkan masukan sebagai berikut
- MAKANAN = 8
- PELAYANAN = 7
Maka nilai makanan 8 masing-masing untuk variabel fuzzy: makanan dengan himpunan fuzzy
- tengik = 0
- lezat = 0.5
Darimana nilai diatas didapat? kalian cukup perhatikan variabel fuzzy: makanan berikut
Begitu juga nilai pelayanan = 7 untuk variabel fuzzy: pelayanan
- jelek = 0
- sedang =0.5
- bagus =0.25
Perhatikan grafik berikut
Setelah didapatkan informasi membership diatas, dilanjutkan dengan penerapan fuzzy rule yaitu
- Jika MAKANAN Tengik ATAU PELAYANAN Jelek maka Rating Murah artinya max(0,0) = 0
- Jika PELAYANAN Sedang, maka Rating Standar artinya max(o,5) = 0.5
- Jika MAKANAN Lezat ATAU PELAYANAN Bagus, maka Rating Mahal artinya max(0.5, 0.25) = 0.5
Jangan lupa untuk ATAU/OR adalah nilai maksimal sedangkan AND/dan adalah nilai minimal sehingga didapatkan informasi sebagai berikut (membership)
- rating murah : 0
- rating standar: 0.5
- rating bagus: 0.5
Maka bila diplotkan nilai diatas (melalui sumbu y) didapatkan plot grafik berikut
Nilai 0 akan diabaikan karena tidak memotong apapun, namun untuk nilai 0.5 akan memotong himpunan fuzzy dari
- standar ada 2 titik yaitu A dan B
- mahal ada 2 titik yaitu C dan D
Mencari Nilai titik A
Mencari Nilai titik B
Mencari Nilai titik C
Mencari Nilai titik D
Atau bila digambarkan dan dibuat persamaan batasan sebagai berikut
Setelah memperoleh daerah implikasi, kita akan melakukan langkah terakhir yaitu defuzzy-fikasi yaitu mencari pusat (centroid) dari hasil komposisi output yang kita peroleh. Metodenya cukup sederhana. Berikut adalah rumus matematisnya:
Mencari Luas Daerah
Mari kita bagi daerah implikasi kita menjadi enam bagian, seperti dibawah ini. Terlihat bahwa trapezium akan dibagi menjadi beberapa bagian berbentuk segitiga dan persegi panjang. Rumus mencari luas segitiga sudah lazim, yaitu alas dikali tinggi dibagi dua, sedangkan rumus mencari luas pesegi panjang adalah panjang dikalikan dengan lebar. Lakukan pencarian luas untuk keenam bagian-bagian tersebut
Mencari Moment/center of gravity/titik tengah/centroid
Momen dapat diperoleh dengan mengalikan tiap-tiap nilai z (dalam hal ini terhadap z), dan mengintegralkannya dengan batas atas dan batas bawah tertentu. Proses ini tidaklah sulit, sebab hanya melibatkan matematka biasa. Untuk mencari momen, mari kita sederhanakan persamaan. Kita menyederhanakan dengan membagi pembilang dengan penyebutnya, sehingga diperoleh bentuk yang lebih sederhana (tidak melibatkan bentuk pecahan).
Selanjutnya, kita cari momennya, Amati bahwa integral dilakukan terhadap variabel z. Dengan demikian, variabel x pada persamaan diatas harus diubah ke z. kalikan setiap persamaan dengan z, kemudian kita integralkan. Karena ada batas atas dan batas bawah, maka selesaikan persamaan dengan memasukkan batas atas pada hasil integrasi, dikurangi dengan batas bawahnya.
mencari Nilai Defuzifikasi
Selanjutnya, terapkan rumus centroid, yaitu jumlah momen dibagi dengan total luasan daerah implikasi
Membuat Aplikasi Fuzzy berbasis GUI di matlab
Tentu tidak menarik kalau membuat aplikasi berbasis CLI (command Line interface), apalagi jaman sekarang yang suka drag and drop. Dalam membuat aplikasi berbasis GUI di Matlab, kalian bisa menggunakan component sebagai berikut
- Slider
- Axes
- Text
Untuk merancang GUI atauapun flowchart, saya saranakan menggunakan evolus karena component sangat lengkap. Berikut rancangan GUI Matlab untuk Aplikasi Fuzzy
3 Component itu sangat cukup digunakan untuk melakukan simulasi dengan hasil sebagai berikut
Lebih lanjut, agar kalian bisa pelajari, bisa download Aplikasi Fuzzy Berbasis GUI developing matlab, disini
Gimana menurut kalian? sangat mudah bukan? Mari kita lanjut ke bagian 3