×

Belajar Algoritma Fuzzy Bagian 2

Belajar Algoritma Fuzzy Bagian 2

2,063 Views

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:

  1. MAKANAN = 8
  2. PELAYANAN = 7

Penilaian PELAYANAN dan MAKANAN berada pada rentang nilai 0-10. Adapun aturan pemberian rating yang ditetapkan sebagai berikut:

  1. Jika MAKANAN Tengik, ATAU PELAYANAN Jelek maka Rating Murah
  2. Jika PELAYANAN Sedang, maka Rating Standar
  3. Jika MAKANAN Lezat ATAU PELAYANAN Bagus, maka Rating Mahal

Variabel Fuzzy: Makanan

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

  1. tengik : trapesium(0, 0, 1, 3)
  2. 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

  1. jelek : segitiga (-4, 0, 4)
  2. sedang : segitiga (1, 5, 9)
  3. 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

  1. murah : segitiga (0, 5, 10)
  2. standar : segitiga (10, 15, 20)
  3. 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

  1. MAKANAN = 8
  2. PELAYANAN = 7

Maka nilai makanan 8 masing-masing untuk variabel fuzzy: makanan dengan himpunan fuzzy

  1. tengik = 0
  2. lezat = 0.5

Darimana nilai diatas didapat? kalian cukup perhatikan variabel fuzzy: makanan berikut

Begitu juga nilai pelayanan = 7 untuk variabel fuzzy: pelayanan

  1. jelek = 0
  2. sedang =0.5
  3. bagus =0.25

Perhatikan grafik berikut

Setelah didapatkan informasi membership diatas, dilanjutkan dengan penerapan fuzzy rule yaitu

  1. Jika MAKANAN Tengik ATAU PELAYANAN Jelek maka Rating Murah artinya max(0,0) = 0
  2. Jika PELAYANAN Sedang, maka Rating Standar artinya max(o,5) = 0.5
  3. 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)

  1. rating murah : 0
  2. rating standar: 0.5
  3. 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

  1. standar ada 2 titik yaitu A dan B
  2. mahal ada 2 titik yaitu C dan D

Mencari Nilai titik A

    \[y = \frac{A-10}{15-10}\]

    \[0.5 = \frac{x-10}{15-10}\]

    \[2.5 = x-10\]

    \[x=12.5\]

Mencari Nilai titik B

    \[y = \frac{20-B}{20-15}\]

    \[0.5 = \frac{20-B}{20-15}\]

    \[2.5 = 20-x\]

    \[x=17.5\]

Mencari Nilai titik C

    \[y = \frac{C-20}{25-20}\]

    \[0.5 = \frac{C-20}{25-20}\]

    \[2.5 = x-20\]

    \[x=22.5\]

Mencari Nilai titik D

    \[y = \frac{30-D}{30-25}\]

    \[0.5 = \frac{30-D}{30-25}\]

    \[2.5 = 30-x\]

    \[x=27.5\]

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

  1. Slider
  2. Axes
  3. 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

 

You May Have Missed