Sekarang saya akan menggunakan soal yang berada di link berikut -> http://www.academia.edu/6628711/LOGIKA_FUZZY.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Variabel;
/**
*
* @author Ardhipc
*/
public class Permintaan {
//buat variabel permintaan yang nantinya menjadi nilai masukan
private static double permintaan;
//baut variabel titik-titik range pada model fuzzy nya, agar mudah untuk mengganti nilai ketika ada perubahan
private static double titik1=0;
private static double titik2=1000;
private static double titik3=5000;
//buat method untuk mengakses nilai pada variabel permintaan
public static double getPermintaan() {
return permintaan;
}
//buat method untuk memberikan nilai pada variabel permintaan
public static void setPermintaan(double permintaan) {
Permintaan.permintaan = permintaan;
}
//method fungsi turun
public static double turun(){
if (permintaan>=titik1 && permintaan<=titik2) return 1;
else if (permintaan>titik2 && permintaan<titik3) return (titik3-permintaan)/(titik3-titik2);
else return 0;
}
//method fungsi naik
public static double naik(){
if (permintaan>titik2 && permintaan<titik3) return (permintaan-titik2)/(titik3-titik2);
else if (permintaan>=titik3) return 1;
else return 0;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Variabel;
/**
*
* @author Ardhipc
*/
public class Persediaan {
//buat variabel persediaan yang nantinya menjadi nilai masukan
private static double persediaan;
//baut variabel titik-titik range pada model fuzzy nya, agar mudah untuk mengganti nilai ketika ada perubahan
private static double titik1=0;
private static double titik2=100;
private static double titik3=600;
//buat method untuk mengakses nilai pada variabel persediaan
public static double getPersediaan() {
return persediaan;
}
//buat method untuk memberikan nilai pada variabel persediaan
public static void setPersediaan(double persediaan) {
Persediaan.persediaan = persediaan;
}
//method fungsi sedikit
public static double sedikit(){
if (persediaan>=titik1 && persediaan<=titik2) return 1;
else if (persediaan>titik2 && persediaan<titik3) return (titik3-persediaan)/(titik3-titik2);
else return 0;
}
//method fungsi banyak
public static double banyak(){
if (persediaan>titik2 && persediaan<titik3) return (persediaan-titik2)/(titik3-titik2);
else if (persediaan>=titik3) return 1;
else return 0;
}
}
PROJECT JAVA dapat d download disini
Sebuah perusahaan makanan kaleng akan
memproduksi makanan jenis ABC. Dari data 1 bulan terakhir,PERMINTAAN TERBESAR mencapai
5000 kemasan/hari, dan PERMINTAAN TERKECIL 1000 kemasan/hari. PERSEDIAANTERBANYAK digudang sampai 600
kemasan/hari, dan PERSEDIAAN TERKECIL mencapai 100 kemasan/hari. Dengansegala keterbatasan kemampuan
PRODUKSI TERBANYAK adalah 7000 kemasan/hari, dan agar efisien PRODUKSITERKECIL adalah 2000
kemasan/hari.
Dengan Rule :
R1 : JIKA permintaan TURUN dan persediaan BANYAK maka produksi BERKURANG
R2 : JIKA permintaan TURUN dan persediaan SEDIKIT maka produksi BERKURANG
R3 : JIKA permintaan NAIK dan persediaan BANYAK maka produksi BERTAMBAH
R4 : JIKA permintaan NAIK dan persediaan SEDIKIT maka produksi BERTAMBAH
dengan kasus yang akan kita uji nantinya salah satunya yaitu ketika ->
Berapa harus
diproduki jika PERMINTAAN 4000 kemasan dan PERSEDIAAN 300 kemasan.
Penyelesaian:
*) saya harap kalian sudah memahami bagaimana cara membuat model fuzzy dari kasus yang diberikan :)
yang harus kita lakukan pertama adalah membuat fungsi ke anggotaan bagi setiap variabel nya. Ada tiga variabel Fuzzy, yaitu 1) Permintaan 2)Penawaran 3)Produksi.
1. PERMINTAAN
Terdiri
dari 2 himpunan fuzzy, yaitu (1) TURUN, dan (2) NAIK
Diketahui :
Permintaan
terendah adalah 1000 kemasan/hari
Permintaan tertinggi adalah 5000
kemasan/hari
Permintaan permasalahan = 4000 kemasan
2. PERSEDIAAN
Terdiri
dari 2 himpunan fuzzy, yaitu (1) SEDIKIT, dan (2) BANYAK
Diketahui
:
Persediaan terendah adalah 100 kemasan/hari
Persediaan tertinggi adalah 600
kemasan/hari
Persediaan permasalahan = 300 kemasan
3. PRODUKSI
Terdiri
dari 2 himpunan fuzzy, yaitu (1) BERKURANG, dan (2) BERTAMBAH
Diketahui
:
Produksi terendah adalah 2000 kemasan/hari
Produksi tertinggi adalah 7000
kemasan/hari
Produksi permasalahan = ditanyakan ?? kemasan
setelah kita mendapatkan model fuzzy nya kita dengan mudah dapat membuat kode javanya.
A. Create Project (saya menggunakan Neatbeans Versi 7.3.1)
1. Buka Netbeans, dan buat project baru
File -> New Project -> Java -> Java Aplication
2. Next
3. beri nama project "persediaanBarang" (terserah anda mau beri nama apa saja pada projek anda)
4. finish
B. Buat package (hal ini dapat anda lakukan atau tidak, tetapi saya lakukan untuk mengelompokan class nya agar lebih mudah di maintanance)
1. klik kanan pada Source Packages
2. pilih New
3. pilih Java Package...
4. beri nama "variabel", dan klik finish.
C. Buat tiga class (Seluruh Variabel input dan output) pada pacckages variabel
1. klik kanan pada packages variabel -> new -> Java Class..
2. beri nama class dengan Permintaan, Penawaran, dan Produksi (huruf depan kapital aja ya)
D. membuat kode fungsi membersip pada setiap class (lihat model fuzzy pada setiap variabel yang telah kita buat)
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Variabel;
/**
*
* @author Ardhipc
*/
public class Permintaan {
//buat variabel permintaan yang nantinya menjadi nilai masukan
private static double permintaan;
//baut variabel titik-titik range pada model fuzzy nya, agar mudah untuk mengganti nilai ketika ada perubahan
private static double titik1=0;
private static double titik2=1000;
private static double titik3=5000;
//buat method untuk mengakses nilai pada variabel permintaan
public static double getPermintaan() {
return permintaan;
}
//buat method untuk memberikan nilai pada variabel permintaan
public static void setPermintaan(double permintaan) {
Permintaan.permintaan = permintaan;
}
//method fungsi turun
public static double turun(){
if (permintaan>=titik1 && permintaan<=titik2) return 1;
else if (permintaan>titik2 && permintaan<titik3) return (titik3-permintaan)/(titik3-titik2);
else return 0;
}
//method fungsi naik
public static double naik(){
if (permintaan>titik2 && permintaan<titik3) return (permintaan-titik2)/(titik3-titik2);
else if (permintaan>=titik3) return 1;
else return 0;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Variabel;
/**
*
* @author Ardhipc
*/
public class Persediaan {
//buat variabel persediaan yang nantinya menjadi nilai masukan
private static double persediaan;
//baut variabel titik-titik range pada model fuzzy nya, agar mudah untuk mengganti nilai ketika ada perubahan
private static double titik1=0;
private static double titik2=100;
private static double titik3=600;
//buat method untuk mengakses nilai pada variabel persediaan
public static double getPersediaan() {
return persediaan;
}
//buat method untuk memberikan nilai pada variabel persediaan
public static void setPersediaan(double persediaan) {
Persediaan.persediaan = persediaan;
}
//method fungsi sedikit
public static double sedikit(){
if (persediaan>=titik1 && persediaan<=titik2) return 1;
else if (persediaan>titik2 && persediaan<titik3) return (titik3-persediaan)/(titik3-titik2);
else return 0;
}
//method fungsi banyak
public static double banyak(){
if (persediaan>titik2 && persediaan<titik3) return (persediaan-titik2)/(titik3-titik2);
else if (persediaan>=titik3) return 1;
else return 0;
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package Variabel;
/**
*
* @author Ardhipc
*/
public class Produksi {
//buat variabel produksi yang nantinya menjadi nilai masukan
private static double produksi;
//baut variabel titik-titik range pada model fuzzy nya, agar mudah untuk mengganti nilai ketika ada perubahan
private static double titik1=0;
private static double titik2=2000;
private static double titik3=7000;
//buat method untuk mengakses nilai pada variabel produksi
public static double getProduksi() {
return produksi;
}
//buat method untuk memberikan nilai pada variabel produksi
public static void setProduksi(double produksi) {
Produksi.produksi = produksi;
}
//method fungsi berkurang
public static double berkurang(){
if (produksi>=titik1 && produksi<=titik2) return 1;
else if (produksi>titik2 && produksi<titik3) return (titik3-produksi)/(titik3-titik2);
else return 0;
}
//method fungsi bertambah
public static double bertambah(){
if (produksi>titik2 && produksi<titik3) return (produksi-titik2)/(titik3-titik2);
else if (produksi>=titik3) return 1;
else return 0;
}
public static double berkurang(double in){
return (titik3-(in*(titik3-titik2)));
}
public static double bertambah(double in){
return (titik2+(in*(titik3-titik2)));
}
}
E. Buat class untuk menampung rule dan menghitung rule
F. koding
1. buat variabel untuk menampung rule input, output kedalam array, dan buat variable untuk perhutungan fungsi tsukamoto nya
2. Buat rule nya
3. buat fungsi terboboti (tsukamoto) {fungsi ini yang dapat di ubah-ubah sesuai metode yang akan digunakan [mamdani, tsukamoto, sugeno]}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package persediaanbarang;
import Variabel.*;
/**
*
* @author Ardhipc
*/
public class Rule {
private static double [] u_Produksi = new double[6];
private static double [] z_Produksi = new double[6];
private static double bobot;
//rule
public static void hitung_u(){
u_Produksi[0]=Math.min(Permintaan.turun(), Persediaan.banyak());
u_Produksi[1]=Math.min(Permintaan.turun(), Persediaan.sedikit());
u_Produksi[2]=Math.min(Permintaan.naik(), Persediaan.banyak());
u_Produksi[3]=Math.min(Permintaan.naik(), Persediaan.sedikit());
}
public static void hitung_z(){
z_Produksi[0]=Produksi.berkurang(u_Produksi[0]);
z_Produksi[1]=Produksi.berkurang(u_Produksi[1]);
z_Produksi[2]=Produksi.bertambah(u_Produksi[2]);
z_Produksi[3]=Produksi.bertambah(u_Produksi[3]);
}
//end of rule
//cari nilai bobot (tsukamoto)
public static double bobot(){
double atas=0,bawah=0;
for(int i=0;i<6;i++){
System.out.println("z_ke-"+i+ " : " +z_Produksi[i]);
System.out.println("u_ke-"+i+ " : " +u_Produksi[i]);
atas+=(u_Produksi[i]*z_Produksi[i]);
bawah+=u_Produksi[i];
}
System.out.println(atas/bawah);
return (atas/bawah);
}
}
G. proses pembuatan interface menggunakan JFrame pada java
1. buat frame untuk interface pada packages project
2. beri nama MainFrame
3. buat layout seperti pada contoh dibawah ini
4. beri nama id pada textField1, textField2, lable hasil dengan cara
5. lakukan hal yang sama pada field yang lainnya dengan id
6. membuat interaksi ketika button Hitung di klik
a. klik dua kali pada button hitung
b. kita akan diarahkan ke code layout tersebut
c. ketikan kode berikut ini
// TODO add your handling code here:
//set variabel permintaan di Class Permintaan.java
Permintaan.setPermintaan(Double.parseDouble(fPermintaan.getText()));
//set variabel persediaan di Class Persediaan.java
Persediaan.setPersediaan(Double.parseDouble(fPersediaan.getText()));
//membuat objek untuk menampilkan hasil desimal
DecimalFormat df = new DecimalFormat("#########.###");
//jalankan fungsi hitung_u pada Class Rule.java
Rule.hitung_u();
//jalankan fungsi hitung_z pada Class Rule.java
Rule.hitung_z();
//Tampilkan hasil perhitungan pada label dengan id hasilNilai
hasilNilai.setText(df.format(Rule.bobot()));
7. Jangan lupa untuk meng-import class persediaan dan permintaan dibawah packages persediaanbarang
package persediaanbarang;
import Variabel.Permintaan;
import Variabel.Persediaan;
import java.text.DecimalFormat;
H. Menjalankan Program
1. Hilangkan file PersediaanBarang.java dari packages persediaanbarang, sehingga menjadi seperti ini
2. Klik kanan pada MainFrame.java
3. klik Run File
4. masukan nilai permintaan dengan 4000, dan nilai persediaan dengan 300, dan klik run
5. Didapatkan hasil dengan nilai tracingnya
~Selesai~
Halo mas, saya mau buat aplikasi perhitungan fuzzy mamdani dengan java. Apakah bisa membantu?
ReplyDeleteterimakasih sam
ReplyDeletekicchu bujhi nai bhai
ReplyDeleteCara agar dapat menambah variabel dan rule bagaimana gan
ReplyDelete