Anda di sini

Pemrograman

[TUTORIAL] Pemrograman Logika Fuzzy Menggunakan MATLAB

Kusuma Wardana - 22 November 2015 10:18:04 2

Pada tulisan sebelumnya, kita telah membahas bagaimana menyelesaikan sistem fuzzy secara matematis dan menggunkan FIS Editor. Bagi teman-teman yang ingin mereview bagaimana menghitung logika fuzzy secara matematis, silahkan cek disini. Namun, jika ingin mereview bagaimana menggunakan FIS Editor, silahkan cek disini.

Pada pembahasan kali ini, kita akan menggunakan bahasa pemrograman dalam merancang sistem fuzzy kita. Oleh karena itu, pemahaman dasar tentang pemrograman MATLAB sangat dibutuhkan. Namun demikian, pembasan kita saat ini cukup sederhana. Kita akan tetap menggunakan studi kasus yang terdahulu, yaitu Dinner for Two.

Mari kira review kasus kita:
Karena hari ini Valentine, Romi ingin mengajak Juli dinner di suatu restoran. Sebelum berangkat dinner, Romi berpikir akan membagi kebahagiaannya pada malam ini kepada pelayan restoran dengan memberikan uang tip. Dia akan memberikan uang tip sebesar 5-25% dari total belanjanya. Besarnya uang TIP akan dilihat dari tingkat PELAYANAN(service) dan kualitas MAKANAN (food) yang dihidangkan. Bantulah Romi untuk memutuskan besarnya uang tip yang akan diberikan kepada pelayan restoran, jika setelah menikmati hidangan dan fasilitas PELAYANAN Romi memberi nilai, sebagai berikut:
PELAYANAN = 7
MAKANAN = 8

Penilaian PELAYANAN dan MAKANAN berada pada rentang nilai 0-10. Ingat, kisaran uang tip adalah 5 - 25%.

Adapun aturan pemberian tip yg ditetapkan oleh Romi adalah sebagai berikut:

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

Pembahasan:
Dapat kita simpulkan bahwa pasangan input-output dari kasus kita adalah sebagai berikut:

  • INPUT: PELAYANAN (Jelek, Sedang, Bagus) dan MAKANAN (Tengik, Lezat)
  • OUTPUT: TIP (Murah, Standar, Mahal)

Tahapan dalam desain fuzzy menggunakan bahasa pemrograman memiliki kemiripan dengan desain fuzzy menggunakan FIS Editor. Langkah awal adalah mendefinisikan apaa saja yang menjadi pasangan input dan output beserta fungsi keanggotaannya masing-masing.

Pertama, kita buat nama file FIS kita. Langkah ini menggunakan sintaks newfis. FIS berarti Fuzzy Inference Systems. Misalkan saat ini kita beri nama projek kita DinnerForTwo.
a=newfis('DinnerForTwo');

Selanjutnya, definisikan input pertama kita, yaitu PELAYANAN, yang memiliki rentang antara 0 sampai 10. Gunakanlah sintaks addvar.
a=addvar(a,'input','PELAYANAN',[0 10]);

Tambahkan semua fungsi keanggotaan yang menyusun variabel input PELAYANAN. Misalkan kita beri nama jenis pelayanan berupa Jelek, Sedang, dan Bagus. Setiap fungsi keanggotaan harus dilengkapi dengan parameter pembentuknya. Karena berupa segitiga (trimf), maka wajib memiliki tiga input parameter, yaitu titik awal, puncak dan titik akhir. Untuk menambahkan fungsi keanggotaan (membership function), gunakanlah sintaks addmf.

a=addmf(a,'input',1,'Jelek','trimf',[-4 0 4]);
a=addmf(a,'input',1,'Sedang','trimf',[1 5 9]);
a=addmf(a,'input',1,'Bagus','trimf',[6 10 14]);

Untuk memastikan bagaimana bentuk dari input PELAYANAN dan masing-masing fungsi keanggotaannya, dapat kita plot dengan sintaks plotmf, sebagai berikut:
plotmf(a,'input',1)

Hasilnya tampak seperti berikut:

Gambar 1. Fungsi Keaanggotaan Input PELAYANAN

Lakukan hal yang sama untuk variabel input kedua, yaitu MAKANAN. MAKANAN memiliki rentang yang sama dengan PELAYANAN, yaitu dari 0 sampai dengan 10. Khusus untuk MAKANAN, fungsi keanggotaan yang dibentuk menggunakan keanggotaan trapesium (trapmf). Input parameter yang digunakan sebanyak empat titik, yaitu titik awal, titik puncak pertama, titik puncak kedua, dan titik akhir. Logikanya sama persis dengan bagaimana menggambarkan sebuah segitiga, hanya parameternya yang berbeda.

a=addvar(a,'input','MAKANAN',[0 10]);
a=addmf(a,'input',2,'Tengik','trapmf',[0 0 1 3]);
a=addmf(a,'input',2,'Lezat','trapmf',[7 9 10 10]);

Untuk melihat hasilnya, kita gunakan sintaks berikut:
figure; plotmf(a,'input',2)

Gambar 2. Fungsi Keaanggotaan Input MAKANAN

Definisi input beserta fungsi keanggotaannya telah selesai. Sekarang, saatnya kita buat untuk fungsi output, yaitu TIP. Langkahnya mirip dengan definisi kedua input tadi.
a=addvar(a,'output','TIP',[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]);

Mari kita lihat hasilnya:
figure; plotmf(a,'output',1)

Gambar 3. Fungsi Keaanggotaan output TIP

Setelah pasangan input-output terdefinisi, langkah selanjutnya adalah menyusun aturan-aturan yang berlaku dalam sistem fuzzy kita. Penulisan aturan ini perlu diperhatikan dengan baik. Sebab, penulisannya berupa matriks, dan kesalahan kecil dapat berakibat sistem tidak sesuai yang kita inginkan.

Jika kita memiliki m input dan n output, maka matriks yang disusun harus memiliki kolom m+n+2. Sebagai contoh jika kita merujuk pada kasus kita, maka kita memiliki dua input (PELAYANAN dan MAKANAN), dan satu output (TIP). Dengan demikian, total kolom yang digunakan adalah 2+1+2 = 5. Nilai m kolom pertama mewakili indeks dari input kita. Contoh, jika input PELAYANAN memiliki anggota: Jelek, Sedang dan Bagus, maka indeks 1 mewakili jelek, indeks 2 mewakili Sedang, dan indeks 3 meakili Bagus. Nilai n kolom berikutnya adalah indeks dari output kita. Nilai kolom m+n+1 mewakilipembobotan dari aturan kita. Bobot ini memiliki nilai antara 0 - 1. Umumnya, nilai ini kita biarkan menjadi 1. Nilai kolomm+n+1 mewakili operator dalam aturan fuzzy. Nilai 1 akan mewakili logika AND, sedangkan nilai 2 mewakili OR.

% Aturan1: Jika PELAYANAN Jelek ATAU MAKANAN Tengik, maka TIP Murah
aturan1 = [1 1 1 1 2];
% Aturan2: Jika PELAYANAN Sedang, maka TIP Standar
aturan2 = [2 0 2 1 0];
% Aturan3: Jika PELAYANAN Bagus ATAU MAKANAN Lezat, maka TIP Mahal
aturan3 = [3 2 3 1 2];

gabungkan semua aturan tersebut dengan sintaks:
listAturan = [aturan1;aturan2;aturan3];
a = addrule(a,listAturan);

Untuk memastikan apakah aturan kita telah benar, mari gunakan sintaks berikut yang dieksekusi melalui Command Window:

>> showrule(a)

ans =

1. If (PELAYANAN is Jelek) or (MAKANAN is Tengik) then (TIP is Murah) (1)
2. If (PELAYANAN is Sedang) then (TIP is Standar) (1)
3. If (PELAYANAN is Bagus) or (MAKANAN is Lezat) then (TIP is Mahal) (1)

Sekarang, kita sudah di penghujung pemrograman kita. Pada langkah terakhir, kita akan melakukan evaluasi hasil akhir dari sistem fuzzy kita. Seperti yang telah kita ketahui bahwa nilai PELAYANAN = 7, dan MAKANAN = 8

gunakalah sintaks evalfis, sebagai berikut:
>> evalfis([7 8], a)

ans =

19.9980

Nilainya sama dengan menggunakan penurunan matematis dan FIS Editor, yaitu sebesar 20%.

Berikut koding selengkapnya:

% Buatlah variabel FIS
a=newfis('DinnerForTwo');
% Tambahkan input PELAYANAN
a=addvar(a,'input','PELAYANAN',[0 10]); 
% Tambahkan fungsi keanggotaan PELAYANAN: Jelek, Sedang, Bagus
a=addmf(a,'input',1,'Jelek','trimf',[-4 0 4]);
a=addmf(a,'input',1,'Sedang','trimf',[1 5 9]);
a=addmf(a,'input',1,'Bagus','trimf',[6 10 14]);
% plot input PELAYANAN utk melihat hasilnya
plotmf(a,'input',1)

% Tambahkan input MAKANAN
a=addvar(a,'input','MAKANAN',[0 10]);
% Tambahkan fungsi keanggotaan MAKANAN: Tengik, Lezat
a=addmf(a,'input',2,'Tengik','trapmf',[0 0 1 3]);
a=addmf(a,'input',2,'Lezat','trapmf',[7 9 10 10]);
% plot input MAKANAN utk melihat hasilnya
figure; plotmf(a,'input',2)

% Tambahkan output TIP
a=addvar(a,'output','TIP',[0 30]); 
% Tambahkan fungsi keanggotaan TIP: Murah, Standar, Mahal
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]);
% plot output TIP utk melihat hasilnya
figure; plotmf(a,'output',1)

% Sekarang masukkan aturan-aturan
% Aturan1: Jika PELAYANAN Jelek ATAU MAKANAN Tengik, maka TIP Murah
aturan1 = [1 1 1 1 2];
% Aturan2: Jika PELAYANAN Sedang, maka TIP Standar
aturan2 = [2 0 2 1 0];
% Aturan3: Jika PELAYANAN Bagus ATAU MAKANAN Lezat, maka TIP Mahal
aturan3 = [3 2 3 1 2];

% Padukan semua aturan
listAturan = [aturan1;aturan2;aturan3];
a = addrule(a,listAturan);
% Perlihatkan aturan, apakah sudah sesuai?
showrule(a);
% Lakukan evaluasi untuk PELAYANAN = 7 dan MAKANAN = 8
evalfis([7 8], a)

Yup, semoga tutorial ini bermanfaat...

17.065
Daftar Artikel Terkait
Image

Kusuma Wardana

I Nyoman Kusuma Wardana, yang akrab dipanggil Kusuma, lahir dan besar di Bali. Ia tinggal di Desa Wisata Ubud, dan lebih banyak melaksanakan aktivitasnya di Denpasar. Profesinya adalah sebagai staf pengajar di Jurusan Teknik Elektro, Politeknik Negeri Bali. Saat ini Ia menjadi salah satu penulis di tutorkeren.com.

Artikel Menarik Lainnya

Komentar

pak ini pakek metode apa ya? mamdani atau apa?

Halo,

ijin bantu jawab, karena pada tutorial ini menggunakan matlab yang secara default memakai metode mamdani pada fungsi newfisnya, maka dapat disimpulkan metodenya pakai mamdani.

more mengenai step by step memakai newfis: https://tutorkeren.com/artikel/tutorial-lengkap-menggunakan-fuzzy-logic-...

semoga membantu Dance 4

HTSL://HIGH THINKING SIMPLE LIVING . ME

Mari Gabung

Halo Emo 51 , Ada yang ingin disampaikan? Jangan sungkan untuk gabung diskusi ini. Silahkan Login dulu atau Daftar baru.