Anda di halaman 1dari 35

PENERAPAN METODE FUZZY TSUKAMOTO

PADA PENENTUAN KELAS SISWA DI SEKOLAH DASAR

LAPORAN
UNTUK MEMENUHI TUGAS MATAKULIAH
Artificial Intellegent
yang dibina oleh Dr. Eng. Anik Nur Handayani, S.T., M.T.

oleh:
Dyah Ayu Fladya Rizky 160551801139
Rahmat Irsyada 160551801216

UNIVERSITAS NEGERI MALANG


PASCASARJANA
PROGRAM STUDI PENDIDIKAN KEJURUAN
November 2017
ABSTRAK

Keyword--
BAB I
PENDAHULUAN

A. Latar Belakang
Perkembangan teknologi telah menyentuh berbagai bidang, salah
satunya adalah bidang pendidikan. Pada proses penentuan kelas sekarang ini,
banyak sekolah yang sudah menggunakan sistem online. Penggunaan sistem
online ini dapat menggunakan logika fuzzy. Logika Fuzzy adalah suatu cara
yang tepat untuk memetakan suatu ruang input ke dalam ruang output. Secara
umum, sistem fuzzy sangat cocok untuk penalaran pendekatan terutama untuk
sistem yang menangani masalah-masalah yang sulit didefinisikan dengan
menggunakan model matematis. Misalkan, nilai masukan dan parameter sebuah
sistem bersifat kurang akurat atau kurang jelas, sehingga sulit mendefinisikan
model matematika. Sistem fuzzy pertama kali diperkenalkan oleh Prof. L. A.
Zadeh dari Barkelay pada tahun 1965.
Dalam fuzzy logic ada beberapa metode untuk merepresentasikan hasil
logika fuzzy yaitu metode Tsukamoto, Sugeno dan Mamdani. Ketiga metode
tersebut digunakan pada permasalahan yang berbeda. Pada metode Tsukamoto,
setiap konsekuen direpresentasikan dengan himpunan fuzzy dengan fungsi
keanggotaan monoton. Output hasil inferensi masing-masing aturan adalah z,
berupa himpunan biasa (crisp) yang ditetapkan berdasarkan predikatnya. Hasil
akhir diperoleh dengan menggunakan rata-rata terbobotnya. Metode sugeno
mampu mengelompokkan data berdasarkan input yang telah dipilih dan
menerapkan aturan yang telah ditetapkan sehingga bisa menghasilkan output
pengelompokan data seperti yang diharapkan.
Sedangkan metode Mamdani adalah satu jenis inferensi fuzzy dimana
himpunan fuzzy yang merupakan konsekuensi dari setiap aturan di
kombinasikan dari setiap aturan fuzzy kemudian didefuzzifikasikan untuk
menghasilkan keluaran tertentu dari suatu sistem. Kelebihan dari metode
inferensi Mamdani ini, antara lain intuitif, dapat diterima lebih luas, dan cocok
untuk masukan berasal dari manusia. Karena kelebihan itulah program
penentuan kelas ini menggunakan metode Mamdani.
LB Tsukamoto
Perkembangan teknologi telah menyentuh berbagai bidang, salah
satunya adalah bidang pendidikan. Pada proses penentuan kelas sekarang ini,
banyak sekolah yang sudah menggunakan sistem online. Penggunaan sistem
online ini dapat menggunakan logika fuzzy. Logika Fuzzy adalah suatu cara
yang tepat untuk memetakan suatu ruang input ke dalam ruang output. Secara
umum, sistem fuzzy sangat cocok untuk penalaran pendekatan terutama untuk
sistem yang menangani masalah-masalah yang sulit didefinisikan dengan
menggunakan model matematis. Misalkan, nilai masukan dan parameter sebuah
sistem bersifat kurang akurat atau kurang jelas, sehingga sulit mendefinisikan
model matematika. Sistem fuzzy pertama kali diperkenalkan oleh Prof. L. A.
Zadeh dari Barkelay pada tahun 1965.
Dalam fuzzy logic ada beberapa metode untuk merepresentasikan hasil
logika fuzzy yaitu metode Tsukamoto, Sugeno dan Mamdani. Ketiga metode
tersebut digunakan pada permasalahan yang berbeda. Metode sugeno mampu
mengelompokkan data berdasarkan input yang telah dipilih dan menerapkan
aturan yang telah ditetapkan sehingga bisa menghasilkan output pengelompokan
data seperti yang diharapkan. Sedangkan metode Mamdani adalah satu jenis
inferensi fuzzy dimana himpunan fuzzy yang merupakan konsekuensi dari setiap
aturan di kombinasikan dari setiap aturan fuzzy kemudian didefuzzifikasikan
untuk menghasilkan keluaran tertentu dari suatu sistem.
Pada metode Tsukamoto, setiap konsekuen direpresentasikan dengan
himpunan fuzzy dengan fungsi keanggotaan monoton. Output hasil inferensi
masing-masing aturan adalah z, berupa himpunan biasa (crisp) yang ditetapkan
berdasarkan predikatnya. Hasil akhir diperoleh dengan menggunakan rata-rata
terbobotnya. Fuzzy Tsukamoto adalah metode yang memiliki toleransi pada data
dan sangat fleksibel. Kelebihan dari metode Tsukamoto yaitu bersifat intuitif dan
dapat memberikan tanggapan berdasarkan informasi yang bersifat kualitatif,
tidak akurat, dan ambigu. Karena kelebihan itulah program penentuan kelas ini
menggunakan metode Tsukamoto.
B. Rumusan Masalah
Rumusan masalah dari penulisan laporan ini adalah:
1. Apa yang dimaksud dengan logika fuzzy Mamdani ?
2. Bagaimana aplikasi metode fuzzy Mamdani pada program penentuan kelas?
3. Bagaimana algoritma program penentuan kelas menggunakan fuzzy
Mamdani?
4. Bagaimana perbandingan perhitungan manual, perhitungan menggunakan
software Matlab dan perhitungan dengan program penentuan kelas
menggunakan fuzzy Mamdani?

Rumusan masalah dari penulisan laporan ini adalah:


1. Apa yang dimaksud dengan logika fuzzy Tsukamoto?
2. Bagaimana aplikasi metode fuzzy Tsukamoto pada program penentuan
kelas?
3. Bagaimana algoritma program penentuan kelas menggunakan fuzzy
Tsukamoto?
4. Bagaimana perbandingan perhitungan manual, perhitungan menggunakan
software Matlab dan perhitungan dengan program penentuan kelas
menggunakan fuzzy Tsukamoto?
BAB II
DASAR TEORI
BAB III
METODELOGI
1. Perancangan
Himpunan Fuzzy
Variabel Linguistik
Umur Kurang <=6
Cukup >=4 - <=8
Lebih >=6
Baca Sangat Lamcar >=80
Lancar >=60 - <=100
Input Kurang Lancar >=40 - <=80
Tidak Bisa <=60
Tes Sangat Bagus >=80
Bagus >=60 - <=100
Cukup >=40 - <=80
Kurang <=60
Pengelompokkan Reguler >=50
Output
Kelas Khusus <=50

Membership Function
Input Umur

Input Baca
Input Tes

Output (kelas)

Inference Engine
 Rule 1-12 → Umur dengan Baca
Umur
Kurang Cukup Lebih
Baca
R [1] R [5] R [9]
Sangat Lancar
Reguler Reguler Reguler
R [2] R [6] R [10]
Lancar
Reguler Reguler Reguler
R [3] R [7] R [11]
Kurang Lancar
Khusus Khusus Reguler
R [4] R [8] R [12]
Tidak Bisa
Khusus Khusus Khusus

 Rule 13-24 → Umur dengan Nilai


Umur
Kurang Cukup Lebih
Nilai
R [13] R [17] R [21]
Sangat Bagus
Reguler Reguler Reguler
R [14] R [18] R [22]
Bagus
Reguler Reguler Reguler
R [15] R [19] R [23]
Cukup
Reguler Reguler Reguler
R [16] R [20] R [24]
Kurang
Khusus Khusus Khusus

 Rule 25-40 → Nilai dengan Baca


Nilai Sangat
Bagus Cukup Kurang
Baca Bagus
R [25] R [29] R [33] R [37]
Sangat Lancar
Reguler Reguler Reguler Reguler
R [26] R [30] R [34] R [38]
Lancar
Reguler Reguler Reguler Khusus
R [27] R [31] R [35] R [39]
Kurang Lancar
Reguler Khusus Khusus Khusus
R [28] R [32] R [36] R [40]
Tidak Bisa
Khusus Khusus Khusus Khusus

Rule
R[1] IF umur is kurang AND baca is sangat lancar THEN kelas reguler
R[2] IF umur is kurang AND baca is lancar THEN kelas reguler
R[3] IF umur is kurang AND baca is kurang lancar THEN kelas khusus
R[4] IF umur is kurang AND baca is tidak bisa THEN kelas khusus
R[5] IF umur is cukup AND baca is sangat lancar THEN kelas reguler
R[6] IF umur is cukup AND baca is lancar THEN kelas reguler
R[7] IF umur is cukup AND baca is kurang lancar THEN kelas khusus
R[8] IF umur is cukup AND baca is tidak bisa THEN kelas khusus
R[9] IF umur is lebih AND baca is sangat lancar THEN kelas reguler
R[10] IF umur is lebih AND baca is lancar THEN kelas reguler
R[11] IF umur is lebih AND baca is kurang lancar THEN kelas reguler
R[12] IF umur is lebih AND baca is tidak bisa THEN kelas khusus
R[13] IF umur is kurang AND nilai is sangat bagus THEN kelas reguler
R[14] IF umur is kurang AND nilai is bagus THEN kelas reguler
R[15] IF umur is kurang AND nilai is cukup THEN kelas reguler
R[16] IF umur is kurang AND nilai is kurang THEN kelas khusus
R[17] IF umur is cukup AND nilai is sangat bagus THEN kelas reguler
R[18] IF umur is cukup AND nilai is bagus THEN kelas reguler
R[19] IF umur is cukup AND nilai is cukup THEN kelas reguler
R[20] IF umur is cukup AND nilai is kurang THEN kelas khusus
R[21] IF umur is lebih AND nilai is sangat bagus THEN kelas reguler
R[22] IF umur is lebih AND nilai is bagus THEN kelas reguler
R[23] IF umur is lebih AND nilai is cukup THEN kelas reguler
R[24] IF umur is lebih AND nilai is kurang THEN kelas khusus
R[25] IF nilai is sangat bagus AND baca is sangat lancar THEN kelas reguler
R[26] IF nilai is sangat bagus AND baca is lancar THEN kelas reguler
R[27] IF nilai is sangat bagus AND baca is kurang lancar THEN kelas khusus
R[28] IF nilai is sangat bagus AND baca is tidak bisa THEN kelas khusus
R[29] IF nilai is bagus AND baca is sangat lancar THEN kelas reguler
R[30] IF nilai is bagus AND baca is lancar THEN kelas reguler
R[31] IF nilai is bagus AND baca is kurang lancar THEN kelas khusus
R[32] IF nilai is bagus AND baca is tidak bisa THEN kelas khusus
R[33] IF nilai is cukup AND baca is sangat lancar THEN kelas reguler
R[34] IF nilai is cukup AND baca is lancar THEN kelas reguler
R[35] IF nilai is cukup AND baca is kurang lancar THEN kelas khusus
R[36] IF nilai is cukup AND baca is tidak bisa THEN kelas khusus
R[37] IF nilai is kurang AND baca is sangat lancar THEN kelas reguler
R[38] IF nilai is kurang AND baca is lancar THEN kelas khusus
R[39] IF nilai is kurang AND baca is kurang lancar THEN kelas khusus
R[40] IF nilai is kurang AND baca is tidak bisa THEN kelas khusus

2. Algoritma
a. Mulai
b. Memasukkan input
 Umur
 Baca
 Tes
c. Fuzzyfication variabel denga menghitung µ dari tiap variabel
 µ umur kurang
 µ umur cukup
 µ umur lebih
 µ baca tidak bisa
 µ baca kurang lancar
 µ lancar
 µ sangat lancar
 µ tes kurang
 µ tes cukup
 µ tes bagus
 µ tes sangat bagus
d. Menghitung nilai alfa predikat setiap rule yang ada (40 rule) dengan
menggunakan rumus:
 Fungsi linier turun → umur kurang, baca tidak bisa, tes kurang
 Fungsi segitiga → umur cukup, baca kurang lancar, baca lancar, tes
cukup, dan tes bagus
 Fungsi linier naik → umur lebih, baca sangat lancar, tes sangat bagus
e. Menghitung nilai z untuk semua rule (40 rule) menggunakan rumus:
 Fungsi linier turun → kelas khusus
 Fungsi linier naik → kelas regular
Mamdani
Komposisi aturan dengan menghitung nilai max dari:
 Alfa predikat kelas khusus
 Alfa predikat kelas reguler
f. Defuzzyfikasi dengan menghitung nilai z total dengan rumus COA
g. Selesai

3. Source code dengan metode tsukamoto


Source code desain dan mengeluarkan output
package kkttsukamoto;

import javax.swing.JOptionPane;

/**
*
* @author * @author dyah ayu fladya rizky, rahmat irsyada
*/
public class KKJFrame extends javax.swing.JFrame {

/**
* Creates new form KKJFrame
*/
public KKJFrame() {
initComponents();
}

/**
* This method is called from within the constructor to
initialize the form.
* WARNING: Do NOT modify this code. The content of this
method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated
Code">//GEN-BEGIN:initComponents
private void initComponents() {

fieldUmur = new javax.swing.JTextField();


jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
jLabel3 = new javax.swing.JLabel();
fieldBaca = new javax.swing.JTextField();
fieldNilai = new javax.swing.JTextField();
jButton1 = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
areahasil = new javax.swing.JTextArea();
jLabel4 = new javax.swing.JLabel();
reset = new javax.swing.JButton();
jLabel5 = new javax.swing.JLabel();
jLabel6 = new javax.swing.JLabel();
jLabel7 = new javax.swing.JLabel();
jLabel8 = new javax.swing.JLabel();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_C
LOSE);
setBackground(new java.awt.Color(204, 204, 255));
setCursor(new
java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));

fieldUmur.addActionListener(new
java.awt.event.ActionListener() {
public void
actionPerformed(java.awt.event.ActionEvent evt) {
fieldUmurActionPerformed(evt);
}
});

jLabel1.setFont(new java.awt.Font("SimSun", 0, 11));


// NOI18N
jLabel1.setText("Umur");

jLabel2.setFont(new java.awt.Font("SimSun", 0, 11));


// NOI18N
jLabel2.setText("Baca");

jLabel3.setFont(new java.awt.Font("SimSun", 0, 11));


// NOI18N
jLabel3.setText("Nilai");

fieldBaca.addActionListener(new
java.awt.event.ActionListener() {
public void
actionPerformed(java.awt.event.ActionEvent evt) {
fieldBacaActionPerformed(evt);
}
});

jButton1.setBackground(new java.awt.Color(255, 204,


204));
jButton1.setFont(new java.awt.Font("Trajan Pro", 0,
11)); // NOI18N
jButton1.setText("Cari Hasil");
jButton1.addActionListener(new
java.awt.event.ActionListener() {
public void
actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});

areahasil.setColumns(20);
areahasil.setForeground(new java.awt.Color(0, 0,
102));
areahasil.setRows(5);
jScrollPane1.setViewportView(areahasil);
jLabel4.setFont(new java.awt.Font("Stencil Std", 0,
12)); // NOI18N
jLabel4.setText("PENERAPAN METODE FUZZY TSUKAMOTO
DALAM PENENTUAN KELAS");

reset.setBackground(new java.awt.Color(255, 204,


204));
reset.setFont(new java.awt.Font("Trajan Pro", 0, 11));
// NOI18N
reset.setText("Reset");
reset.addActionListener(new
java.awt.event.ActionListener() {
public void
actionPerformed(java.awt.event.ActionEvent evt) {
resetActionPerformed(evt);
}
});

jLabel5.setFont(new java.awt.Font("SimSun", 0, 11));


// NOI18N
jLabel5.setText("(Umur = 1-10 tahun)");

jLabel6.setFont(new java.awt.Font("SimSun", 0, 11));


// NOI18N
jLabel6.setText("(Baca = 0-100)");

jLabel7.setFont(new java.awt.Font("SimSun", 0, 11));


// NOI18N
jLabel7.setText("(Nilai = 0-100)");

jLabel8.setFont(new java.awt.Font("Stencil", 2, 10));


// NOI18N

jLabel8.setHorizontalAlignment(javax.swing.SwingConstants.CENT
ER);
jLabel8.setText("STUDI KASUS DI SD");

javax.swing.GroupLayout layout = new


javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.L
EADING)
.addGroup(layout.createSequentialGroup()
.addGap(37, 37, 37)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.A
lignment.LEADING)
.addComponent(jScrollPane1)
.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.A
lignment.LEADING)
.addComponent(jLabel3)
.addComponent(jLabel2)
.addComponent(jLabel1))
.addGap(39, 39, 39)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.A
lignment.LEADING)

.addGroup(layout.createSequentialGroup()
.addGap(0, 0, Short.MAX_VALUE)
.addComponent(jButton1)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE
LATED)
.addComponent(reset))

.addGroup(layout.createSequentialGroup()

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.A
lignment.LEADING)

.addGroup(layout.createSequentialGroup()

.addComponent(fieldBaca,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)

.addComponent(jLabel6))

.addGroup(layout.createSequentialGroup()

.addComponent(fieldNilai,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)

.addComponent(jLabel7))

.addGroup(layout.createSequentialGroup()

.addComponent(fieldUmur,
javax.swing.GroupLayout.PREFERRED_SIZE, 250,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)

.addComponent(jLabel5)))
.addGap(0, 0,
Short.MAX_VALUE)))))
.addGap(33, 33, 33))

.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
layout.createSequentialGroup()

.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE)
.addComponent(jLabel4)
.addGap(42, 42, 42))
.addGroup(layout.createSequentialGroup()
.addGap(203, 203, 203)
.addComponent(jLabel8,
javax.swing.GroupLayout.PREFERRED_SIZE, 103,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
);
layout.setVerticalGroup(

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.L
EADING)
.addGroup(layout.createSequentialGroup()
.addGap(16, 16, 16)
.addComponent(jLabel4,
javax.swing.GroupLayout.PREFERRED_SIZE, 13,
javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RE
LATED)
.addComponent(jLabel8)
.addGap(27, 27, 27)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.A
lignment.BASELINE)
.addComponent(fieldUmur,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1)
.addComponent(jLabel5))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UN
RELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.A
lignment.BASELINE)
.addComponent(jLabel2)
.addComponent(fieldBaca,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel6))

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UN
RELATED)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.A
lignment.BASELINE)
.addComponent(jLabel3)
.addComponent(fieldNilai,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel7))
.addGap(18, 18, 18)

.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.A
lignment.BASELINE)
.addComponent(jButton1)
.addComponent(reset))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UN
RELATED)
.addComponent(jScrollPane1,
javax.swing.GroupLayout.PREFERRED_SIZE, 190,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(23, Short.MAX_VALUE))
);

pack();
}// </editor-fold>//GEN-END:initComponents

private void
fieldUmurActionPerformed(java.awt.event.ActionEvent evt)
{//GEN-FIRST:event_fieldUmurActionPerformed
// TODO add your handling code here:

}//GEN-LAST:event_fieldUmurActionPerformed

private void
fieldBacaActionPerformed(java.awt.event.ActionEvent evt)
{//GEN-FIRST:event_fieldBacaActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_fieldBacaActionPerformed

private void
jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{//GEN-FIRST:event_jButton1ActionPerformed
// TODO add your handling code here:
try{
String umur = fieldUmur.getText();
String baca = fieldBaca.getText();
String nilai = fieldNilai.getText();
//menampilkan hasil - z total
double hasil;
Kkttsukamoto hf = new Kkttsukamoto();
hasil =
hf.hitunghasil(Double.parseDouble(fieldUmur.getText()),
Double.parseDouble(fieldBaca.getText()),
Double.parseDouble(fieldNilai.getText()));
if (hasil<=50){
String pesan = "Siswa ini Masuk Kelas
(Khusus)\nNilai = "+hasil;
areahasil.setText(pesan);
} else if (hasil>=50){
String pesan = "Siswa ini Masuk Kelas
(Reguler)\nNilai = "+hasil;
areahasil.setText(pesan);
}
}
catch(Exception e){
JOptionPane.showMessageDialog(null, "Isi Kolom
Yang Kosong");
}
}//GEN-LAST:event_jButton1ActionPerformed

private void
resetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-
FIRST:event_resetActionPerformed
// TODO add your handling code here:
fieldUmur.setText(null);
fieldBaca.setText(null);
fieldNilai.setText(null);

}//GEN-LAST:event_resetActionPerformed

/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look
and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not
available, stay with the default look and feel.
* For details see
http://download.oracle.com/javase/tutorial/uiswing/lookandfeel
/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {

javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {

java.util.logging.Logger.getLogger(KKJFrame.class.getName()).l
og(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {

java.util.logging.Logger.getLogger(KKJFrame.class.getName()).l
og(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(KKJFrame.class.getName()).l
og(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException
ex) {

java.util.logging.Logger.getLogger(KKJFrame.class.getName()).l
og(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>

/* Create and display the form */


java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new KKJFrame().setVisible(true);
}
});
}

// Variables declaration - do not modify//GEN-


BEGIN:variables
private javax.swing.JTextArea areahasil;
private javax.swing.JTextField fieldBaca;
private javax.swing.JTextField fieldNilai;
private javax.swing.JTextField fieldUmur;
private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabel7;
private javax.swing.JLabel jLabel8;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JButton reset;
// End of variables declaration//GEN-END:variables
}

Source code program (metode tsukamoto)


package kkttsukamoto;

import java.util.Scanner;

/**
*
* @author dyah ayu fladya rizky, rahmat irsyada
*/
public class Kkttsukamoto {

/**
* @param args the command line arguments
*/
//varibel input
int umur,baca,nilai;

//rumus perhitungan myu umur Kurang - fungsi linier turun


//a= 2, b=6
public static double umurKurang(double x){
double myu;
if(x<=2) {
myu=1;
}
else if(x>=6){
myu=0;
}
else{
myu = (6-x)/4; //myu = (b-x)/(b-a)
}
return myu;

//rumus perhitungan myu umur cukup - fungsi segitiga


//a=4 b=6 c=8
public static double umurCukup(double x){
double myu = 0;
if(x<=4) myu=0;
else if(x>=8) myu=0;
else if(x==6)myu=1;
else if(x<6 && x>4){
myu = (x-4)/2; //myu = (x-a)/(b-a) -> a=4, b=6
}
else if(x>6 && x<8){
myu = (8-x)/2; //myu = (c-x)/(c-b) -> c=8, b=6
}
return myu;
}

//rumus perhitungan myu umur lebih - fungsi linier naik


//a= 6, b=10
public static double umurLebih(double x){
double myu;
if(x<=6) myu=0;
else if(x>=10) myu=1;
else{
myu = (x-6)/4; //myu = (x-a)/(b-a)
}
return myu;
}

//rumus perhitungan myu baca tidak bisa - fungsi linier


turun
//a= 20, b=60
public static double bacaTidakBisa(double x){
double myu;
if(x<=20) {
myu=1;
}
else if(x>=60){
myu=0;
}
else{
myu = (60-x)/40;//myu = (b-x)/(b-a)
}
return myu;
}

//rumus perhitungan myu baca kurang lancar - fungsi


segitiga
//a=40 b=60 c=80
public static double bacaKurangLancar(double x){
double myu = 0;
if(x<=40) myu=0;
else if(x>=80) myu=0;
else if(x==60)myu=1;
else if(x<60 && x>40){
myu = (x-40)/20; //myu = (x-a)/(b-a) -> a=40, b=60
}
else if(x>60 && x<80){
myu = (80-x)/20; //myu = (c-x)/(c-b) -> c=80, b=60
}
return myu;
}

//rumus perhitungan myu baca lancar - fungsi segitiga


//a=60 b=80 c=100
public static double bacaLancar(double x){
double myu = 0;
if(x<=60) myu=0;
else if(x>=100) myu=0;
else if(x==80)myu=1;
else if(x<80 && x>60){
myu = (x-60)/20; //myu = (x-a)/(b-a) -> a=60, b=80
}
else if(x>80 && x<100){
myu = (100-x)/20; //myu = (c-x)/(c-b) -> c=100,
b=80
}
return myu;
}

//rumus perhitungan myu baca sangat lancar - fungsi linier


naik
//a=80 b=100
public static double bacaSangatLancar(double x){
double myu;
if(x<=80) myu=0;
else if(x>=100) myu=1;
else{
myu = (x-80)/20; //myu = (x-a)/(b-a)
}
return myu;
}

//rumus perhitungan myu nilai kurang - fungsi linier naik


//a= 20, b=60
public static double nilaiKurang(double x){
double myu;
if(x<=20) {
myu=1;
}
else if(x>=60){
myu=0;
}
else{
myu = (60-x)/40; //myu = (b-x)/(b-a)
}
return myu;
}

//rumus perhitungan myu nilai cukup - fungsi segitiga


//a=40 b=60 c=80
public static double nilaiCukup(double x){
double myu = 0;
if(x<=40) myu=0;
else if(x>=80) myu=0;
else if(x==60)myu=1;
else if(x<60 && x>40){
myu = (x-40)/20; //myu = (x-a)/(b-a) -> a=40, b=60
}
else if(x>60 && x<80){
myu = (80-x)/20; //myu = (c-x)/(c-b) -> c=80, b=60
}
return myu;
}

//rumus perhitungan myu nilai bagus - fungsi segitiga


//a=60 b=80 c=100
public static double nilaiBagus(double x){
double myu = 0;
if(x<=60) myu=0;
else if(x>=100) myu=0;
else if(x==80)myu=1;
else if(x<80 && x>60){
myu = (x-60)/20; //myu = (x-a)/(b-a) -> a=60, b=80
}
else if(x>80 && x<100){
myu = (100-x)/20; //myu = (c-x)/(c-b) -> c=100,
b=80
}
return myu;
}

//rumus perhitungan myu nilai sangat bagus - fungsi linier


turun
//a=80 b=100
public static double nilaiSangatBagus(double x){
double myu;
if(x<=80) myu=0;
else if(x>=100) myu=1;
else{
myu = (x-80)/20; //myu = (x-a)/(b-a)
}
return myu;
}

//rumus perhitungan z untuk kelas khusus - fungsi linier


turun
//myu = -((z-b)/(b-a))
//myu = - ((z-80)/(80-20))
//myu = -(z-80)/60
//z = (60*myu)-80/-1
public static double zKelasKhusus(double myu){
double z;
z = ((60*myu)-80)/-1;
return z;
}

//rumus perhitungan z untuk kelas reguler - fungsi linier


naik
//myu = (z-a)/(b-a)
//myu = (z-20)/(80-20)
//myu = (z-20)/60
//z = (60*myu)+ 20
public static double zKelasBiasa(double myu){
double z;
z = (60*myu)+20;
return z;
}

//fungsi untuk menentukan nilai min - digunakan ketika


menghitung alfa predikat
public static double min(double a, double b){
double min;
min = Math.min(a,b);
return min;
}

public static void main(String[] args) {

public double hitunghasil (double umur, double baca,


double nilai){
double myuUmurKurang, myuUmurCukup, myuUmurLebih,
myuBacaTidakBisa, myuBacaKurangLancar,
myuBacaLancar,
myuBacaSangatLancar, myuNilaiKurang,
myuNilaiCukup,
myuNilaiBagus, myuNilaiSangatBagus,
myuKelasKhusus, myuKelasBiasa;

myuUmurKurang = umurKurang(umur);
myuUmurCukup = umurCukup(umur);
myuUmurLebih = umurLebih(umur);
myuBacaTidakBisa = bacaTidakBisa(baca);
myuBacaKurangLancar = bacaKurangLancar(baca);
myuBacaLancar = bacaLancar(baca);
myuBacaSangatLancar = bacaSangatLancar(baca);
myuNilaiKurang = nilaiKurang(nilai);
myuNilaiCukup = nilaiCukup(nilai);
myuNilaiBagus = nilaiBagus(nilai);
myuNilaiSangatBagus = nilaiSangatBagus(nilai);

//menampilkan nilai myu di output di dalam program


(bukan di tampilan user)
System.out.println("mu1 = "+myuUmurKurang);
System.out.println("mu2 = "+myuUmurCukup);
System.out.println("mu3 = "+myuUmurLebih);
System.out.println("mb1 = "+myuBacaTidakBisa);
System.out.println("mb2 = "+myuBacaKurangLancar);
System.out.println("mb3 = "+myuBacaLancar);
System.out.println("mb4 = "+myuBacaSangatLancar);
System.out.println("mt1 = "+myuNilaiKurang);
System.out.println("mt2 = "+myuNilaiCukup);
System.out.println("mt3 = "+myuNilaiBagus);
System.out.println("mt4 = "+myuNilaiSangatBagus);

//perhitungan alfa predikat setiap rule dengan memilih


nilai minimal myu
//serta menampilkan alfa predikat di output di dalam
program (bukan di tampilan user)
double apred1 =
min(myuUmurKurang,myuBacaSangatLancar);
System.out.println("apred 1 = "+apred1);
double apred2 = min(myuUmurKurang,myuBacaLancar);
System.out.println("apred 2 = "+apred2);
double apred3 =
min(myuUmurKurang,myuBacaKurangLancar);
System.out.println("apred 3 = "+apred3);
double apred4 = min(myuUmurKurang,myuBacaTidakBisa);
System.out.println("apred 4 = "+apred4);
double apred5 = min(myuUmurCukup,myuBacaSangatLancar);
System.out.println("apred 5 = "+apred5);
double apred6 = min(myuUmurCukup,myuBacaLancar);
System.out.println("apred 6 = "+apred6);
double apred7 = min(myuUmurCukup,myuBacaKurangLancar);
System.out.println("apred 7 = "+apred7);
double apred8 = min(myuUmurCukup,myuBacaTidakBisa);
System.out.println("apred 8 = "+apred8);
double apred9 = min(myuUmurLebih,myuBacaSangatLancar);
System.out.println("apred 9 = "+apred9);
double apred10 = min(myuUmurLebih,myuBacaLancar);
System.out.println("apred 10 = "+apred10);
double apred11 =
min(myuUmurLebih,myuBacaKurangLancar);
System.out.println("apred 11 = "+apred11);
double apred12 = min(myuUmurLebih,myuBacaTidakBisa);
System.out.println("apred 12 = "+apred12);
double apred13 =
min(myuUmurKurang,myuNilaiSangatBagus);
System.out.println("apred 13 = "+apred13);
double apred14 = min(myuUmurKurang,myuNilaiBagus);
System.out.println("apred 14 = "+apred14);
double apred15 = min(myuUmurKurang,myuNilaiCukup);
System.out.println("apred 15 = "+apred15);
double apred16 = min(myuUmurKurang,myuNilaiKurang);
System.out.println("apred 16 = "+apred16);
double apred17 =
min(myuUmurCukup,myuNilaiSangatBagus);
System.out.println("apred 17 = "+apred17);
double apred18 = min(myuUmurCukup,myuNilaiBagus);
System.out.println("apred 18 = "+apred18);
double apred19 = min(myuUmurCukup,myuNilaiCukup);
System.out.println("apred 19 = "+apred19);
double apred20 = min(myuUmurCukup,myuNilaiKurang);
System.out.println("apred 20 = "+apred20);
double apred21 =
min(myuUmurLebih,myuNilaiSangatBagus);
System.out.println("apred 21 = "+apred21);
double apred22 = min(myuUmurLebih,myuNilaiBagus);
System.out.println("apred 22 = "+apred22);
double apred23 = min(myuUmurLebih,myuNilaiCukup);
System.out.println("apred 23 = "+apred23);
double apred24 = min(myuUmurLebih,myuNilaiKurang);
System.out.println("apred 24 = "+apred24);
double apred25 =
min(myuNilaiSangatBagus,myuBacaSangatLancar);
System.out.println("apred 25 = "+apred25);
double apred26 =
min(myuNilaiSangatBagus,myuBacaLancar);
System.out.println("apred 26 = "+apred26);
double apred27 =
min(myuNilaiSangatBagus,myuBacaKurangLancar);
System.out.println("apred 27 = "+apred27);
double apred28 =
min(myuNilaiSangatBagus,myuBacaTidakBisa);
System.out.println("apred 28 = "+apred28);
double apred29 =
min(myuNilaiBagus,myuBacaSangatLancar);
System.out.println("apred 29 = "+apred29);
double apred30 = min(myuNilaiBagus,myuBacaLancar);
System.out.println("apred 30 = "+apred30);
double apred31 =
min(myuNilaiBagus,myuBacaKurangLancar);
System.out.println("apred 31 = "+apred31);
double apred32 = min(myuNilaiBagus,myuBacaTidakBisa);
System.out.println("apred 32 = "+apred32);
double apred33 =
min(myuNilaiCukup,myuBacaSangatLancar);
System.out.println("apred 33 = "+apred33);
double apred34 = min(myuNilaiCukup,myuBacaLancar);
System.out.println("apred 34 = "+apred34);
double apred35 =
min(myuNilaiCukup,myuBacaKurangLancar);
System.out.println("apred 35 = "+apred35);
double apred36 = min(myuNilaiCukup,myuBacaTidakBisa);
System.out.println("apred 36 = "+apred36);
double apred37 =
min(myuNilaiKurang,myuBacaSangatLancar);
System.out.println("apred 37 = "+apred37);
double apred38 = min(myuNilaiKurang,myuBacaLancar);
System.out.println("apred 38 = "+apred38);
double apred39 =
min(myuNilaiKurang,myuBacaKurangLancar);
System.out.println("apred 39 = "+apred39);
double apred40 = min(myuNilaiKurang,myuBacaTidakBisa);
System.out.println("apred 40 = "+apred40);
System.out.println("\n");

//perhitungan z dari setiap rule (inference engine)


double z1 = zKelasBiasa(apred1);System.out.println("Z1
= "+z1);
double z2 = zKelasBiasa(apred2);System.out.println("Z2
= "+z2);
double z3 =
zKelasKhusus(apred3);System.out.println("Z3 = "+z3);
double z4 =
zKelasKhusus(apred4);System.out.println("Z4 = "+z4);
double z5 = zKelasBiasa(apred5);System.out.println("Z5
= "+z5);
double z6 = zKelasBiasa(apred6);System.out.println("Z6
= "+z6);
double z7 =
zKelasKhusus(apred7);System.out.println("Z7 = "+z7);
double z8 =
zKelasKhusus(apred8);System.out.println("Z8 = "+z8);
double z9 = zKelasBiasa(apred9);System.out.println("Z9
= "+z9);
double z10 =
zKelasBiasa(apred10);System.out.println("Z10 = "+z10);
double z11 =
zKelasBiasa(apred11);System.out.println("Z11 = "+z11);
double z12 =
zKelasKhusus(apred12);System.out.println("Z12 = "+z12);
double z13 =
zKelasBiasa(apred13);System.out.println("Z13 = "+z13);
double z14 =
zKelasBiasa(apred14);System.out.println("Z14 = "+z14);
double z15 =
zKelasBiasa(apred15);System.out.println("Z15 = "+z15);
double z16 =
zKelasKhusus(apred16);System.out.println("Z16 = "+z16);
double z17 =
zKelasBiasa(apred17);System.out.println("Z17 = "+z17);
double z18 =
zKelasBiasa(apred18);System.out.println("Z18 = "+z18);
double z19 =
zKelasBiasa(apred19);System.out.println("Z19 = "+z19);
double z20 =
zKelasKhusus(apred20);System.out.println("Z20 = "+z20);
double z21 =
zKelasBiasa(apred21);System.out.println("Z21 = "+z21);
double z22 =
zKelasBiasa(apred22);System.out.println("Z22 = "+z22);
double z23 =
zKelasBiasa(apred23);System.out.println("Z23 = "+z23);
double z24 =
zKelasKhusus(apred24);System.out.println("Z24 = "+z24);
double z25 =
zKelasBiasa(apred25);System.out.println("Z25 = "+z25);
double z26 =
zKelasBiasa(apred26);System.out.println("Z26 = "+z26);
double z27 =
zKelasBiasa(apred27);System.out.println("Z27 = "+z27);
double z28 =
zKelasKhusus(apred28);System.out.println("Z28 = "+z28);
double z29 =
zKelasBiasa(apred29);System.out.println("Z29 = "+z29);
double z30 =
zKelasBiasa(apred30);System.out.println("Z30 = "+z30);
double z31 =
zKelasKhusus(apred31);System.out.println("Z31 = "+z31);
double z32 =
zKelasKhusus(apred32);System.out.println("Z32 = "+z32);
double z33 =
zKelasBiasa(apred33);System.out.println("Z33 = "+z33);
double z34 =
zKelasBiasa(apred34);System.out.println("Z34 = "+z34);
double z35 =
zKelasKhusus(apred35);System.out.println("Z35 = "+z35);
double z36 =
zKelasKhusus(apred36);System.out.println("Z36 = "+z36);
double z37 =
zKelasBiasa(apred37);System.out.println("Z37 = "+z37);
double z38 =
zKelasKhusus(apred38);System.out.println("Z38 = "+z38);
double z39 =
zKelasKhusus(apred39);System.out.println("Z39 = "+z39);
double z40 =
zKelasKhusus(apred40);System.out.println("Z40 = "+z40);
System.out.println("\n");

//DEFUZZYFIKASI
//rumus perhitungan z total -> menggunakan rumus COA
double zTot =
((apred1*z1)+(apred2*z2)+(apred3*z3)+(apred4*z4)
+(apred5*z5)+(apred6*z6)+(apred7*z7)+(apred8*z8)+(apred9*z9)

+(apred10*z10)+(apred11*z11)+(apred12*z12)+(apred13*z13)+(apre
d14*z14)

+(apred15*z15)+(apred16*z16)+(apred17*z17)+(apred18*z18)+(apre
d19*z19)

+(apred20*z20)+(apred21*z21)+(apred22*z22)+(apred23*z23)+(apre
d24*z24)

+(apred25*z25)+(apred26*z26)+(apred27*z27)+(apred28*z28)+(apre
d29*z29)

+(apred30*z30)+(apred31*z31)+(apred32*z32)+(apred33*z33)+(apre
d34*z34)+(apred35*z35)

+(apred36*z36)+(apred37*z37)+(apred38*z38)+(apred39*z39)+(apre
d40*z40))

/(apred1+apred2+apred3+apred4+apred5+apred6+apred7+apred8+apre
d9+apred10

+apred11+apred12+apred13+apred14+apred15+apred16+apred17+apred
18+apred19+apred20

+apred21+apred22+apred23+apred24+apred25+apred26+apred27+apred
28+apred29+apred30

+apred31+apred32+apred33+apred34+apred35+apred36+apred37+apred
38+apred39+apred40);
System.out.println("Z Total = "+zTot);

return zTot;
}

}
BAB IV
HASIL

A. Perbandingan Hasil

Perbandingan dengan Matlab Perbandingan dengan Manual


Program Manual
No Matlab Akurasi Error Akurasi Error

Mamdani Tsukamoto Mamdani Tsukamoto Mamdani Tsukamoto Mamdani Tsukamoto Mamdani Tsukamoto Mamdani Tsukamoto
1 58.3 60 60 60 60 97% 97% 2.8% 2.8% 100% 100% 0% 0%
2 52.1 55.4 55.2 55.29 54.98 94% 95% 5.8% 5.2% 100% 100% 0% 0%
3 41.8 56 56.4 56 56.42 75% 74% 25.4% 25.9% 100% 100% 0% 0%
4 50 20 20 20 20 40% 40% 60.0% 60.0% 100% 100% 0% 0%
5 67 50 50 50 50 75% 75% 25.4% 25.4% 100% 100% 0% 0%
6 50 50 51.3 50 51.3 100% 97% 0.0% 2.5% 100% 100% 0% 0%
7 44.9 54.2 54.2 54.9 54.1 82% 83% 18.2% 17.0% 99% 100% 1% 1%
8 51.3 46.6 45.9 46.6 45.9 91% 89% 9.2% 10.5% 100% 100% 0% 0%
9 70.9 77.1 77.9 77 78 92% 91% 7.9% 9.1% 100% 100% 0% 0%
10 42.5 36.1 37.3 36 37.3 85% 88% 15.3% 12.2% 100% 100% 0% 0%

83% 83% 17% 17% 100% 100% 0% 0%


B. Program

Debug
mu1 = 0.0 apred 14 = 0.0 apred 38 = 0.0 Z21 = 20.0
mu2 = 1.0 apred 15 = 0.0 apred 39 = 0.0 Z22 = 20.0
mu3 = 0.0 apred 16 = 0.0 apred 40 = 0.0 Z23 = 20.0
mb1 = 0.0 apred 17 = 0.0 Z24 = 80.0
mb2 = 0.5 apred 18 = 1.0 Z1 = 20.0 Z25 = 20.0
mb3 = 0.5 apred 19 = 0.0 Z2 = 20.0 Z26 = 20.0
mb4 = 0.0 apred 20 = 0.0 Z3 = 80.0 Z27 = 20.0
mt1 = 0.0 apred 21 = 0.0 Z4 = 80.0 Z28 = 80.0
mt2 = 0.0 apred 22 = 0.0 Z5 = 20.0 Z29 = 20.0
mt3 = 1.0 apred 23 = 0.0 Z6 = 50.0 Z30 = 50.0
mt4 = 0.0 apred 24 = 0.0 Z7 = 50.0 Z31 = 50.0
apred 1 = 0.0 apred 25 = 0.0 Z8 = 80.0 Z32 = 80.0
apred 2 = 0.0 apred 26 = 0.0 Z9 = 20.0 Z33 = 20.0
apred 3 = 0.0 apred 27 = 0.0 Z10 = 20.0 Z34 = 20.0
apred 4 = 0.0 apred 28 = 0.0 Z11 = 20.0 Z35 = 80.0
apred 5 = 0.0 apred 29 = 0.0 Z12 = 80.0 Z36 = 80.0
apred 6 = 0.5 apred 30 = 0.5 Z13 = 20.0 Z37 = 20.0
apred 7 = 0.5 apred 31 = 0.5 Z14 = 20.0 Z38 = 80.0
apred 8 = 0.0 apred 32 = 0.0 Z15 = 20.0 Z39 = 80.0
apred 9 = 0.0 apred 33 = 0.0 Z16 = 80.0 Z40 = 80.0
apred 10 = 0.0 apred 34 = 0.0 Z17 = 20.0
apred 11 = 0.0 apred 35 = 0.0 Z18 = 80.0
apred 12 = 0.0 apred 36 = 0.0 Z19 = 20.0 Z Total = 60.0
apred 13 = 0.0 apred 37 = 0.0 Z20 = 80.0
Mamdani

Debug
apred 1 = 0.0 apred 16 = 0.0 apred 31 = 0.5
apred 2 = 0.0 apred 17 = 0.0 apred 32 = 0.0
apred 3 = 0.0 apred 18 = 1.0 apred 33 = 0.0
apred 4 = 0.0 apred 19 = 0.0 apred 34 = 0.0
apred 5 = 0.0 apred 20 = 0.0 apred 35 = 0.0
apred 6 = 0.5 apred 21 = 0.0 apred 36 = 0.0
apred 7 = 0.5 apred 22 = 0.0 apred 37 = 0.0
apred 8 = 0.0 apred 23 = 0.0 apred 38 = 0.0
apred 9 = 0.0 apred 24 = 0.0 apred 39 = 0.0
apred 10 = 0.0 apred 25 = 0.0 apred 40 = 0.0
apred 11 = 0.0 apred 26 = 0.0
apred 12 = 0.0 apred 27 = 0.0 max khusus = 0.5
apred 13 = 0.0 apred 28 = 0.0 max reguler = 1.0
apred 14 = 0.0 apred 29 = 0.0
apred 15 = 0.0 apred 30 = 0.5 Z Total = 60.0

C. Perhitungan Manual
D. Matlab
1. Input
Gambar diatas merupakan varibel input yang pertama yaitu umur. Variabel
ini terdiri dari 3 kriteria yaitu kurang, cukup, lebih

Gambar diatas merupakan varibel input yang kedua yaitu baca. Variabel ini
terdiri dari 4 kriteria yaitu tidak bisa, kurang lancar, lancar, sangat lancar.
Gambar diatas merupakan varibel input yang ketiga yaitu tes. Variabel ini
terdiri dari 4 kriteria yaitu kurang, cukup, bagus, sangat bagus.

2. Output
BAB IV
KESIMPULAN

1.
REFERENSI

Anda mungkin juga menyukai