60% found this document useful (5 votes)
4K views

Contoh Program Fuzzy Logic Menggunakan Java

This document describes a fuzzy logic system for a decision support system with classes for temperature, noise level, and lighting conditions. It defines membership functions for each variable and 27 rules to determine appropriate average productivity levels based on the conditions.

Uploaded by

Denny Hermawanto
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
60% found this document useful (5 votes)
4K views

Contoh Program Fuzzy Logic Menggunakan Java

This document describes a fuzzy logic system for a decision support system with classes for temperature, noise level, and lighting conditions. It defines membership functions for each variable and 27 rules to determine appropriate average productivity levels based on the conditions.

Uploaded by

Denny Hermawanto
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

/*

Fuzzy Logic for decision support system


Programmed by: Denny Hermawanto
Address: KIM-LIPI
Mail: d_3_nny@yahoo.com
Copyright: 2008
*/

import java.util.*;

class ProjectFuzzy{
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;
}
}
}

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;
}
}
}

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;
}
}
}

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;
}
}

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();
}

private void Apply_Rule(){


output_rule = new double[27];
u_output = new double[27];
produk = new Produk();
//produk.initialize_data();

//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];

//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];

//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];

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];
}

//System.out.println("Temp1="+temp1);
//System.out.println("Temp2="+temp2);

z = temp1 / temp2;

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


}

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);
//Collections.sort(list);
result = Collections.min(list);
//System.out.println("Min:"+result);
return result;
}

public void RunFuzzy(){


Compute_Membership();
Apply_Rule();
Compute_Output();
}

public static void main(String[] args){


ProjectFuzzy myfuzzy = new ProjectFuzzy();

myfuzzy.kondisi_suhu = 22;
System.out.println("Suhu:" + myfuzzy.kondisi_suhu);
myfuzzy.kondisi_kebisingan = 55;
System.out.println("Kebisingan:" + myfuzzy.kondisi_kebisingan);
myfuzzy.kondisi_pencahayaan = 150;
System.out.println("Pencahayaan:" + myfuzzy.kondisi_pencahayaan);

myfuzzy.RunFuzzy();
}

//variabel
Suhu suhu;
Kebisingan kebisingan;
Pencahayaan pencahayaan;
Produk produk;

double kondisi_suhu;
double kondisi_kebisingan;
double kondisi_pencahayaan;

double u_suhu_rendah;
double u_suhu_normal;
double u_suhu_tinggi;

double u_kebisingan_tenang;
double u_kebisingan_agakbising;
double u_kebisingan_bising;

double u_pencahayaan_redup;
double u_pencahayaan_agakterang;
double u_pencahayaan_terang;

double[] u_output;
double[] output_rule;

You might also like