48397005 denny pemrogramanfuzzy (1)

19
Komunitas eLearning IlmuKomputer.Com Copyright © 2003-2007 IlmuKomputer.Com 1 Tutorial Pemrograman Fuzzy Logic Denny Hermawanto [email protected] http://www.geocities.com/d_3_nny/ Fuzzy Logic banyak diaplikasikan dalam berbagai bidang, salah satunya adalah sebagai alat bantu pengambil keputusan. Dalam artikel ini diberikan contoh proses pembuatan program fuzzy logic dalam bahasa pemrograman Java yang diaplikasikan untuk menentukan Jumlah Produk yang dihasilkan berdasarkan kondisi Suhu, Kebisingan dan Pencahayaan. Implementasi bahasa pemrograman Java untuk pembentukan fungsi keanggotaan, proses penalaran fuzzy metode Sugeno, proses fuzzifikasi dan defuzzifikasi akan dibahas. Program diuji terhadap suatu kondisi Suhu, Kebisingan dan Pencahayaan tertentu untuk mengetahui hasilnya. Pendahuluan Fuzzy Logic diperkenalkan oleh Prof. Lotfi Zadeh pada tahun 1965. Merupakan metode yang mempunyai kemampuan untuk memproses variabel yang bersifat kabur atau yang tidak dapat dideskripsikan secara eksak/pasti seperti misalnya tinggi, lambat, bising, dll. Dalam fuzzy logic variabel yang bersifat kabur tersebut direpresentasikan sebagai sebuah himpunan yang anggotanya adalah suatu nilai crisp dan derajat keanggotaannya (membership function) dalam himpunan tersebut. Proses-proses dalam fuzzy logic adalah fuzzifikasi, penalaran (reasoning), dan defuzzifikasi: Fuzzifikasi: merupakan proses untuk mendapatkan derajat keanggotaan dari sebuah nilai numerik masukan (crisp) Penalaran: proses untuk mendapatkan aksi keluaran dari suatu kondisi input dengan mengikuti aturan-aturan (IF-THEN Rules) yang telah ditetapkan yang disebut sebagai inference/reasoning. Defuzzifikasi: proses untuk merubah hasil penalaran yang berupa derajat keanggotaan keluaran menjadi variabel numerik kembali. Blok diagram proses fuzzy logic ditunjukkan pada Gambar 1. Lisensi Dokumen: Copyright © 2003-2006 IlmuKomputer.Com Seluruh dokumen di IlmuKomputer.Com dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari IlmuKomputer.Com.

Upload: afifsetyonugroho

Post on 21-Dec-2015

222 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 1

Tutorial Pemrograman Fuzzy Logic

Denny Hermawanto [email protected]

http://www.geocities.com/d_3_nny/

Fuzzy Logic banyak diaplikasikan dalam berbagai bidang, salah satunya adalah sebagai alat

bantu pengambil keputusan. Dalam artikel ini diberikan contoh proses pembuatan program

fuzzy logic dalam bahasa pemrograman Java yang diaplikasikan untuk menentukan Jumlah

Produk yang dihasilkan berdasarkan kondisi Suhu, Kebisingan dan Pencahayaan. Implementasi

bahasa pemrograman Java untuk pembentukan fungsi keanggotaan, proses penalaran fuzzy

metode Sugeno, proses fuzzifikasi dan defuzzifikasi akan dibahas. Program diuji terhadap suatu

kondisi Suhu, Kebisingan dan Pencahayaan tertentu untuk mengetahui hasilnya.

Pendahuluan

Fuzzy Logic diperkenalkan oleh Prof. Lotfi Zadeh pada tahun 1965. Merupakan metode yang

mempunyai kemampuan untuk memproses variabel yang bersifat kabur atau yang tidak dapat

dideskripsikan secara eksak/pasti seperti misalnya tinggi, lambat, bising, dll. Dalam fuzzy logic

variabel yang bersifat kabur tersebut direpresentasikan sebagai sebuah himpunan yang

anggotanya adalah suatu nilai crisp dan derajat keanggotaannya (membership function) dalam

himpunan tersebut. Proses-proses dalam fuzzy logic adalah fuzzifikasi, penalaran (reasoning),

dan defuzzifikasi:

– Fuzzifikasi: merupakan proses untuk mendapatkan derajat keanggotaan dari sebuah nilai

numerik masukan (crisp)

– Penalaran: proses untuk mendapatkan aksi keluaran dari suatu kondisi input dengan

mengikuti aturan-aturan (IF-THEN Rules) yang telah ditetapkan yang disebut sebagai

inference/reasoning.

– Defuzzifikasi: proses untuk merubah hasil penalaran yang berupa derajat keanggotaan

keluaran menjadi variabel numerik kembali.

Blok diagram proses fuzzy logic ditunjukkan pada Gambar 1.

Lisensi Dokumen: Copyright © 2003-2006 IlmuKomputer.Com

Seluruh dokumen di IlmuKomputer.Com dapat digunakan, dimodifikasi dan

disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat

tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang

disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang,

kecuali mendapatkan ijin terlebih dahulu dari IlmuKomputer.Com.

Page 2: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 2

Gambar 1. Blok diagram proses dalam fuzzy logic

Implementasi Pemrograman Fuzzy Logic

Salah satu aplikasi fuzzy logic adalah sebagai alat bantu dalam pengambil keputusan. Berikut

adalah contoh permasalahan diambil dari buku terbitan Graha Ilmu yang berjudul “Aplikasi

Logika Fuzzy untuk Pendukung Keputusan” karangan Sri Kusumadewi & Hari Purnomo: “Suatu

penelitian dilakukan untuk mencari jumlah produksi berdasarkan pengaruh faktor suhu,

kebisingan dan pencahayaan. Dalam penelitian ini ada 30 pekerja yang masing-masing

melakukan 27 kali percobaan dengan kombinasi suhu (oC), kebisingan (dB) dan pencahayaan

(lux) yang berbeda untuk menghasilkan sejumlah produk. Banyaknya data yang diperoleh

sejumlah 30x27 data = 810 data. Dari ketigapuluh data untuk setiap kombinasi diambil nilai

rata-ratanya, sehingga data yang akan diolah tinggal 27 data seperti pada tabel 1.” Fuzzy logic

dipergunakan untuk menentukan rata-rata jumlah produk yang dihasilkan untuk kondisi Suhu,

Kebisingan dan Pencahayaan tertentu. Tabel rata-rata jumlah produk dan standar deviasi

ditunjukkan pada Tabel 1.

Page 3: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 3

Tabel 1. Rata-rata jumlah produk dan standar deviasi

Untuk menyimpan data rata-rata produk, dibuat class yang bernama Produk yang propertinya

adalah sebuah array yang bernama rata_rata_produk dan constructor untuk mengisi array

dengan data.

Page 4: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 4

Listing program 1. Implementasi class Produk

class Produk{

double [] rata_rata_product;

Produk(){

rata_rata_product = new double[27];

rata_rata_product[0] = 148.00;

rata_rata_product[1] = 150.90;

rata_rata_product[2] = 146.50;

rata_rata_product[3] = 143.10;

rata_rata_product[4] = 146.53;

rata_rata_product[5] = 142.73;

rata_rata_product[6] = 136.73;

rata_rata_product[7] = 140.77;

rata_rata_product[8] = 135.97;

rata_rata_product[9] = 149.73;

rata_rata_product[10] = 153.27;

rata_rata_product[11] = 152.13;

rata_rata_product[12] = 148.00;

rata_rata_product[13] = 150.63;

rata_rata_product[14] = 147.63;

rata_rata_product[15] = 141.47;

rata_rata_product[16] = 145.67;

rata_rata_product[17] = 140.20;

rata_rata_product[18] = 142.10;

rata_rata_product[19] = 146.53;

rata_rata_product[20] = 142.17;

rata_rata_product[21] = 138.70;

rata_rata_product[22] = 141.40;

rata_rata_product[23] = 138.30;

rata_rata_product[24] = 133.33;

rata_rata_product[25] = 138.53;

rata_rata_product[26] = 133.77;

}

}

Page 5: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 5

Seperti yang telah dijelaskan sebelumnya bahwa ada 3 variabel yang berpengaruh yaitu Suhu,

Kebisingan dan Pencahayaan. Fungsi keanggotaan yang digunakan adalah segitiga. Yang

pertama adalah variabel Suhu yang fungsi keanggotaannya ditunjukkan pada Gambar 2 dan

implementasi programnya adalah class Suhu yang ditunjukkan pada Listing program 2. Ada 3

kondisi Suhu yaitu Rendah, Normal, dan Tinggi.

μ[SUHU]

[SUHU (oC)]

Gambar 2. Fungsi keanggotaan variabel Suhu

Fungsi keangootaan variabel Suhu adalah sebagai berikut:

𝜇𝑅𝐸𝑁𝐷𝐴𝐻[data_suhu] =

0,data_suhu ≤ 18ataudata_suhu ≥ 26

(data_suhu − 18) 4,⁄ 18 ≤ data_suhu ≤ 22

(26 − data_suhu) 4,⁄ 22 ≤ data_suhu ≤ 26

𝜇𝑁𝑂𝑅𝑀𝐴𝐿[data_suhu] =

0,data_suhu ≤ 22ataudata_suhu ≥ 32

(data_suhu − 22) 4,⁄ 22 ≤ data_suhu ≤ 26

(32 − data_suhu) 6,⁄ 26 ≤ data_suhu ≤ 32

𝜇𝑇𝐼𝑁𝐺𝐺𝐼[data_suhu] =

0,data_suhu ≤ 26ataudata_suhu ≥ 38

(data_suhu − 26) 6,⁄ 26 ≤ data_suhu ≤ 32

(38 − data_suhu) 6,⁄ 32 ≤ data_suhu ≤ 38

l

Page 6: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 6

Listing program 2. Implementasi class Suhu

Fungsi keanggotaan Kebisingan dan implementasi programnya di class Kebisingan

ditunjukkan pada Gambar 3 dan Listing program 3.

class Suhu{

public double data_suhu;

private double rendah(){

if((data_suhu>=18)&&(data_suhu<=22)){

return (data_suhu - 18.0) / 4.0;

}

else if((data_suhu>=22)&&(data_suhu<=26)){

return (26.0 - data_suhu) / 4.0;

}

else{

return 0;

}

}

private double normal(){

if((data_suhu>=22)&&(data_suhu<=26)){

return (data_suhu - 22.0) / 4.0;

}

else if((data_suhu>=26)&&(data_suhu<=32)){

return (32.0 - data_suhu) / 6.0;

}

else{

return 0;

}

}

private double tinggi(){

if((data_suhu>=26)&&(data_suhu<=32)){

return (data_suhu - 26.0) / 6.0;

}

else if((data_suhu>=32)&&(data_suhu<=38)){

return (38.0 - data_suhu) / 6.0;

}

else{

return 0;

}

}

}

Page 7: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 7

μ[KEBISINGAN]

[KEBISINGAN (dB)]

Gambar 3. Fungsi keanggotaan variabel Kebisingan

Persamaan fungsi keanggotaan dari gambar diatas adalah sebagai berikut:

𝜇𝑇𝐸𝑁𝐴𝑁𝐺[data_kebisingan] =

0,data_kebisingan ≤ 35ataudata_kebisingan ≥ 75

(data_kebisingan − 35) 20,⁄ 35 ≤ data_kebisingan ≤ 55

(75 − data_kebisingan) 20,⁄ 55 ≤ data_kebisingan ≤ 75

𝜇𝐴𝐺𝐴𝐾𝐵𝐼𝑆𝐼𝑁𝐺[data_kebisingan] =

0,data_kebisingan ≤ 55ataudata_kebisingan ≥ 90

(data_kebisingan − 55) 20,⁄ 55 ≤ data_kebisingan ≤ 75

(90 − data_kebisingan) 15,⁄ 75 ≤ data_kebisingan ≤ 90

𝜇𝐵𝐼𝑆𝐼𝑁𝐺[data_kebisingan] =

0,data_kebisingan ≤ 75𝑎𝑡𝑎𝑢data_kebisingan ≥ 105

(data_kebisingan − 75) 15,⁄ 75 ≤ data_kebisingan ≤ 90

(105 − data_kebisingan) 15,⁄ 90 ≤ data_kebisingan ≤ 105

Page 8: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 8

Listing program 3. Implementasi class Kebisingan

Fungsi keanggotaan Pencahayaan dan implementasi programnya di class Pencahayaan

class Kebisingan{

public double data_kebisingan;

private double tenang(){

if((data_kebisingan>=35)&&(data_kebisingan<=55)){

return (data_kebisingan - 35.0) / 20.0;

}

else if((data_kebisingan>=55)&&(data_kebisingan<=75)){

return (75.0 - data_kebisingan) / 20.0;

}

else{

return 0;

}

}

private double agakbising(){

if((data_kebisingan>=55)&&(data_kebisingan<=75)){

return (data_kebisingan - 55.0) / 20.0;

}

else if((data_kebisingan>=75)&&(data_kebisingan<=90)){

return (90.0 - data_kebisingan) / 15.0;

}

else{

return 0;

}

}

private double bising(){

if((data_kebisingan>=75)&&(data_kebisingan<=90)){

return (data_kebisingan - 75.0) / 15.0;

}

else if((data_kebisingan>=90)&&(data_kebisingan<=105)){

return (105.0 - data_kebisingan) / 15.0;

}

else{

return 0;

}

}

}

Page 9: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 9

ditunjukkan pada Gambar 4 dan Listing program 4.

μ[PENCAHAYAAN]

[PENCAHAYAAN (lux)]

Gambar 4. Fungsi keanggotaan variabel Pencahayaan

Persamaan fungsi keanggotaan dari gambar diatas adalah sebagai berikut:

𝜇𝑅𝐸𝐷𝑈𝑃[data_pencahayaan]

=

0,data_pencahayaan ≤ 0ataudata_pencahayaan ≥ 300

data_pencahayaan 150,⁄ 0 ≤ data_pencahayaan ≤ 150

(300 − data_pencahayaan) 150,⁄ 150 ≤ data_pencahayaan ≤ 300

𝜇𝐴𝐺𝐴𝐾𝑇𝐸𝑅𝐴𝑁𝐺[data_pncahayaan]

=

0,data_pencahayaan ≤ 150ataudata_pencahayaan ≥ 500

(data_pencahayaan − 150) 150,⁄ 150 ≤ data_pencahayaan ≤ 300

(500 − data_pencahayaan) 200,⁄ 300 ≤ data_pencahayaan ≤ 500

𝜇𝑇𝐸𝑅𝐴𝑁𝐺[data_pencahayaan]

=

0,data_pencahayaan ≤ 300ataudata_pencahayaan ≥ 700

(data_pencahayaan − 300) 200,⁄ 300 ≤ data_pencahayaan ≤ 500

(700 − data_pencahayaan) 200,⁄ 500 ≤ data_pencahayaan ≤ 700

Page 10: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 10

Listing program 4. Implementasi class Pencahayaan

Untuk menghitung derajat keanggotaan dari suatu nilai crisp Suhu, Kebisingan dan

class Pencahayaan{

public double data_pencahayaan;

private double redup(){

if((data_pencahayaan>=0)&&(data_pencahayaan<=150)){

return (data_pencahayaan / 15.0);

}

else if((data_pencahayaan>=150)&&(data_pencahayaan<=300)){

return (300.0 - data_pencahayaan) / 150.0;

}

else{

return 0;

}

}

private double agakterang(){

if((data_pencahayaan>=150)&&(data_pencahayaan<=300)){

return ((data_pencahayaan - 150.0) / 150.0);

}

else if((data_pencahayaan>=300)&&(data_pencahayaan<=500)){

return (500.0 - data_pencahayaan) / 200.0;

}

else{

return 0;

}

}

private double terang(){

if((data_pencahayaan>=300)&&(data_pencahayaan<=500)){

return ((data_pencahayaan - 300.0) / 200.0);

}

else if((data_pencahayaan>=500)&&(data_pencahayaan<=700)){

return (700.0 - data_pencahayaan) / 200.0;

}

else{

return 0;

}

}

}

Page 11: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 11

Pencahayaan yang disimpan dalam variabel yang bernama kondisi_suhu,

kondisi_kebisingan, kondisi_pencahayaan dibuatlah fungsi untuk memanggil kelas

Suhu, Kebisingan dan Pencahayaan dan memanggil prosedur untuk menghitung derajat

keanggotaan dalam kelas tersebut, yang diimplemetasikan dalam program sebagai prosedur

Compute_membership() yang ditunjukkan pada Listing program 5.

Listing program 5. Implementasi fungsi untuk menghitung nilai derajat keanggotaan

dari suatu nilai crisp

Model fuzzy yang digunakan dalam bahasan ini adalah metode Sugeno, oleh karena itu output

sistem adalah berupa konstanta yaitu Rata-rata jumlah produk. Ada 27 aturan yang telah dibuat

yang diimplementasikan dalam program sebagai prosedur Apply_rule() dan listing

programnya ditunjukkan pada Listing program 6.

Aturan:

[1] IF Suhu RENDAH and Kebisingan TENANG and Pencahayaan REDUP THEN Rata-rata

Jumlah Produk = 148.0

[2] IF Suhu RENDAH and Kebisingan TENANG and Pencahayaan AGAK TERANG THEN

Rata-rata Jumlah Produk = 150.9

[3] IF Suhu RENDAH and Kebisingan TENANG and Pencahayaan TERANG THEN Rata-rata

private void Compute_Membership(){

suhu = new Suhu();

kebisingan = new Kebisingan();

pencahayaan = new Pencahayaan();

suhu.data_suhu = kondisi_suhu;

u_suhu_rendah = suhu.rendah();

u_suhu_normal = suhu.normal();

u_suhu_tinggi = suhu.tinggi();

kebisingan.data_kebisingan = kondisi_kebisingan;

u_kebisingan_tenang = kebisingan.tenang();

u_kebisingan_agakbising = kebisingan.agakbising();

u_kebisingan_bising = kebisingan.bising();

pencahayaan.data_pencahayaan = kondisi_pencahayaan;

u_pencahayaan_redup = pencahayaan.redup();

u_pencahayaan_agakterang = pencahayaan.agakterang();

u_pencahayaan_terang = pencahayaan.terang();

}

Page 12: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 12

Jumlah Produk = 146.5

[4] IF Suhu RENDAH and Kebisingan AGAK BISING and Pencahayaan REDUP THEN Rata-

rata Jumlah Produk = 143.1

[5] IF Suhu RENDAH and Kebisingan AGAK BISING and Pencahayaan AGAK TERANG

THEN Rata-rata Jumlah Produk = 146.53

[6] IF Suhu RENDAH and Kebisingan AGAK BISING and Pencahayaan TERANG THEN

Rata-rata Jumlah Produk = 142.73

[7] IF Suhu RENDAH and Kebisingan BISING and Pencahayaan REDUP THEN Rata-rata

Jumlah Produk = 136.73

[8] IF Suhu RENDAH and Kebisingan BISING and Pencahayaan AGAK TERANG THEN

Rata-rata Jumlah Produk = 140.77

[9] IF Suhu RENDAH and Kebisingan BISING and Pencahayaan TERANG THEN Rata-rata

Jumlah Produk = 135.97

[10] IF Suhu NORMAL and Kebisingan TENANG and Pencahayaan REDUP THEN Rata-rata

Jumlah Produk = 149.73

[11] IF Suhu NORMAL and Kebisingan TENANG and Pencahayaan AGAK TERANG THEN

Rata-rata Jumlah Produk = 153.27

[12] IF Suhu NORMAL and Kebisingan TENANG and Pencahayaan TERANG THEN Rata-

rata Jumlah Produk = 152.13

[13] IF Suhu NORMAL and Kebisingan AGAK BISING and Pencahayaan REDUP THEN

Rata-rata Jumlah Produk = 148

[14] IF Suhu NORMAL and Kebisingan AGAK BISING and Pencahayaan AGAK TERANG

THEN Rata-rata Jumlah Produk = 150.63

[15] IF Suhu NORMAL and Kebisingan AGAK BISING and Pencahayaan TERANG THEN

Rata-rata Jumlah Produk = 147.63

[16] IF Suhu NORMAL and Kebisingan BISING and Pencahayaan REDUP THEN Rata-rata

Jumlah Produk = 141.47

[17] IF Suhu NORMAL and Kebisingan BISING and Pencahayaan AGAK TERANG THEN

Rata-rata Jumlah Produk = 145.67

[18] IF Suhu NORMAL and Kebisingan BISING and Pencahayaan AGAK TERANG THEN

Rata-rata Jumlah Produk = 140.2

[19] IF Suhu TINGGI and Kebisingan TENANG and Pencahayaan REDUP THEN Rata-rata

Jumlah Produk = 142.10

[20] IF Suhu TINGGI and Kebisingan TENANG and Pencahayaan AGAK TERANG THEN

Rata-rata Jumlah Produk = 146.53

Page 13: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 13

[21] IF Suhu TINGGI and Kebisingan TENANG and Pencahayaan TERANG THEN Rata-rata

Jumlah Produk = 142.17

[22] IF Suhu TINGGI and Kebisingan AGAK BISING and Pencahayaan REDUP THEN Rata-

rata Jumlah Produk = 138.7

[23] IF Suhu TINGGI and Kebisingan AGAK BISING and Pencahayaan AGAK TERANG

THEN Rata-rata Jumlah Produk = 141.4

[24] IF Suhu TINGGI and Kebisingan AGAK BISING and Pencahayaan TERANG THEN

Rata-rata Jumlah Produk = 138.3

[25] IF Suhu TINGGI and Kebisingan BISING and Pencahayaan REDUP THEN Rata-rata

Jumlah Produk = 133.33

[26] IF Suhu TINGGI and Kebisingan BISING and Pencahayaan AGAK TERANG THEN

Rata-rata Jumlah Produk = 138.33

[27] IF Suhu TINGGI and Kebisingan BISING and Pencahayaan TERANG THEN Rata-rata

Jumlah Produk = 133.77

Page 14: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 14

private void Apply_Rule(){

output_rule = new double[27];

u_output = new double[27];

produk = new Produk();

//IF Suhu RENDAH and Kebisingan TENANG and Pencahayaan REDUP THEN Rata-rata product = 148.00;

output_rule[0] = Find_Min(u_suhu_rendah, u_kebisingan_tenang, u_pencahayaan_redup);

u_output[0] = produk.rata_rata_product[0];

//IF Suhu RENDAH and Kebisingan TENANG and Pencahayaan AGAKTERANG THEN Rata-rata product = 150.90;

output_rule[1]=Find_Min(u_suhu_rendah,u_kebisingan_tenang,u_pencahayaan_agakterang);

u_output[1] = produk.rata_rata_product[1];

//IF Suhu RENDAH and Kebisingan TENANG and Pencahayaan TERANG THEN Rata-rata product = 146.50;

output_rule[2] = Find_Min(u_suhu_rendah, u_kebisingan_tenang, u_pencahayaan_terang);

u_output[2] = produk.rata_rata_product[2];

//IF Suhu RENDAH and Kebisingan AGAKBISING and Pencahayaan REDUP THEN Rata-rata product = 143.10;

output_rule[3]=Find_Min(u_suhu_rendah, u_kebisingan_agakbising, u_pencahayaan_redup);

u_output[3] = produk.rata_rata_product[3];

//IF Suhu RENDAH and Kebisingan AGAKBISING and Pencahayaan AGAKTERANG THEN Rata-rata product = 146.53;

output_rule[4]=Find_Min(u_suhu_rendah,u_kebisingan_agakbising,u_pencahayaan_agakterang);

u_output[4] = produk.rata_rata_product[4];

//IF Suhu RENDAH and Kebisingan AGAKBISING and Pencahayaan TERANG THEN Rata-rata product = 142.73;

output_rule[5] = Find_Min(u_suhu_rendah, u_kebisingan_agakbising, u_pencahayaan_terang);

u_output[5] = produk.rata_rata_product[5];

//IF Suhu RENDAH and Kebisingan BISING and Pencahayaan REDUP THEN Rata-rata product = 136.73;

output_rule[6] = Find_Min(u_suhu_rendah, u_kebisingan_bising, u_pencahayaan_redup);

u_output[6] = produk.rata_rata_product[6];

//IF Suhu RENDAH and Kebisingan BISING and Pencahayaan AGAKTERANG THEN Rata-rata product = 140.77;

output_rule[7] = Find_Min(u_suhu_rendah, u_kebisingan_bising, u_pencahayaan_agakterang);

u_output[7] = produk.rata_rata_product[7];

//IF Suhu RENDAH and Kebisingan BISING and Pencahayaan TERANG THEN Rata-rata product = 135.97;

output_rule[8] = Find_Min(u_suhu_rendah, u_kebisingan_bising, u_pencahayaan_terang);

u_output[8] = produk.rata_rata_product[8];

Page 15: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 15

//IF Suhu NORMAL and Kebisingan TENANG and Pencahayaan REDUP THEN Rata-rata product = 149.73;

output_rule[9] = Find_Min(u_suhu_normal, u_kebisingan_tenang, u_pencahayaan_redup);

u_output[9] = produk.rata_rata_product[9];

//IF Suhu NORMAL and Kebisingan TENANG and Pencahayaan AGAKTERANG THEN Rata-rata product = 153.27;

output_rule[10]=Find_Min(u_suhu_normal, u_kebisingan_tenang,u_pencahayaan_agakterang);

u_output[10] = produk.rata_rata_product[10];

//IF Suhu NORMAL and Kebisingan TENANG and Pencahayaan TERANG THEN Rata-rata product = 152.13;

output_rule[11] = Find_Min(u_suhu_normal, u_kebisingan_tenang, u_pencahayaan_terang);

u_output[11] = produk.rata_rata_product[11];

//IF Suhu NORMAL and Kebisingan AGAKBISING and Pencahayaan REDUP THEN Rata-rata product = 148.00;

output_rule[12]=Find_Min(u_suhu_normal, u_kebisingan_agakbising, u_pencahayaan_redup);

u_output[12] = produk.rata_rata_product[12];

//IF Suhu NORMAL and Kebisingan AGAKBISING and Pencahayaan AGAKTERANG THEN Rata-rata product = 150.63;

output_rule[13] = Find_Min(u_suhu_normal, u_kebisingan_agakbising,

u_pencahayaan_agakterang);

u_output[13] = produk.rata_rata_product[13];

//IF Suhu NORMAL and Kebisingan AGAKBISING and Pencahayaan TERANG THEN Rata-rata product = 147.63;

output_rule[14]=Find_Min(u_suhu_normal,u_kebisingan_agakbising, u_pencahayaan_terang);

u_output[14] = produk.rata_rata_product[14];

//IF Suhu NORMAL and Kebisingan BISING and Pencahayaan REDUP THEN Rata-rata product = 141.47;

output_rule[15] = Find_Min(u_suhu_normal, u_kebisingan_bising, u_pencahayaan_redup);

u_output[15] = produk.rata_rata_product[15];

//IF Suhu NORMAL and Kebisingan BISING and Pencahayaan AGAKTERANG THEN Rata-rata product = 145.67;

output_rule[16]=Find_Min(u_suhu_normal,u_kebisingan_bising, u_pencahayaan_agakterang);

u_output[16] = produk.rata_rata_product[16];

//IF Suhu NORMAL and Kebisingan BISING and Pencahayaan TERANG THEN Rata-rata product = 140.20;

output_rule[17] = Find_Min(u_suhu_normal, u_kebisingan_bising, u_pencahayaan_terang);

u_output[17] = produk.rata_rata_product[17];

//IF Suhu TINGGI and Kebisingan TENANG and Pencahayaan REDUP THEN Rata-rata product = 142.10;

output_rule[18] = Find_Min(u_suhu_tinggi, u_kebisingan_tenang, u_pencahayaan_redup);

u_output[18] = produk.rata_rata_product[18];

Page 16: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 16

Listing kode 6. Implementasi penalaran fuzzy

Implementasi aturan AND dalam program adalah dengan mendapatkan nilai minimum dari

derajat keanggotaan Suhu, Kebisingan dan Pencahayaan. Untuk itu dibuatlah prosedur

Find_Min() yang fungsinya untuk mendapatkan nilai minimum dalam suatu array seperti

ditunjukkan pada Listing program 7.

//IF Suhu TINGGI and Kebisingan TENANG and Pencahayaan AGAKTERANG THEN Rata-rata product = 146.53;

output_rule[19]=Find_Min(u_suhu_tinggi, u_kebisingan_tenang, u_pencahayaan_agakterang);

u_output[19] = produk.rata_rata_product[19];

//IF Suhu TINGGI and Kebisingan TENANG and Pencahayaan TERANG THEN Rata-rata product = 142.17;

output_rule[20] = Find_Min(u_suhu_tinggi, u_kebisingan_tenang, u_pencahayaan_terang);

u_output[20] = produk.rata_rata_product[20];

//IF Suhu TINGGI and Kebisingan AGAKBISING and Pencahayaan REDUP THEN Rata-rata product = 138.70;

output_rule[21]= Find_Min(u_suhu_tinggi, u_kebisingan_agakbising, u_pencahayaan_redup);

u_output[21] = produk.rata_rata_product[21];

//IF Suhu TINGGI and Kebisingan AGAKBISING and Pencahayaan AGAKTERANG THEN Rata-rata product = 141.40;

output_rule[22] = Find_Min(u_suhu_tinggi, u_kebisingan_agakbising,

u_pencahayaan_agakterang);

u_output[22] = produk.rata_rata_product[22];

//IF Suhu TINGGI and Kebisingan AGAKBISING and Pencahayaan TERANG THEN Rata-rata product = 138.30;

output_rule[23]=Find_Min(u_suhu_tinggi, u_kebisingan_agakbising, u_pencahayaan_terang);

u_output[23] = produk.rata_rata_product[23];

//IF Suhu TINGGI and Kebisingan BISING and Pencahayaan REDUP THEN Rata-rata product = 133.33;

output_rule[24] = Find_Min(u_suhu_tinggi, u_kebisingan_bising, u_pencahayaan_redup);

u_output[24] = produk.rata_rata_product[24];

//IF Suhu TINGGI and Kebisingan BISING and Pencahayaan AGAKTERANG THEN Rata-rata product = 138.33;

output_rule[25]=Find_Min(u_suhu_tinggi, u_kebisingan_bising, u_pencahayaan_agakterang);

u_output[25] = produk.rata_rata_product[25];

/IF Suhu TINGGI and Kebisingan BISING and Pencahayaan TERANG THEN Rata-rata product = 133.77;

output_rule[26] = Find_Min(u_suhu_tinggi, u_kebisingan_bising, u_pencahayaan_terang);

u_output[26] = produk.rata_rata_product[26];

Page 17: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 17

Listing program 7. Implementasi prosedur Find_Min()

Untuk mendapatkan nilai keluaran atau keputusan dari fuzzy digunakan metode weighted

average yang persamaannya adalah sebagai berikut:

𝑜𝑢𝑡𝑝𝑢𝑡 =∑ (𝑜𝑢𝑡𝑝𝑢𝑡𝑑𝑎𝑟𝑖𝑎𝑡𝑢𝑟𝑎𝑛𝑘𝑒 − 𝑖 ∗ 𝑟𝑎𝑡𝑎 − 𝑟𝑎𝑡𝑎𝑗𝑢𝑚𝑙𝑎ℎ𝑝𝑟𝑜𝑑𝑢𝑘𝑘𝑒 − 𝑖)𝑛−1𝑖=0

∑ (𝑟𝑎𝑡𝑎 − 𝑟𝑎𝑡𝑎𝑗𝑢𝑚𝑙𝑎ℎ𝑝𝑟𝑜𝑑𝑢𝑘𝑘𝑒 − 𝑖)𝑛−1𝑖=0

Dimana nilai n adalah sama dengan jumlah aturan yaitu 27. Persamaan tersebut diatas dalam

program diimplementasikan dalam prosedur Compute_Output() yang ditunjukkan pada Listing

program 8.

Listing program 8. Implementasi prosedur Compute_Output()

Selanjutnya dibuat prosedur Run_Fuzzy() untuk memanggil prosedur-prosedur fuzzy yang telah

dibuat sebelumnya sesuai dengan langkah-langkah dalam fuzzy logic seperti yang telah

ditunjukkan pada Gambar 1, yang implementasi programnya ditunjukkan pada Listing program

9.

private double Find_Min(double a, double b, double c){

double result;

List<Double> list = new ArrayList<Double>(3);

list.add(a);

list.add(b);

list.add(c);

result = Collections.min(list);

return result;

}

private void Compute_Output(){

double z = 0;

double temp1 = 0;

double temp2 = 0;

for(int i=0;i<27;i++){

temp1 += output_rule[i] * u_output[i];

temp2 += output_rule[i];

}

z = temp1 / temp2;

System.out.println("Fuzzy Out:" + z);

}

Page 18: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 18

Listing program 9. Implementasi prosedur Run_Fuzzy()

Untuk mengetahui hasil program fuzzy yang telah dibuat maka diuji dengan suatu nilai crisp

tertentu. Sebagai contoh dalam kasus ini kondisi suhu = 25 oC, kebisingan = 86 dB dan tingkat

pencahayaan = 350 lux, maka akan didapatkan hasil output program fuzzy adalah jumlah

produk sama dengan 148. Prosedur untuk memasukkan nilai crisp dan memanggil program

fuzzy ditunjukkan pada Listing 10.

Listing 10. Contoh penerapan program fuzzy dengan suatu nilai crisp

Kesimpulan

Program fuzzy yang telah diimplementasikan dalam bahasa pemrograman Java dapat digunakan

sebagai alat bantu untuk menentukan jumlah produk yang dihasilkan berdasarkan kondisi Suhu,

Kebisingan dan Pencahayaan tertentu.

Referensi

[1] Son Kuswadi, “Kendali Cerdas, Teori dan Aplikasi Praktisnya”, Andi Offset, 2007

[2] Sri Kusumadewi, Sri Hartati, “Neuro-Fuzzy: Integrasi Sistem Fuzzy dan Jaringan Syaraf”,

Graha Ilmu, 2006.

Ucapan Terima Kasih Terima kasih kepada rekan-rekan milis SC-INA (http://soft-computing.org) atas review-nya.

Semoga bisa memberikan kontribusi dalam pengembangan AI di Indonesia.

public void RunFuzzy(){

Compute_Membership();

Apply_Rule();

Compute_Output();

}

public static void main(String[] args){

ProjectFuzzy projectfuzzy = new ProjectFuzzy();

projectfuzzy.kondisi_suhu = 22;

System.out.println("Suhu:" + projectfuzzy.kondisi_suhu);

projectfuzzy.kondisi_kebisingan = 55;

System.out.println("Kebisingan:" + projectfuzzy.kondisi_kebisingan);

projectfuzzy.kondisi_pencahayaan = 150;

System.out.println("Pencahayaan:" + projectfuzzy.kondisi_pencahayaan);

projectfuzzy.RunFuzzy();

}

Page 19: 48397005 Denny Pemrogramanfuzzy (1)

Komunitas eLearning IlmuKomputer.Com

Copyright © 2003-2007 IlmuKomputer.Com 19

Biografi Penulis

Tempat Lahir: Kediri

Pendidikan : S1 - Teknik Elektro ITS (2004), D3 – PENS-ITS (2002),

SMAN 2 Kediri, SMPN 1 Kediri

Afiliasi : Laboratorium Akustik & Getaran, Pusat Penelitian Kalibrasi,

Instrumentasi, Metrologi (KIM-LIPI)

Kontak : [email protected]