Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa
OLEH : NAMA
: DEDDY IRWAN
NIM
: 02 04020 55
DEPARTEMEN TEKNIK ELEKTRO FAKULTAS TEKNIK UNIVERSITAS SUMATERA UTARA MEDAN 2008
1
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa OLEH : NAMA NIM
: DEDDY IRWAN : 02 04020 55
Tugas Akhir/ Karya Akhir ini diajukan untuk melengkapi salah satu syarat untuk memperoleh gelar Sarjana Teknik pada
DEPARTEMEN TEKNIK ELEKTRO FAKULTAS TEKNIK UNIVERSITAS SUMATERA UTARA MEDAN Sidang pada tanggal 24 bulan Mei tahun 2008 di depan Penguji : 1. Ir. Zahiful Bahri, M.Sc.
: Ketua Penguji
:
2. Ir. Pernantin Tarigan, M.Sc.
: Anggota Penguji
:
3. Fahmi, ST, M.Sc
: Anggota Penguji
:
Disetujui oleh : Pembimbing Tugas Akhir
IR. T. Ahri Bahriun, M.Sc. NIP 131 456 553 Diketahui oleh : Ketua Departemen Teknik Elektro
Ir. Nasrul Abdi, MT NIP: 131 459 555
2
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa OLEH : NAMA NIM
: DEDDY IRWAN : 02 04020 55
Tugas Akhir/ Karya Akhir ini diajukan untuk melengkapi salah satu syarat untuk memperoleh gelar Sarjana Teknik pada
DEPARTEMEN TEKNIK ELEKTRO FAKULTAS TEKNIK UNIVERSITAS SUMATERA UTARA MEDAN Sidang pada tanggal 26 bulan Mei tahun 2008 di depan Penguji : 1.
Ir. Zahiful Bahri, M.Sc.
: Ketua Penguji
2.
Ir. Pernantin Tarigan,
: Anggota Penguji
M.Sc.
: Anggota Penguji
3. 3. Fahmi, ST, M.Sc
Diketahui oleh : Ketua Departemen Teknik Elektro
Disetujui oleh : Pembimbing Tugas Akhir
Ir. Nasrul Abdi, MT NIP: 131 459 555
IR. T. Ahri Bahriun, M.Sc. NIP 131 456 553
3
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
ABSTRAK Sistem database relasional yang ada sampai sekarang ini hanya mampu menangani data yang bersifat pasti (crispy), deterministik dan presisi. Padahal dalam kondisi nyata, sering sekali dibutuhkan data yang samar untuk proses pengambilan keputusan. Untuk pengambilan keputusan yang melibatkan variabel samar berdasarkan data crispy yang ada di dalam database, dapat direalisasikan dengan mengembangkan suatu aplikasi untuk menangani query yang diberikan kepada sistem database serta dengan melakukan fuzzifikasi pada data. Pada Tugas akhir ini akan dibahas bagaimana mengimplementasikan logika fuzzy ke dalam sistem database, yaitu dengan membangun sebuah aplikasi yang melakukan proses fuzzifikasi data dan menangani query yang bernilai fuzzy. Dengan pengimplementasian sistem logika fuzzy ke dalam sistem database, query seleksi yang diberikan pada sistem database tidak akan melakukan seleksi secara tegas pada data. Tetapi akan memberikan pendekatan seleksi yang lebih menekankan pada derajat keanggotaan elemen pada himpunan yang diinginkan. Jadi walaupun tanpa mengimplementasikan sistem inferensi fuzzy (penalaran), diharapkan aplikasi ini nantinya dapat membantu dalam proses pengambilan keputusan (Decision Support System). Masalah yang diangkat dan diselesaikan adalah proses perekomendasian mahasiswa yang layak untuk mendapat beasiswa. Dimana calon mahasiswa yang akan direkomendasikan memiliki kriteria-kriteria yang bernilai fuzzy. Sedangkan data yang ada pada database bernilai pasti. Kriteria-kriteria yang dibutuhkan antara lain IPK, TOEFL, absensi dan penghasilan orang tua. Dalam pengembangan aplikasi ini dan graphical user interface-nya digunakan Java SE 6 (jdk6) dari Sun Microsystem dengan IDE NetBeans 5.5. Sedangkan untuk membangun dan manejemen databasenya menggunakan MySQL Server 5. Kata kunci : Logika Fuzzy, Fungsi Keanggotaan, Fire Strength, Database Relasional
4
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
DAFTAR ISI ABSTRAK………………………………………………………………………...i KATA PENGANTAR……………………………………………………………ii DAFTAR ISI……………………………………….……………………………..iv DAFTAR GAMBAR………………………………………………………….....vii DAFTAR TABEL……………………………………………………………….viii
BAB I PENDAHULUAN 1.1 Latar Belakang……………............………………………….……...1 1.2 Tujuan Penulisan .…………....................…………………….……..3 1.3 Rumusan Masalah………………................…………………….…..3 1.4 Batasan Masalah…………………................………………….……4 1.5 Metodologi Penulisan……………............………………….………5 1.6 Sistematika Penulisan………………..……………………...........…7
BAB II LANDASAN TEORI………………..……………………............…...8 2.1 Logika Fuzzy ………………..……………………...........…............8 2.1.1
Himpunan Fuzzy…..……………………..........…...............9
2.1.2
Fungsi Keanggotaan.............................................................14
2.1.3
Operator Dasar Zadeh untuk Operasi Himpunan Fuzzy......18
2.2 Database Relasional..........................................................................19 2.2.1 Entity Relationship Diagram................................................21
5
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
2.2.2 Normalisasi Database...........................................................23 2.3 Fuzzifikasi Database.........................................................................24 2.3.1 Fuzzy Query pada Database.................................................27 2.3.2 Fuzzy Extension Database....................................................28 2.4 MySQL.............................................................................................29 2.5 Bahasa Java.......................................................................................30 2.6 IDE NetBeans 5.5.............................................................................31 2.7 Java Database Connectivity (JDBC) ...............................................27
BAB III PERANCANGAN DAN PEMBANGUNAN SISTEM 3.1 Perancangan Database....................................................................34 3.1.1 Database Mahasiswa...........................................................34 3.1.2 Database Temporari............................................................34 3.1.3 Database Hasil....................................................................36 3.2 Rancangan Sistem...........................................................................36 3.2.1 Data Flow Diagram.............................................................37 3.2.2 Batasan-batasan dalam Sistem............................................41 3.2.3 Proses Perhitungan Fire Strength.......................................42 3.3 Rancangan Antarmuka....................................................................43 3.3.1 Menu Utama........................................................................43 3.3.2 Seleksi Data.........................................................................46 3.4 Koneksi Database............................................................................48 3.4.1 Registrasi Driver..................................................................48 3.4.2 Kelas Driver Manager.........................................................49
6
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
3.4.3 Interface Connection...........................................................51 3.4.4 Interface Statement.............................................................51 3.4.5 Interface ResultSet..............................................................52 BAB IV UJI COBA APLIKASI DAN ANALISA 4.1 Uji Coba Fuzzifikasi......................................................................55 4.1.1 Percobaan 1........................................................................55 4.1.2 Percobaan 2........................................................................59 4.2 Analisa...........................................................................................62 4.2.1 Analisa Percobaan 1..........................................................62 4.2.2 Analisa Percobaan 2..........................................................64
BAB V PENUTUP 4.3 Kesimpulan....................................................................................67 4.4 Saran..............................................................................................68 Daftar Pustaka Lampiran A : Listing Program Koneksi Database Lampiran B : Listing Program Tabel Model Lampiran C : Listing Program Fuzzifikasi Lampiran D : Listing Program Fungsi Keanggotaan Lampiran E : Listing Program Fire Strength
7
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
DAFTAR GAMBAR Gambar 2.1
Himpunan MUDA, PAROBAYA, dan TUA.................................10
Gambar 2.2
Himpunan Fuzzy untuk Variabel Umur.........................................11
Gambar 2.3
Himpunan Fuzzy untuk Variabel Temperatur................................13
Gambar 2.4
Representasi Linier Naik.........…………………………….……..14
Gambar 2.5
Representasi Linier Turun.......…………………………….……..15
Gambar 2.6
Representasi Kurva Segitiga...........................................................16
Gambar 2.7
Representasi Kurva Trapesium.......................................................16
Gambar 2.8
Representasi Kurva Bahu...............................................................17
Gambar 2.9
Fungsi Keanggotaan Fuzzy ABG..................................................28
Gambar 3.1
Struktur Tabel MAHASISWA.....................……………………..34
Gambar 3.2
Sruktur Tabel Temporari................................................................35
Gambar 3.3
Sruktur Tabel Temporari1..............................................................36
Gambar 3.4
Bagan Sistem..................................................................................37
Gambar 3.5
Konteks Diagram Sistem.....................……………………...........38
Gambar 3.6
Overview Diagram Sistem..............................................................39
Gambar 3.7
Detail Diagram Sistem ..................................................................41
Gambar 3.8
Menu Utama...................................................................................44
Gambar 3.9
Frame Update data.........................................................................45
Gambar 3.10 Fuzzy Query Data...........................................................................47 Gambar 4.1
Query Seleksi Data........................................................................58
Gambar 4.2
Query Percobaan 2………….........................................................61
8
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
DAFTAR TABEL Tabel 2.1
Contoh Database Crispy........……………………………………27
Tabel 2.2
Contoh Fuzzy Ekstension Database……………..……….............29
Tabel 3.1
Konversi Tipe Data SQL-Java…………………………………...53
Tabel 4.1
Tabel Mahasiswa...........................................................................56
Tabel 4.2
Tabel Temporari Percobaan 1 .......................................................57
Tabel 4.3
Tabel Hasil Percobaan 1................................................................58
Tabel 4.4
Tabel Temporari Percobaan 2 .......................................................60
Tabel 4.5
Tabel Hasil Percobaan 2................................................................61
9
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
BAB I PENDAHULUAN
1.1.
Latar Belakang Masalah Sistem database yang ada sampai sekarang ini, hanya mampu menangani data
yang bersifat pasti (crisp). Begitu pula pada query yang menggunakan bahasa Structured Query Language (SQL), pendefinisian-pendefinisian yang diberikan hanya mampu menangani kondisi yang sifatnya juga pasti. Dengan kondisi yang pasti berarti struktur dan parameter dari model harus terdefinisi secara tepat. Sedangkan dalam kondisi nyata kehidupan sehari-hari, seringkali seseorang harus berhadapan dengan kondisi yang memiliki nilai yang samar, tidak pasti, atau ambigu. Pada kondisi yang samar berarti tidak terdapat suatu definisi yang pasti terhadap keadaan tersebut, sedangkan kondisi ambigu berarti suatu kondisi dimana terjadi ketidakjelasan dari beberapa alternatif yang harus diterima, yang mana yang benar dan yang mana yang salah. Sebagai salah satu contoh adalah ketika hendak menentukan mahasiswa yang layak untuk direkomendasikan mendapat beasiswa. Pada proses perekomendasian ini, tentunya ada kriteria-kriteria yang harus dipenuhi oleh si mahasiswa. Dasar penilaian terhadap mahasiwa calon penerima beasiswa tidak hanya dinilai dari indeks prestasinya saja, tetapi juga harus memperhatikan tingkat kehadirannya, penghasilan orang tuanya, dan skor TOEFL yang dimilikinya. Apabila jumlah mahasiswa yang ada relatif sedikit, maka proses perkomendasian untuk beasiswa yang ditawarkan tidak begitu rumit, karena pegawai atau pihak yang bersangkutan hanya menganalisa sejumlah record data. Tetapi proses ini akan sangat menyita waktu dan tenaga
10
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
apabila data mahasiswa yang harus dianalisa cukup besar, misalnya ada ratusan bahkan sampai ribuan record. Dalam hal ini selain masalah efisiensi, maka peluang terjadinya kesalahan akan semakin besar apabila dilakukan secara manual. Berdasarkan permasalah tersebut, maka perlu kiranya dirancang suatu aplikasi yang mampu menganalisa serta merekomendasikan nama-nama mahasiswa yang layak menerima beasiswa. Agar aplikasi ini dapat berjalan dengan baik, maka perlu didefinisikan secara baku tentang kriteria-kriteria untuk calon penerima beasiswa. Berdasarkan kriteria-kriteria inilah nantinya aplikasi akan mengenalisa data-data mahasiswa yang ada. Salah satu metode yang dapat digunakan untuk aplikasi ini adalah dengan mengimplementasikan logika fuzzy. Dengan logika fuzzy, data akan dikelompokkan ke dalam beberapa himpunan fuzzy sesuai dengan variabel fuzzy yang akan diolah. Sifat kelekatan data pada himpunan fuzzy ini bersifat linier atau eksponensial, tergantung dari fungsi keanggotaan fuzzy yang dipilih. Pada dasarnya untuk memilih mahasiswa yang layak untuk menerima suatu beasiswa dapat saja dilakukan dengan sistem logika klasik yang diterapkan pada server-server database yang ada sekarang ini. Namun hal ini akan menyebabkan data diolah secara tegas, sehingga mahasiswa-mahasiswa yang memiliki kriteria yang mendekati pendefinisian tidak akan direkomendasikan. Diharapkan dengan ditulisnya Tugas Akhir berjudul “ Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa ”, permasalahanpermasalahan dalam perekomendasian beasiswa untuk mahasiswa dapat dipecahkan.
11
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
1.2.
Tujuan Penulisan Adapun tujuan penulisan ini adalah untuk : 1.
Menambah
pengetahuan
tentang
penanganan
database
dan
interkoneksinya dengan aplikasi berbasis Java. 2.
Memahami metode pengimplementasian logika fuzzy ke dalam database (fuzzifikasi database).
3.
Membuat suatu perangkat lunak yang dapat melakukan proses seleksi dalam memilih mahasiswa yang layak direkomendasikan untuk menerima beasiswa.
4.
Memenuhi salah satu syarat untuk menyelesaikan pendidikan program sarjana Teknik Elektro di Universitas Sumatera Utara.
1.3.
Rumusan Masalah Dalam pengembangan sistem untuk perekomendasian beasiswa ini, database
mahasiwa dibangun dengan menggunakan MySQL Server 5. Data-data yang disimpan di dalam sistem database ini adalah data-data yang bersifat crisp, sehingga hal pertama yang harus dilakukan adalah memfuzzifikasi data-data tersebut. Untuk proses fuzzifikasi data dan tampilan bagi pengguna dibangun dengan menggunakan bahasa program Java dengan acuan Java Standard Edition versi 6.0 (Mustang). Untuk proses fuzzifikasi ada beberapa tahapan yang harus dilakukan, yaitu menentukan fungsi keanggotaan, menentukan himpunan fuzzy, dan menentukan domain untuk masing-masing himpunan.
12
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
MySQL dan JDK 6.0 adalah dua aplikasi yang berbeda, jadi untuk menjembatani interkoneksi diantara kedua aplikasi ini harus mengunakan driver yang tepat. Selain itu, tipe data pada MySQL dan Java juga berbeda, jadi harus dilakukan konversi tipe data yang benar agar data-data yang disimpan dalam database dapat diakses dan diproses oleh Java. Untuk memanipulasi data pada sistem database dari aplikasi berbasis Java juga harus dilakukan dengan membuat sebuah obyek dan kelas untuk menjalankan query dan menampung nilai. Proses selanjutnya setelah fuzzifikasi adalah perhitungan fire strength untuk masing-masing variabel dan himpunan fuzzy, dari proses inilah nantinya sistem akan memberikan nilai derajat perekomendasian bagi mahasiswa untuk penerimaan beasiswa.
1.4.
Batasan Masalah Berdasarkan kompleksitas masalah pada pengimplementasian logika fuzzy ke
dalam sistem database, maka penulis perlu membatasi masalah yang akan dibahas. Adapun batasan-batasan masalah dalam Tugas Akhir ini adalah : 1.
Query yang dilakukan tidak menangani data dari tabel yang berbeda.
2.
Variabel-variabel penilaian dibatasi hanya pada besaran IPK,TOEFL, absensi, dan gaji orang tua.
3.
Ukuran database tidak terlalu besar, hanya sebatas simulasi perangkat lunak saja.
4.
Aplikasi logika fuzzy yang dirancang ini tidak memakai pembobotan nilai pada suatu variabel atau himpunan.
13
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
1.5.
Metodelogi Penulisan Metodelogi dalam penulisan tugas akhir ini terdiri dari beberapa tahapan,
yaitu : 1.
Perancangan Database Pada tahap ini dilakukan pembangunan database yang terdiri dari 3 database, yaitu database mahasiswa, temporari, dan hasil. Database mahasiswa berisikan data-data mahasiswa, database temporari adalah database yang akan menyimpan nilai-nilai derajat keanggotaan masingmasing mahasiswa
untuk himpunan fuzzy yang didefinisikan
pengguna. Sedangkan database hasil adalah database yang menyimpan nilai derajat perekomendasian hasil perhitungan fire strength dari nilainilai yang ada di dalam database temporari. 2.
Perancangan Sistem Pada tahap ini dilakukan perancangan sistem yang akan dibangun, meliputi disain user interface, fitur-fitur yang disediakan aplikasi, penanganan koneksi dengan sistem database, dan keterbatasan sistem.
3.
Fuzzifikasi Data Pada tahapan ini aplikasi yang dibangun akan melakukan koneksi dengan sistem database, melakukan pengaksesan data dan mengambil data tersebut untuk difuzzifikasi. Yaitu dengan melakukan perhitungan nilai derajat keanggotaan sesuai dengan fungsi keanggotaan dan himpunan fuzzy yang didefinisikan pengguna. Kemudian aplikasi akan mengembalikan nilai perhitungan derajat keanggotaan tersebut ke dalam sistem database.
14
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
4.
Perhitungan Fire Strength Nilai derajat keanggotaan yang dikembalikan oleh aplikasi ke dalam sistem database dikelompokkan menjadi 4 varibel fuzzy yaitu IPK, TOEFL, ABSENSI, dan GAJI_ORTU. Kemudian nilai-nilai ini akan dikombinasikan dan dimanipulasi dengan operator Zadeh untuk mendapatkan nilai fire strength, yaitu nilai yang dijadikan sebagai nilai derajat perekomendasian mahasiswa dalam penerimaan beasiswa. Semakin tinggi nilainya, maka derajat perekomendasiannya juga semakin besar.
5.
Pengujian Sistem Pada tahapan ini dilakukan percobaan terhadap aplikasi yang telah dibangun, yaitu dengan melakukan dua kali percobaan. Percobaan pertama dilakukan tanpa mengubah nilai domain himpunan serta dengan menggunakan operator OR pada masing-masing variabel fuzzy. Sedangkan pada percobaan kedua dilakukan dengan mengubah nilai domain masing-masing himpunan serta melakukan operasi dengan mengkombinasikan operator AND dan OR.
15
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
1.6.
Sistematika Penulisan BAB I : PENDAHULUAN Bab ini berisi latar belakang, tujuan penulisan, rumusan permasalahan, batasan masalah, metodologi penulisan, serta sistematika penulisan. BAB II : LANDASAN TEORI Bab ini membahas tentang teori-teori
pendukung dalam
pembuatan aplikasi ini, yaitu teori mengenai logika fuzzy, database relasional, dan konsep tentang fuzzifikasi database. Selain itu pada bab ini juga dipaparkan secara ringkas mengenai tools pengembangan aplikasi, yaitu Java (JDK 6.0), MySQL Server 5, dan IDE NetBeans 5.5. BAB III : PERANCANGAN DAN PEMBANGUNAN APLIKASI Bab ini membahas tentang perancangan dan pembangunan aplikasi, mencakup perancangan database, perancangan sistem, programming, serta GUI (Graphical User Interface ). BAB IV : UJI COBA DAN ANALISA Pada bab ini diuraikan mengenai uji coba pada aplikasi yang telah dibuat serta melakukan analisa terhadap hasil yang diperoleh. BAB V : PENUTUP Dalam bab penutup ini, berisi kesimpulan dari hasil yang telah dikerjakan berdasarkan uji coba dan analisa
yang dilakukan.
Selain itu , juga berisi saran serta petunjuk pengembangan bagi penyempurnaan proyek Tugas Akhir ini.
16
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
BAB II LANDASAN TEORI
2.8
Logika Fuzzy Sistem fuzzy dicetuskan oleh Lotfi A. Zadeh pada tahun 1960, konsep ini
pada dasarnya berhubungan dengan bagaimana manusia menangani ketidakpastian (imprecise) dan informasi yang tidak pasti (uncertain). Zadeh menirukan bagaimana manusia menggunakan perkiraan dan pertimbangan (approximate reasoning) dalam hal yang berhubungan dengan ketidakpastian, ketidaktepatan, kerancuan (ambiguity), dan ketidakjelasan (vagueness) yang dialami dalam pengambilan keputusan. Logika fuzzy adalah superset (bagian yang melingkupi) logika bolean yang dikembangkan untuk menangani suatu komponen atau informasi secara keseluruhan. Konsep logika fuzzy ini dikembangkan karena beberapa alasan, yang diantaranya adalah : 1.
Keanggotaan suatu elemen terhadap suatu himpunan menjadi “fuzzy” atau “samar”. Dalam hal ini, ada elemen yang posisinya sebagai anggota atau bukan anggota dari suatu himpunan
tidak diketahui
dengan pasti. 2.
Keanggotaan elemen dalam suatu himpunan pasti sangat curam dan mempuyai batasan yang kaku.
Penilaian yang dilakukan dengan logika klasik hanya mungkinkan untuk mengolah informasi yang benar atau salah. Logika ini tidak mampu menangani informasi yang tidak pasti, walaupun di dalam informasi tersebut ada data yang tersimpan. Dalam logika klasik,
keanggotaan suatu elemen dalam himpunan
dipresentasikan dengan 0 bila bukan anggota dan 1 bila merupakan anggota. Jadi
17
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
himpunannya adalah {0,1}. Sedangkan pada logika fuzzy nilai kenggotaan ada pada interval [0,1]. Jadi pada dasarnya sistem fuzzy merupakan gagasan aproksimasi yang didasarkan pada gagasan eksak.
2.8.1 Himpunan Fuzzy Himpunan fuzzy secara formal dapat didefinisikan seperti pada Persamaan 2.1 berikut : A = {µ A ( x) / x : x ∈ X , µ A ( x) ∈ [0,1] ∈ ℜ} ………....(2.1) Dimana µ A (x) adalah derajat keanggotaan elemen x pada himpunan fuzzy A dengan cakupan nilai keanggotaan antara 0 dan 1 yang merupakan anggota bilangan real. Dimana bila µ A (x) = 0, mengindikasikan bahwa x bukan bagian dari himpunan fuzzy A dan sebaliknya jika µ A (x) = 1, maka x adalah bagian dari himpunan fuzzy A. Secara umum, himpunan fuzzy A dapat dianggap sebagai fungsi µ A (x) yang mencocokkan setiap elemen dari semesta pembicaraan X dengan derajat keanggotaan menjadi anggota himpunan A. Jika fungsi keanggotaan hanya menghasilkan nilai keanggotaan {0,1}, maka hasilnya bukanlah fuzzy melainkan tegas (crisp). Pada himpunan tegas (crisp) nilai keanggotaan suatu item x dalam suatu himpunan
A,
yang
sering
ditulis
dengan
µ A (x) ,
ha nya memiliki
2
kemungkinan yaitu 0 dan 1. Sebagai contoh, misalkan variabel umur dibagi menjadi 3 kategori, yaitu:
•
MUDA
umur < 35 tahun
•
PAROBAYA
35
•
TUA
umur
umur
18
55 tahun
55 tahun
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Nilai keanggotaan secara grafis, himpunan MUDA, PAROBAYA, dan TUA ini dapat dilihat pada Gambar 2.1.
Gambar 2.1 Himpunan MUDA, PAROBAYA, dan TUA.
Pada Gambar 2.1, dapat dilihat bahwa: 1. Apabila
seseorang
berusia
34
tahun,
maka
ia
dikatakan
MUDA
( MUDA[34] = 1); 2. Apabila seseorang berusia 35 tahun, maka ia dikatakan TIDAK MUDA
MUDA[35] = 0); 3. Apabila seseorang berusia 35 tahun kurang 1 hari, maka ia dikatakan TIDAK PAROBAYA ( PAROBAYA[35 th – 1 hari] = 0). Berdasarkan contoh diatas bisa dikatakan pemakaian himpunan crisp untuk menyatakan umur sangat tidak adil, adanya perubahan sedikit saja pada nilai elemen mengakibatkan perbedaan kategori yang cukup signifikan. Himpunan fuzzy digunakan untuk mengantisipasi hal tersebut. Seseorang dapat masuk dalam 2 himpunan yang berbeda, MUDA dan PAROBAYA, PAROBAYA dan TUA, dsb. Seberapa besar eksistensi elemen yang ditinjau tersebut
dapat ditentukan dan diukur dengan
dalam
nilai derajat keanggotaannya.
Gambar 2.2 menunjukkan himpunan fuzzy untuk variabel umur.
19
himpunan
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Gambar 2.2 Himpunan Fuzzy untuk Variabel Umur
Pada Gambar 2.2, dapat dilihat bahwa: 1. Seseorang yang berumur 40 tahun, termasuk dalam himpunan MUDA dengan
MUDA[40]=0,25; namun dia juga termasuk dalam himpunan
PAROBAYA dengan PAROBAYA[40]=0,5. 2. Seseorang yang berumur 50 tahun, termasuk dalam himpunan MUDA dengan
TUA[40]=0,25; namun dia juga termasuk dalam himpunan
PAROBAYA dengan PAROBAYA[50]=0,5. Kalau dalam himpunan crisp nilai keanggotaannya hanya ada 2 kemungkinan, yaitu 0 atau 1. Sedangkan pada himpunan fuzzy nilai keanggotaan terletak pada rentang 0 sampai 1. Apabila x memiliki nilai keanggotaan fuzzy A[x]=0 berarti x tidak menjadi anggota himpunan A, demikian pula apabila x memiliki nilai keanggotaan fuzzy
A[x]=1 berarti x menjadi anggota penuh pada himpunan A.
Terkadang kemiripan antara keanggotaan fuzzy dengan probabilitas menimbulkan kerancuan. Keduanya memiliki nilai pada interval [0,1], namun interpretasi nilainya sangat berbeda. Keanggotaan fuzzy memberikan suatu ukuran terhadap pendapat atau keputusan, sedangkan probabilitas mengindikasikan proporsi
20
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
terhadap keseringan suatu hasil bernilai benar dalam jangka panjang (tinjauan). Misalnya, jika nilai keanggotaan suatu himpunan fuzzy MUDA adalah 0,9; maka tidak perlu dipermasalahkan berapa seringnya nilai itu diulang secara individual untuk mengharapkan suatu hasil yang hampir pasti MUDA. Di lain pihak, nilai probabilitas 0,9 MUDA berarti 10% dari himpunan tersebut diharapkan tidak MUDA. Himpunan fuzzy memiliki 2 atribut, yaitu : 1. Linguistik, yaitu penamaan suatu grup yang mewakili suatu keadaan atau kondisi tertentu dengan menggunakan bahasa alami, seperti : MUDA, PAROBAYA, dan TUA 2. Numeris, yaitu suatu nilai (angka) yang menunjukkan ukuran dari suatu variabel seperti : 40, 25, 50, dan sebagainya. Ada beberapa hal yang perlu diketahui dalam memahami sistem fuzzy, yaitu : 1. Variabel Fuzzy Variabel fuzzy merupakan variabel yang hendak dibahas dalam suatu sistem fuzzy. Contoh : umur, temperatur, permintaan, dan lain-lain. 2. Himpunan Fuzzy Himpunan fuzzy merupakan suatu grup yang mewakili suatu kondisi atau keadaan tertentu dalam suatu variabel fuzzy. Contoh : Variabel temperatur terbagi menjadi 5 himpunan fuzzy, yaitu : DINGIN, SEJUK, NORMAL, HANGAT, dan PANAS. (Gambar 2.3)
21
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Gambar 2.3 Himpunan Fuzzy pada Variabel Temperatur
3. Semesta Pembicaraan Semesta pembicaraan adalah keseluruhan nilai yang diperbolehkan untuk dioperasikan dalam suatu variabel fuzzy. Semesta pembicaraan merupakan himpunan bilangan real yang senantiasa naik (bertambah) secara monoton dari kiri ke kanan atau sebaliknya. Nilai semesta pembicaran dapat berupa bilangan positif maupun negatif. Contoh semesta pembicaan :
•
Semesta pembicaraan untuk variabel umur : [0 + ]
•
Semesta pembicaraan untuk variabel temperature : [0 40]
4. Domain Domain himpunan fuzzy adalah keseluruhan nilai yang diizinkan dan boleh dioperasikan dalam suatu himpunan fuzzy. Seperti halnya semesta pembicaraan, domain merupakan himpunan bilangan real yang senantiasa naik (bertambah) secara monoton dari kiri ke kanan. Nilai domain dapat berupa bilangan positif maupun negative. Contoh domain himpunan fuzzy:
•
MUDA
= [0 35]
•
PAROBAYA
= [35 55]
•
TUA
= [55 + ]
22
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
2.8.2 Fungsi Keanggotaan Fungsi keanggotaan (membership function) adalah suatu kurva yang menunjukkan pemetaan titik-titik input data ke dalam nilai keanggotaannya (sering juga disebut dengan derajat keanggotaan) yang memiliki interval antara 0 sampai 1. Salah satu cara yang dapat digunakan untuk mendapatkan nilai keanggotaan adalah dengan melalui pendekatan fungsi. Ada beberapa fungsi yang dapat digunakan.
a.
Representasi Linear Pada
representasi
linear, pemetaan data
input digambarkan
sebagai
suatu garis lurus ke derajat keanggotaannya. Bentuk ini paling sederhana dan menjadi pilihan yang baik untuk pendekatan suatu konsep yang kurang jelas. Ada 2 keadaan himpunan fuzzy linear, yaitu: 1. Representasi Linear Naik Kenaikan himpunan dimulai pada nilai domain yang memiliki derajat keanggotaan nol (0) bergerak ke kanan menuju ke nilai domain yang memiliki derajat keanggotaan lebih tinggi (Gambar2.4).
Gambar 2.4 Representasi Linier Naik
23
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Persamaan fungsi keanggotaannya seperti terlihat pada Persamaan 2.2 berikut ini :
µ[ x]
0; jika x ≤ a ( x − a ) /(b − a ); jika a ≤ x ≤ b
………...(2.2)
2. Representasi Linear Turun Representasi linear turun merupakan kebalikan dari linear naik. Garis lurus
dimulai
dari
nilai
domain
dengan
derajat keanggotaan
tertinggi pada sisi kiri, kemudian bergerak menurun ke nilai domain yang memiliki derajat keanggotaan lebih rendah (Gambar 2.5).
Gambar 2.5 Representasi Linier Turun
Persamaan fungsi keanggotaannya seperti terlihat pada Persamaan 2.3 berikut ini :
µ[ x]{(b − x) /(b − a ); jika a ≤ x ≤ b …………….(2.3)
24
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
b.
Representasi Kurva Segitiga Kurva segitiga pada dasarnya merupakan gabungan antara 2 garis linear
seperti terlihat pada Gambar 2.6.
Gambar 2.6 Representasi Kurva Segitiga
Persamaan fungsi keanggotaannya seperti pada Persamaan 2.4 berikut ini
0; x ≤ a atau x ≥ c : µ[ x] ( x − a ) /(b − a ); a ≤ x ≤ b ……………(2.4) (c − x ) /(c − b); b ≤ x ≤ c
c.
Representasi Kurva Trapesium Kurva trapesium pada dasarnya seperti bentuk segitiga, hanya saja ada
beberapa titik yang memiliki nilai keanggotaan 1 seperti terlihat pada Gambar 2.7.
Gambar 2.7 Representasi Kurva Trapesium
25
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Persamaan fungsi keanggotaannya seperti pada Persamaan 2.5 berikut ini :
0; x ≤ a atau x ≥ d
µ[ x]
d.
( x − a ) /(b − a ); a ≤ x ≤ b 1; b ≤ x ≤ c (d − x) /(d − c); c ≤ x ≤ d
…………….(2.5)
Representasi Kurva Bahu Representasi fungsi keanggotaan fuzzy dengan menggunakan kurva bahu
pada dasarnya adalah gabungan dari kurva segitiga dan kurva trapesium. Daerah yang terletak di tengah-tengah kurva bahu ini, direpresentasikan dengan fungsi keanggotaan segitiga, pada sisi kiri dan kanannya nilai keanggotan akan naik dan turun. Tetapi terkadang pada salah sisi dari variabel fuzzy yang ditinjau ini terdapat nilai yang konstan, yaitu pada himpunan ekstrim kiri dan ekstrim kanan. Hal ini dapat dilihat pada Gambar 2.8.
Gambar 2.8 Representasi Kurva Bahu
26
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
2.8.3 Operator Dasar Zadeh untuk Operasi Himpunan Fuzzy Ada beberapa operasi yang didefinisikan
secara
khusus
untuk
mengkombinasi dan memodifikasi himpunan fuzzy. Nilai keanggotaan sebagai hasil dari operasi 2 himpunan sering dikenal dengan nama fire strength atau -predikat. Ada 3 operator dasar yang dicptakan oleh Zadeh, yaitu: 1. Operator AND Operator ini berhubungan dengan operasi interseksi pada himpunan. predikat sebagai hasil operasi dengan operator AND diperoleh mengambil
nilai
keanggotaan
terkecil
dengan
antar elemen pada himpunan-
himpunan yang bersangkutan. Persamaan nilai keanggotaannya terlihat pada Persamaan 2.6 berikut ini :
A B = min( A[x], B[y]) …………(2.6) 2. Operator OR Operator ini berhubungan dengan operasi union pada himpunan. predikat sebagai hasil operasi dengan operator OR diperoleh mengambil
nilai
keanggotaan
terbesar
-
dengan
antar elemen pada himpunan-
himpunan yang bersangkutan. Persamaan nilai keanggotaannya terlihat pada Persamaan 2.7 berikut ini :
AUB = max( A[x], B[y]) …………(2.7) 3. Operator NOT Operator ini berhubungan dengan operasi komplemen pada himpunan. predikat sebagai hasil operasi dengan operator NOT diperoleh mengurangkan
nilai
keanggotaan
elemen
dengan
pada himpunan yang
bersangkutan dari 1. Persamaan nilai keanggotaannya terlihat pada Persamaan
27
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
2.8 berikut ini : A’
= 1- A[x] ..……………(2.8)
Contoh : Misalkan nilai keanggotaan 27 tahun pada himpunan MUDA adalah 0,6 (
MUDA
[27]=0,6); dan nilai keanggotaan Rp. 2.000.000 pada himpunan
pengahasilan TINGGI adalah 0,8 ( GAJITINGGI[2 x 106 ]=0,8); maka : 1. Nilai -predikat untuk usia MUDA dan berpenghasilan TINGGI adalah : MUDA GAJITINGGI
= min(
MUDA
[27],
GAJITINGGI[2
x 106 ] )
= min(0,6;0,8) = 0,6 2. Nilai -predikat untuk usia MUDA atau berpenghasilan TINGGI adalah :
MUDAUGAJITINGGI
= max(
MUDA
[27],
GAJITINGGI[2
x 106 ] )
= max(0,6;0,8) = 0,8 3. Nilai -predikat untuk usia TIDAK MUDA adalah : MUDA
= 1-
MUDA
[27]
= 1- 0,6 = 0,4
2.9
Database Relasional Database adalah kumpulan data yang terstruktur. Data sendiri merupakan
fakta mengenai obyek yang dinyatakan dengan nilai (angka, deretan karakter, atau simbol). Database bertujuan untuk mengatur data sehingga diperoleh kemudahan,
28
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
ketepatan, dan kecepatan dalam mengambil kembali data. Database dapat didefinisikan dalam berbagai sudut pandang, diantaranya adalah seperti berikut : 1.
Himpunan kelompok data yang saling berhubungan dan terorganisasi sedemikian rupa sehingga kelak dapat dimanfaatkan dengan cepat dan mudah.
2.
Kumpulan data yang saling berhubungan, disimpan secara bersamaan sedemikian rupa tanpa pengulangan (redudancy) untuk memenuhi kebutuhan.
3.
kumpulan file/ tabel/ arsip yang saling berhubungan serta disimpan dalam media penyimpan elektronik.
Sistem database yang terorganisir dengan baik dan handal, merupakan perpaduan antara data, perangkat keras (hardware),
sistem operasi, database
management system (DBMS), dan user. Salah satu model database yang umum dan sering dipakai karena kehandalan dan kelebihan-kelebihannya adalah relational database model (model database relasional) Konsep database relasional pertama kali diperkenalkan oleh E.F. Codd pada tahun 1970-an dalam sebuah artikel yang ditulisnya dengan judul “Association of Computer for Large Shared Data Banks”. Model relasional merupakan kumpulan dari tabel yang dipakai untuk merepresentasikan relasi diantara data, dimana tabeltabel tersebut tersusun dengan suatu aturan logis. Di dalam konsep relasional, database mempunyai suatu struktur yang menggambarkan keterkaitan (integritas) diantara elemen-elemen penyusun database. Integritas data tersebut dipertahankan oleh sebuah komponen yang dinamakan kunci (key), yang dalam implementasinya key ini mempunyai penjabaran dan tipe lebih lanjut.
29
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Dalam pengembangan sistem database dengan model relasional ada dua hal yang menjadi acauan dalam pelaksanaannya, yaitu : 1. Entity Relationship Diagram (ERD) 2. Normalisasi Database
2.9.1 Entity Relationship Diagram (ERD) Untuk memudahkan pendeskripsian relasi diantara elemen-elemen peyusun database, cara yang sering dipakai adalah dengan menggunakan entity relationship diagram (ERD). Dengan metode ini pengembang dapat lebih mudah dalam merancang sistem database serta relasi diantara entity-entity
penyusun database
dapat digambarkan dengan lebih jelas kepada pengguna. Terdapat tiga notasi dasar yang bekerja pada model E-R, yaitu : entity, relationship, dan attribute. Sebuah entity adalah sebuah benda atau obyek di dunia nyata yang dapat dibedakan dari semua obyek lainnya. Entity set adalah sekumpulan entity yang mempuyai tipe yang sama. Entity set dilambangkan dengan bentuk persegi panjang. Relationship adalah hubungan diantara beberapa entity dan dilambangkan dengan bentuk diamond (ketupat). Sedangkan attribute merupakan istilah yang dipakai untuk menyatakan atau mengelompokkan suatu entity. Attibute dalam ERD dilambangkan dengan bentuk elips. Ada beberapa istilah yang harus difahami sebelum merancang database dengan model entity relationship diagram ini, diantaranya adalah : 1.
Super Key Satu atau lebih atribut (kumpulan atribut) yang dapat membedakan
30
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
setiap baris data dalam tabel secara unik, di mana tidak mungkin terjadi pengulangan atau nilai yang sama dibaris berikutnya. 2.
Kandidat Key Kumpulan atribut minimal yang membedakan setiap baris data dalam tabel secara unik. Untuk bisa menjadi kandidat key, suatu atribut harus memenuhi persyaratan sebagai berikut : a.
Untuk satu nilai hanya mengindentifiasikan satu baris dalam satu relasi (unik).
3.
b.
Tidak memiliki subset yang juga merupakan primary key.
c.
Tidak dapat bernilai null.
Primary Key Nilai dari primary key harus mengidentifikasikan sebuah baris secara unik di dalam suatu relasi. Primary key boleh terdiri dari satu atau lebih atribut relasi dengan syarat harus memenuhi persyaratan sebagai kandidat key.
4.
Alternatif Key Adalah kunci yang tidak ada di dunia nyata, tetapi diadakan dan dijadikan primary key. Kunci ini dibuat ketika tidak ada satupun atribut dalam sebuah relasi yang bisa mewakili relasi tersebut atau kandidat key yang ada tidak efektif untuk digunakan.
5.
Koposit Key Primary key yang terdiri lebih dari satu kunci.
31
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
6.
Foreign Key(FK) Kunci ini bukan merupakan kunci dari tabel yang diacu melainkan kunci dari tabel lain.
7.
Kardinalitas Pemetaan Kardinalitas pemetan atau rasio kardinalitas menunjukkan jumlah entity yang dihubungkan ke satu entity lain dengan suatu relationship set .
2.9.2 Normalisasi Database Salah satu tofik yang cukup kompleks dalam dunia manajemen database relasional adalah proses untuk menormalisasi tabel-tabel dalam database. Alasan utama melakukan normalisasi adalah untuk membentuk database yang efektif, efisien, dan handal. Untuk menghilangkan insertion anomalies, deletion anomalies, dan update anomalies, normalisasi yang harus dilakukan minimal sampai tahapan ketiga. Normalisasi merupakan pendekatan dalam membangun struktur logika database relasional yang secara langsung berkaitan dengan kinerja database. Dalam membangun struktur logika data, dapat dilakukan dengan langsung menggunakan prinsip-prinsip normalisasi atau melakukan transformasi dari model E-R ke dalam bentuk tabel. Dalam perspektif normalisasi sebuah database dikatakan baik jika setiap tabel yang membentuk database tersebut sudah dalam keadaan normal. Suatu tabel dikatakan normal jika memenuhi kriteria sebagai berikut : 1.
Jika ada dekomposisi/ penguraian tabel, maka dekomposisinya dijamin aman (lossless-join decomposition).
32
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
2.
Terpeliharanya ketergantungan fungsional (functional dependency) pada saat perubahan data.
3.
Tidak melanggar Boyce Code Normal Form (BCNF), jika tidak memungkinkan minimal tidak melanggar sampai bentuk normal ketiga.
Tahapan-tahapan dalam melakukan normalisasi terhadap database adalah : 1.
Bentuk normal pertama (1st normal form) Sebuah tabel dikatakan 1NF jika tidak ada duplikasi baris dalam tabel dan masing-masing cell bernilai tunggal. Kemudian semua atribut yang ada harus bergantung pada primary key.
2.
Bentuk normal kedua (2nd normal form) Bentuk normal kedua terpenuhi jika pada sebuah tabel semua atribut yang tidak termasuk primary key memiliki ketergantungan fungsional terhadap primary key secara utuh, tidak ada ketergantungan parsial.
3.
Bentuk normal ketiga (3rd normal form) Sebuah tabel dikatakan memenuhi bentuk normal ketiga (3NF) jika tidak terdapat ketergantungan transitif, dimana atribut bukan kunci tidak boleh bergantung pada atribut lainnya.
2.10
Fuzzifikasi Database Database relasional telah terbukti sebagai model database yang paling handal
dan dipakai pada bermacam aplikasi sistem informasi dengan sukses. Tetapi bagaimanapun juga, sistem database
relasional yang diperkenalkan oleh Codd
(1970) tidak dapat menangani data yang ambigu. Data yang ditangani harus
33
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
merupakan data yang pasti atau bernilai kosong (null). Padahal dalam realita kehidupan sekarang ini sering kali dibutuhkan data yang samar dan melibatkan banyak variabel yang tidak pasti sebagai acuan dalam proses pengambilan keputusan. Sejak awal dekade 1980-an, penelitian tentang implementasi pemakaian kaedah logika fuzzy ( kaedah fuzzy diperkenalkan oleh Zadeh pada tahun 1965) telah dilakukan untuk pengembangan
berbagai macam model database. Tujuan dari
pemakaian logika fuzzy tersebut dalam pemodelan database adalah untuk memperbaharui kemampuan database klasik agar dapat merepresentasikan dan memanipulasi data atau informasi yang tidak pasti dan tidak akurat (ambigu). Ternyata penerapan logika fuzzy ini memberikan kontribusi yang sangat besar terutama pada model data relasional atau yang sejenisnya. Perlu dicatat, bahwa pesatnya perkembangan kemampuan komputasi telah memberikan peluang bagi muculnya apliksai database pada CAD/CAM (Computer Aided Design/ Computer Aided Manufacturer), multimedia, sistem informasi geografis, dan lainya. Untuk pengambilan keputusan berdasarkan data yang ambigu, teknologi atau aplikasi database harus diarahkan tidak hanya mampu menyimpan data mentah saja. Tetapi lebih kepada kemampuan penanganan informasi ambigu yang integral, di mana dimungkinkan interprestasi data ambigu menjadi bagian dari proses pengambilan keputusan. Sebagai contoh, suatu seleksi penerimaan beasiswa mensyaratkan bahwa yang diterima adalah pelajar yang umurnya masih “MUDA” dan memiliki indeks prestasi yang “BAIK”. Maka untuk interprestasi pernyataan tersebut dalam aplikasi sistem database yang ada sekarang ini tidak dapat dilakukan, hal ini karena adanya kerancuan dalam mendefinisikan data yang dikatagori MUDA dan klasifikasi IPK-nya BAIK.
34
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Kelemahan dalam sistem database ini dapat diatasi dengan melakukan fuzzifikasi database, yaitu dengan mengimplementasikan logika fuzzy kedalam sistem database. Dengan metode ini mekanisme seleksi yang dilakukan dalam sistem database tidak lagi dilakukan secara tegas. Tetapi akan memberikan pendekatan seleksi yang lebih menekankan pada derajat keanggotaan suatu elemen pada himpunan yang diinginkan. Sebagai contoh apabila pada sistem database diberikan query sebagai berikut : SELECT * FROM MAHASISWA WHERE IPK=BAIK Maka yang diberikan oleh aplikasi adalah mahasiswa-mahasiswa yang memiliki nilai derajat keanggotan pada himpunan IPK berkategori BAIK dengan rentang nilai keangotaan antara 0 sampai 1. Jadi semakin tinggi nilai derajat keanggotaan, maka kelekatan si mahasiswa sebagai mahasiswa dengan kategori memiliki IPK yang BAIK akan semakin besar. Sehingga untuk beberapa mahasiswa yang masuk dalam kategori ini akan memiliki nilai derajat keanggotaan yang berbeda-beda, dengan pengecualian memiliki IPK yang sama. Jadi dengan memanfaatkan nilai derajat keanggotaan elemen atau entitas terhadap suatu himpunan yang didefinisikan, maka walaupun tanpa mengimplementasikan sistem inferensi fuzzy (penalaran), sistem ini dapat dimanfaatkan untuk membantu dalam proses pengambilan keputusan (Decision Support System). Dalam perkembangannya, sistem aplikasi database yang mampu menangani data-data ambigu telah diimplementasikan secara luas. Misalnya, pada area dimana data-data ambigu bukan hanya hal yang sudah biasa tetapi merupakan sesuatu yang penting. Seperti pada bidang diagnosa kesehatan, invesatasi dan kecerdasan buatan. Salah satu hal yang menjadi perhatian utama dalam implementasi fuzzy database
35
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
adalah efisiensi. Sistem haruslah cukup cepat untuk berinteraksi dengan manusia sebagai penggunanya. Secara umum, ada 2 cara untuk mengimplementasikan logika fuzzy dalam database. Yaitu : 1. Fuzzy Query pada Database : Yaitu dengan menghimpun data kepada suatu himpunan fuzzy berdasarkan nilai derajat keanggotan. 2. Fuzzy Ekstension Database : adalah dengan memasukkan informasi fuzzy pada database.
2.10.1 Fuzzy Query pada Database Fuzzy query database adalah membuat suatu fuzzy query terhadap database klasik. Yaitu, dengan membuat aplikasi yang dapat menangani query dimana dalam query tersebut terdapat variabel yang bernilai fuzzy atau dengan kata lain query tersebut memiliki variabel linguistik. Sedangkan data pada database yang akan diakses merupakan data yang crispy. Misalnya sebagai contoh, suatu sistem yang akan dibangun memiliki data-data sebagai mana terlihat pada Tabel 2.1.
Tabel 2.1 : Contoh database crispy Nama
Umur
Absensi
Nilai
Budi
19
4
83
Ahmad
17
2
80
Dian
18
3
50
Rojak
16
1
56
Ali
19
2
65
36
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Dari Tabel 2.1, maka grafik fungsi keanggotaan umurnya adalah seperti terlihat pada Gambar 2.9.
Gambar 2.9 Fungsi keanggotaan Fuzzy ABG
Berdasarkan data yang ada dalam database dan fungsi keanggotaan yang ada, maka salah satu contoh fuzzy query-nya adalah : SELECT NAMA FROM TABLE WHERE UMUR = ‘ABG’ AND NILAI < 80 Dari query di atas, terlihat bahwa pada pernyataan WHERE terdapat variabel yang memiliki nilai linguistik yaitu UMUR. Maka NAMA yang akan ditampilkan adalah pelajar dengan derajat keanggotaan UMUR dari himpunan fuzzy.
2.10.2 Fuzzy Ekstension Database Fuzzy database adalah teknik penanganan informasi fuzzy dengan memasukkan langsung nilai lingustik ke dalam database setelah melalui proses perhitungan nilai derajat keanggotaan. Sebagai contoh dari Tabel 2.1 setelah perhitungan fungsi keanggotaan, nilai lingustik dimasukkan ke dalam tabel itu sendiri. Hal ini terlihat pada Tabel 2.2.
37
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Tabel 2.2 : Contoh Fuzzy Database
2.11
Nama
Umur
Absensi
Nilai
Budi
Dewasa
4
Tinggi
Ahmad
ABG
2
Tinggi
Dian
Sedang
3
Rendah
Rojak
ABG
1
Rendah
Ali
Dewasa
2
Rata-rata
MySQL MySQL adalah sebuah program database server yang mampu menerima dan
mengirimkan datanya dengan cepat, multi user serta menggunakan perintah standar SQL. MySQL memiliki dua bentuk lisensi, yaitu FreeSoftware dan Shareware. MySQL yang biasa digunakan adalah MySQL FreeSoftware yang berada di bawah lisensi GNU/GPL (General Public License). Sebagai database server yang free, artinya MySQL dapat secara bebas digunakan untuk kepentingan pribadi atau usaha. Selain sebagai server, MySQL dapat juga berperan sebagai client sehingga sering disebut database client/ server. Pada mulanya MySQL hanya berjalan di bawah platform Unix, tetapi pada perkembangannya muncul beberapa distro yang mampu berjalan pada beberapa platform yang sifatnya shareware dan corporate seperti untuk Linux dan Window. Di dalam sistemnya, MySQL merekam semua data user dalam sebuah tabel user yang berada pada database bernama mysql untuk penanganan hak-hak akses user. Sebagai database server, MySQL mampu menangani beberapa aplikasi berupa
38
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
program kompiler maupun bahasa Scripting Server Site seperti PHP, Perl, CGI, dan Java untuk mengakses data yang disimpannya. Kelebihan yang ditawarkan oleh MySQL sebagai Relational Database Management System (RDBMS) adalah : 1. MySQL
adalah
sebuah
software
opensource
dengan
kapasitas
2. MySQL merupakan database client/server yang multiusers,
sehingga
penyimpanan data hingga berukuran terabytes.
sebagai server dapat terhubung ke media internet untuk eksplorasinya. Sedangkan sebagai client dapat melakukan query untuk mengakses database server. Selain itu dapat digunakan oleh banyak pengguna sekaligus. 3. MySQL didukung oleh ODBC (Open Database Connectivity), artinya databasenya dapat diakses aplikasi apasaja seperti Java, Delphi dan Visual Basic.
2.12
Bahasa Java Java merupakan bahasa pemrograman yang dikembangkan oleh Sun
Microsystem. Bahasa Java dirancang sedemikian rupa agar perangkat lunak yang dibuat menggunakan bahasa Java dapat berjalan pada semua platform (platform independence). Ini berati bahwa sekali suatu program ditulis atau aplikasi dibangun maka dapat dijalankan pada berbagai sistem operasi sebagaimana mestinya, tanpa perlu melakukan kompilasi ulang. Java termasuk salah satu bahasa yang menerapkan konsep pemrograman berorientasi objek (OOP).
39
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Untuk mengembangkan aplikasi berbasis Java, diperlukan Java Development Kit (JDK). Saat ini JDK telah mencapai versi 2 yang dikenal dengan Java 2 Platform. Platform ini dibagi menjadi tiga kategori, yaitu : 1. Java 2 Standard Edition (J2SE). Kategori ini digunakan untuk mengembangkan dan menjalankan aplikasi Java berbasis PC. 2. Java 2 Enterprise Edition (J2EE). Platform ini digunakan untuk mengembangkan aplikasi java dilingkungan enterprise, dengan fungsi-fungsi seperti Enterprise Java Beans (EJB), COBRA, Servlet, dan Java Server Page (JSP). 3. Java 2 Micro Ediion (J2ME) J2ME digunakan untuk mengembangkan dan menjalankan aplikasi Java berbasis handheld devices, seperti Personal Data Assistent (PDA), PocketPC, dan HandPhone.
2.13
IDE NetBeans 5.5 NetBeans sebagai IDE yang ditujukan untuk memudahkan pemrograman Java
telah disosialisasikan dikalangan instruktur Java dari Sun Microsystem pada awal tahun 2006. Dalam NetBeans, pemrograman yang dilakukan berbasis visual dan event-driven seperti pada IDE lainnya seperti Borland Delphi dan Microsoft Visual Studio. NetBeans mencakup compiler atau builder, dan debugger internal. Fitur ini akan sangat memudahkan proses paska perancangan program karena proses deployment dan tes dapat dilakukan dalam satu IDE. NetBeans dirancang untuk memudahkan perancangan dan pemakaian komponen dan mendaftarkannya di dalam palette dari IDE NetBeans. Komponen tersebut nantinya akan dapat dipakai dalam program Java, sehingga pembuatan komponen JavaBeans menjadi sangat mudah.
40
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Tersedia template dan wizard yang dapat dipakai langsung dengan mekanisme drag and drop serta kerangka kode program akan dihasilkan secara auto-generete. NetBeans juga mendukung source-control untuk penulisan program, dalam hal ini dapat dipakai internal VCS (Version Control System) yang telah disediakan (yaitu CVS = Concurent Versioning System), ataupun memakai VCS eksternal. Di dalam NetBeans, semua perancangan dan pemrograman dilakukan di dalam kerangka sebuah proyek. Proyek Netbeans merupakan sekumpulan file yang dikelompokkan di dalam satu kesatuan. File-file ini dapat berada pada satu direktori atau pisah, tergantung dari jenis proyeknya. Ada jenis proyek standar dan ada proyek bebas (free-form). Proyek standar memakai skrip Ant
(otomatis dibuat oleh
NetBeans), sedangkan proyek free-form memakai skrip Ant yang dapat dibuat sendiri. Yang dimaksud dengan skrip Ant disini adalah Jakarta Ant. Ant dibangun oleh Apche Software Foundation (http://ant.apache.org). Ant dipakai untuk otomatisasi tugas-tugas yang rutin dilakukan oleh developer, seperti kompilasi, tes, debug, running, dan packaging. Di sini Ant dipakai untuk mendefinisikan proses build dan run dari proyek. Jakarta Ant sebagai build-tool saat ini boleh dikatakan dominan dalam lingkungan Java/ XML. Ant dibangun dengan Java sehingga memiliki keuntungan bersifat multi-platform sedangkan skripnya ditulis dengan dalam format XML. Untuk membangun aplikasi Java dengan NetBeans pengetahuan tentang Ant bukalah suatu keharusan, karena telah tersedia bermacam-macam template standar yang disajikan dalam bentuk wizard.
41
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
2.14
Java Database Connectivity (JDBC) Pada prinsipnya sembarang server database dapat diakses oleh program Java
asalkan tersedia driver Java Database Connectivity (JDBC) yang sesuai. Dengan bahasa Java pengaksesan terhadap database dapat dilakukan baik secara lokal maupun remote, SQL maupun non-SQL. Java Database Connectivity (JDBC) adalah versi ODBC yang dibuat oleh Sun Microsystems yang sepenuhnya dibangun dengan Java API. Sehingga JDBC memiliki sifat crossplatform-nya Java. Sedangkan ODBC dibangun dengan bahasa C sehingga hanya dapat dijalankan pada platform yang spesifik. Dengan JDBC database-database dari vendor seperti Oracle, Sybase, Informix, dan Interbase dapat diakses dengan syarat ketersedian driver database. Setiap server dari vendor berbeda memerlukan driver berbeda, sedangkan untuk vendor yang telah bekerjasama dengan Java tersedia driver dalam JDBC API yang dapat langsung dipakai. Dengan JDBC perintah-perintah SQL dapat dikirimkan dari Java dan dijalankan oleh Relational Database Management Systems (RDBMS) yang bersangkutan. Kelas-kelas serta interface JDBC API dapat diakses dari dalam paket java.sql (core API) serta javax.sql (standard Extension API). Sedangkan untuk pengembangan aplikasi dilakukan dalam platform Windows dan menggunakan RDBMS MySQL, maka konektor yang dipakai sebagai driver untuk koneksi program Java (melalui JDBC) adalah MySQL Connector/J. Biasanya paket ini didistribusikan dalam bentuk file ZIP yang berisi source serta data biner dalam bentuk JAR. File JAR yang diperlukan untuk mengakses sever MySQL dari program Java umumnya memiliki nama berbentuk “mysql-connector-java-X.Y.Zbin.jar” dimana X.Y.Z merupakan versi dari konektor.
42
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
BAB III PERANCANGAN DAN PEMBANGUNAN SISTEM
3.5
Perancangan Database Database yang digunakan adalah database standar yang umum digunakan
dengan struktur database relasional. Secara keseluruhan ada 3 database yang akan dibuat untuk tujuan dan kegunaan yang berbeda, yaitu database mahasiswa, temporari dan hasil.
3.5.1 Database Mahasiswa Database ini merupakan database yang merekam data-data mahasiswa yang akan diproses. Dalam database ini tabelnya diberi nama MAHASISWA, struktur tabelnya terlihat pada Gambar 3.1 di bawah ini dengan NIM sebagai primary key.
Gambar 3.1 Struktur Tabel MAHASISWA
3.5.2 Database Temporari Database ini berguna untuk menyimpan hasil perhitungan nilai fungsi keanggotaan (membership function) yang telah ditentukan. Dalam database ini terdapat dua tabel yang masing-masing bernama TEMPORARI dan TEMPORARI1.
43
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Tabel TEMPORARI menyimpan data berupa nilai derajat keanggotaan ( µ ) yang bersumber dari pengolahan dengan fungsi keanggotaan dan himpunan fuzzy dari database mahasiswa. Struktur tabelnya tampak seperti pada Gambar 3.2,
kriteria
dari tabel ini adalah : 1. Tabel memiliki kolom NIM yang berelasi dengan kolom NIM pada tabel asal sebagai primary key. 2. Kolom selain kolom NIM, NAMA, dan STATUS merupakan kolom yang berisi nilai keanggotaan ( µ ).
Gambar 3.2 Struktur Tabel TEMPORARI
Tabel yang kedua adalah tabel TEMPORARI1, di dalam tabel ini terdapat kolom DK yang merekam nilai derajat keanggotaan ( µ ) hasil dari operasi himpunan dari kolom DK_IPK dan DK_TOEFL dari TEMPORARI. Sedangkan kolom DK1 merekam nilai derajat keanggotan ( µ ) dari operasi himpunan antara kolom DK_ABSENSI dan kolom DK_GAJI_ORTU. derajat
keanggotaan
final
yang
nantinya
Kemudian untuk mendapat nilai dijadikan
sebagai
nilai
derajat
perkomendasian, didapat dengan melakukan operasi himpunan antara DK dan DK1 dan disimpan di dalam kolom DK_HASIL. Struktur tabel ini tampak pada Gambar 3.3.
44
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Gambar 3.3 Struktur Tabel TEMPORARI1
3.5.3 Database Hasil Database ini akan menyimpan hasil dari seluruh proses yang dilakukan oleh sistem, nama tabel pada database ini adalah HASIL. Dalam tabel ini terdapat NIM mahasiswa yang direkomendasikan beserta nilai derajat perekomendasian yang merupakan hasil dari perhitungan fire strength. Dari tabel ini pengguna dapat melihat mahasiswa-mahasiswa yang direkomendasikan berdasarkan kriteria yang telah dimasukkan. Tabel HASIL hanya terdiri dari 3 kolom, yaitu kolom NIM sebagai primary key, kolom NAMA, dan kolom DERAJAT_PEREKOMENDASIAN.
3.6
Rancangan Sistem Secara umum sistem yang akan dibuat adalah seperti terlihat pada Gambar
3.4, dimana database yang berisi data-data mahasiswa akan dibaca oleh sistem, kemudian setelah ditentukan fungsi keanggotaan dan himpunan fuzzy-nya sistem akan menghitung nilai derajat keanggotaan data. Mekanisme pembacaan datanya dilakukan dengan mengirimkan query dari aplikasi Java ke server MySQL. Data yang telah dibaca kemudian diolah berdasarkan pendefinisikan fungsi keanggotaan dan query data untuk mendapatkan nilai fire strength-nya. Setelah proses tersebut,
45
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
data hasil akan ditampil oleh aplikasi Java dalam bentuk tabel hasil dan dikirimkan kembali ke server database membentuk tabel hasil.
Gambar 3.4 Bagan Sistem
3.6.1 Data Flow Diagram 1.
Konteks Diagram
Konteks diagram sistem adalah seperti terlihat pada Gambar 3.5, Dari konteks diagram terlihat bahwa ada dua entitas luar yang berhubungan dengan sistem ini, yaitu : Mahasiswa dan Pengguna. Dari mahasiswa akan diperoleh data-data mahasiswa. Sedangkan pengguna yang menjalankan sistem dapat menentukan sendiri klasifikasi dari mahasiswa yang akan direkomendasikan, yaitu dengan cara : 1.
Memasukkan variabel fuzzy yang dibutuhkan
2.
Mendefinisikan himpunan fuzzy dari masing-masing variabel fuzzy
3.
Menentukan fungsi keanggotaan dari masing-masing himpunan fuzzy
Kemudian untuk mendapatkan mahasiswa yang direkomendasikan, pengguna dapat memasukkan query yang telah ada pada user interface. Hasil yang diterima oleh
46
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
pengguna adalah tabel yang berisi data mahasiswa yang direkomendasikan berdasarkan variabel fuzzy, himpunan fuzzy, fungsi keanggotaan, dan query yang dimasukkan oleh pengguna.
Gambar 3.5 Konteks Diagram Sistem
2.
Overview Diagram
Overview diagram menunjukkan gambaran proses yang terajadi dalam sistem secara garis besar. Seperti terlihat pada Gambar 3.6. Dari overview diagram tersebut terlihat ada 2 proses yang terjadi, yaitu : 1.
Proses Inisialisasi Pada tahapan ini dilakukan inisialisasi hal-hal yang dibutuhkan oleh sistem.
Dalam proses ini pengguna harus melakukan hal-hal sebagai berikut : a.
Menentukan field (kolom) sebagai sumber data dimana fuzzifikasi database dilakukan. Hal ini diperlukan karena dalam sistem ini terdapat batasan yang salah satunya adalah variabel-variabel fuzzy yang akan fuzzifikasi harus berada pada satu tabel asal yang sama.
47
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
b.
Pendefinisian fungsi keanggotaan himpunan fuzzy. Hal ini bertujuan untuk menentukan tipe pemetaan titik-titik input data ke dalam nilai keanggotaan (derajat keanggotaan).
c.
Mendefinisikan
himpunan
fuzzy
untuk
data-data
yang
akan
difazzifikasi, dalam hal ini pengguna dapat menentukan sendiri himpunannya.
(!
$ !
%& !
!#!
'! %!
!! "#
Gambar 3.6 Overview Diagram Sistem
2.
Proses Fuzzifikasi Untuk proses fuzzifikasi keterlibatan pengguna masih diperlukan, yaitu untuk
memasukkan fuzzy query yang nantinya akan dipakai untuk seleksi data. Untuk lebih detail-nya maka proses fuzzifikasi akan ditampilakan seperti yang terlihat pada Gambar 3.7 dan untuk pemrogramannya dapat dilihat pada Lampiran C.
48
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Dalam proses fuzzifikasi ada beberapa tahapan yang dilakukan, yaitu : a.
Proses perhitungan derajat keanggotaan. Pada proses ini dilakukan perhitungan nilai derajat keanggotaan ( µ ) untuk masing-masing himpunan fuzzy yang ada dalam sistem. Perhitungan nilai ini berdasarkan didefinisikan
tipe oleh
fungsi
keanggotaan
pengguna.
Data
yang
yang
sebelumnya
akan
dihitung
telah nilai
keanggotaannya diklasifikasikan menurut atribut himpunan fuzzy. Kemudian hasilnya akan disimpan dalam tabel TEMPORARI yang ada dalam database temporari sesuai dengan atribut masing-masing kolom yang diproses. Kode program perhitungan nilai derajat keanggotaan ini dapat dilihat pada lampiran D. b.
Proses perhitungan nilai fire strength. Nilai fire strength menunjukkan seberapa besar rekomendasi yang diberikan oleh sistem (fire strength ini memiliki nilai yang berkisar antara 0-1). Nilai 1 menunjukkan rekomendasi penuh, jadi semakin mendekati 1 maka tingkat perekomendasiaan seorang mahasiswa akan semakin tingggi. Namun apabila fire strength mendekati 0, maka mahasiswa tersebut semakin tidak direkomendasikan. Perhitungan fire strength ini membutuhkan data DK ( µ ) dan variabel linguistik dari query yang ada. Selama perhitungan fire strength data hasil akan disimpan langsung pada tabel HASIL di database hasil. Untuk penjelasan tentang perhitungan fire strength ini
dapat dilihat pada subbab yang akan secara khusus
membahas proses perhitungan fire strength. Kode program perhitungan nilai fire strength ini dapat dilihat pada lampiran E.
49
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
c.
Proses menampilkan tabel hasil. Proses ini adalah proses yang terakhir dari rangkaian proses yang dilakukan oleh sistem. Proses ini akan menampilkan tabel hasil yang berisi nilai rekomendasi untuk masingmasing mahasiswa berdasarkan perhitungan perhitungan fire strength.
Gambar 3.7 Detail Diagram Sistem
3.6.2 Batasan-batasan dalam Sistem Batasan-batasan yang ada dalam sistem ini, antara lain adalah : 1.
Derajat keanggotaan disimpan pada kolom (field) dengan atribut umum, sehingga atribut tidak mendefinisikan kategori himpunan dari suatu variabel.
2.
Fungsi keanggotaan yang tersedia hanya kurva bahu.
50
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
3.
Himpunan fuzzy untuk masing-masing variabel fuzzy tidak dinamis, sehingga pengguna tidak dapat menentukan batasan sesuai dengan keinginannya tanpa mengubah sintaks program Java.
4.
Query yang dapat dilakukan hanya dengan statement SELECT.
5.
Variabel fuzzy diasumsikan setara dalam perhitungan fire strength.
3.6.3 Proses Perhitungan Fire Strength Operator yang bisa digunakan untuk menghitung fire strength dalam sistem ini ada dua yaitu AND dan OR. Dalam pengerjaannya sistem akan mengambil operand dan operator sesuai dengan urutan mulai dari yang pertama di sebelah kiri sampai pada yang terakhir disebelah kanan. Sebagai contoh adalah statement linguistic berikut ini : SELECT * FROM TEMPORARI WHERE IPK = ‘BAIK’ AND TOEFL = KURANG’ OR ABSENSI = ‘BAIK’ Maka urutan pengerjaan yang akan dilakukan oleh sistem adalah : 1.
Pertama kali sistem akan mengambil nilai keanggotaan dari variabel fuzzy IPK dengan himpunan fuzzy baik dan variabel fuzzy TOEFL dengan
himpunan
fuzzy
kurang
yang telah
ada
pada
tabel
TEMPORARI. Kemudian melakukan operasi dengan operator AND. Karena operator AND maka yang diambil adalah nilai minimal dari kedua nilai derajat keanggotaan tersebut., kemudian hasilnya akan disimpan dalam tabel TEMP1. 2.
Langkah selanjutnya, hasil dari operasi yang pertama tadi misalnya diberi nama Temp1. Maka selanjutnya sistem akan mengambil nilai
51
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
sementara yang ada pada tabel TEMP1 ini dan melakukan perhitungan fire strength dengan operand (ABSENSI = ‘BAIK’ ) dengan operator selanjutnya (OR) lalu disimpan di tabel TEMP2. 3.
Ketika statement-nya sudah habis, berarti nilai yang dimasukkan ke tabel TEMP2 adalah hasilnya. Maka selanjutnya data tersebut dimasukkan ke tabel HASIL pada database hasil.
3.7
Rancangan Antarmuka Pembuatan antarmuka atau Graphical User Interface
(GUI) serta
pemrograman untuk aplikasi ini menggunakan Java Standard Edition, JDK versi 1.6 (internal-version 1.6, code-name Mustang). Sedangkan sebagai IDE dalam pengembangan ini
digunakan Netbeans 5.5 yang memiliki fitur Matisse GUI-
Builder.
3.7.1 Menu Utama Frame menu utama merupakan tampilan yang disediakan untuk melakukan semua proses yang berhubungan dengan fuzzifikasi dan fuzzy query dalam sistem ini. Dalam frame menu utama seperti terlihat pada Gambar 3.8, terdapat empat tabbedpane yang masing- masing untuk field IPK, TOEFL, ABSENSI, dan GAJI ORANG TUA. Pada tabbedpane ini pengguna harus menentukan fungsi keanggotaan yang akan dipakai dengan memilih fungsi pada combobox Fungsi Keanggotaan dan menentukan himpunan fuzzy untuk masing-masing field dengan mengambil pilihan pada combobox Himpunan.
52
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Gambar 3.8 Menu Utama
Dari frame menu utama ini pengguna dapat melakukan beberapa fungsi yang disediakan oleh aplikasi, yakni dengan menekan button-button yang tersedia. Berikut adalah penjelasan mengenai fungsi-fungsi tersebut : 1.
Button Database Button ini digunakan untuk melihat database mahasiswa, yaitu database yang dijadikan sumber data untuk difuzzifikasi dalam aplikasi ini
2.
Button Update Data Dengan menekan Button Update data maka akan mucul frame dengan tampilan seperti terlihat pada Gambar 3.9. Di dalam frame ini tersedia fungsi untuk mencari data dengan query berupa NIM mahasiswa. Apabila data yang dicari tidak ada dan bila pengguna hendak menambahkan
data
baru,
53
maka
pengguna
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
dapat
langsung
mengisikannya sesuai dengan field yang ada serta menyimpannya. Dari frame ini pengguna dapat juga melakukan penghapusan data.
Gambar 3.9 Frame Update Data 3.
Button Fuzzifikasi Button Fuzzifikasi dipakai untuk mengolah data berdasarkan fungsi keanggotaan dan himpunan pada masing-masing field dari database MAHASISWA. Hasil dari fuzzifikasi ini nantinya akan disimpan di dalam database bernama TEMPORARI yang berisi nilai-nilai derajat kenggotaan.
4.
Button Temp Button ini digunakan untuk melihat tabel Temporari, yaitu tabel yang berisi nama-nama mahasiwa beserta nilai derajat keanggotaannya pada masing-masing himpunan fuzzy.
5.
Button Clear Temp Button ini digunakan untuk memberisihkan tabel Temporari, sesuai dengan kemampuan sistem bahwa jika hendak melakukan proses fuzzifikasi selanjutnya (yang kedua kali atau pengulangan proses). Maka tabel temporari harus dibersihkan terlebih dahulu, jika hal ini tidak dilakukan oleh pengguna maka akan menyebabkan sistem error.
54
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
6.
Button Query Seleksi Button ini digunakan untuk melakukan proses perhitungan fire strength data-data yang ada di dalam tabel Temporari.
7.
Button Hasil Button ini digunakan untuk melihat database hasil, yaitu tabel berisikan daftar mahasiswa yang direkomendasikan untuk mendapat beasiswa
8.
Button Clear Hasil Button ini digunakan untuk memberisihkan tabel Hasil, jika hendak melakukan
proses seleksi selanjutnya
(yang kedua
kali atau
pengulangan proses). Maka tabel Hasil harus dibersihkan terlebih dahulu, jika hal ini tidak dilakukan oleh pengguna maka akan menyebabkan sistem error. 9.
Check Button Status Check Button digunakan untuk mengekspresikan nilai false atau true untuk status apakah mahasiswa sudah atau belum menerima beasiswa.
3.7.2 Seleksi Data Button Query Seleksi yang digunakan untuk seleksi data dan menghitung nilai fire strength, bila ditekan sekaligus akan menyimpan hasilnya ke dalam database HASIL. Tetapi sebelumya pengguna harus menentukan operator-oprator Zadeh untuk perhitungan fire strength pada combox operator yang tersedia. Menu untuk seleksi data ini tampak seperti pada Gambar 3.10. Dalam proses seleksi ini himpunan fuzzy yang dioperasikan dibagi menjadi dua kelompok.. Operator 1 akan melakukan operasi pada kelompok pertama, yaitu
55
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
antara nilai derajat keanggotaan pada himpunan fuzzy untuk variabel IPK dengan nilai derajat keanggotaan pada himpunan fuzzy untuk variabel TOEFL. Operator 3 digunakan untuk melakukan perhitungan fire strength antara variabel ABSENSI dengan variabel GAJI ORTU untuk nilai derajat keanggotaanya pada himpunan yang didefinisikan untuk masing-masing variabel tersebut. Sedangkan operator 2 adalah operator yang akan melakukan proses perhitungan fire strength diantara kedua kelompok ini. Jadi dalam penggunaan aplikasi ini, proses pemilihan operator harus dimulai dengan memilih operator 1 atau operator 2 terlebih dahulu dengan mengakhirkan pemilihan untuk operator 2. Jika hal tidak dilakukan sesuai dengan urutan tersebut, maka aplikasi akan memberikan nilai yang tidak sesuai dengan query. Untuk check button Status, apabila pengguna memberikan nilai false. Maka sistem atau aplikasi akan mencari mahasiswa yang belum pernah menerima beasiswa sebelumnya. Tetapi apabila check button ini ditekan oleh pengguna atau diberikan nilai true, maka dalam proses seleksi data dari tabel Temporari sistem akan mengambil mahasiswa yang sudah pernah menerima beasiswa sebelumnya.
Gambar 3.10 Fuzzy Query Data
56
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
3.8
Koneksi Database Untuk mengakses database yang pertamakali harus dilakukan adalah meng-
install driver dan kemudian membuat koneksi ke server database. Setelah koneksi terbangun maka perintah-perintah SQL (query) untuk membangun, mengakses dan manajemen database dapat dilakukan dari aplikasi berbasis Java, untuk lebih rinci tentang coding koneksi antara server database dan Java dapat dilihat pada Lampiran A, pada lampiran ini tercakup seluruh proses dari awal sampai akhir koneksi serta bagaimana konversi data dilakukan sehingga aplikasi yang dirancang dapat berfungsi sesuai dengan harapan . Pada prinsipnya pemrograman database yang dilakukan dari aplikasi berbasis Java melibatkan unsur-unsur sebagai berikut : 1. Loading dan setting driber JDBC. 2. Mendirikan koneksi database 3. Membuat obyek SQL-statement. 4. Mengeksekusi SQL-statement. 5. Menerima result-set sebagai data hasil eksekusi SQL--statement. 6. Menampilkan data result-set. 7. Menutup koneksi.
3.8.1 Registrasi Driver Dalam IDE NetBeans yang dipakai dalam pengembangan aplikasi ini, terdapat Database Explorer. Dengan memakai explorer ini, dapat dilakukan beberapa hal yaitu seperti melihat dan mengubah koneksi yang ada, baik yang berjalan maupun yang tidak berjalan. Memilih dan menambah driver database yang
57
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
baru. Serta menjalankan perintah-perintah SQL terhadap server database. Dengan cara ini maka database, tabel, view dab manajemen database dapat dilakukan. Tetapi terlebih dahulu harus dilakukan registerasi driver ke kelas JDBC (Java Database Connectivity) untuk server database yang belum terdaftar. Apabila driver telah tersedia di dalam JDBC API maka koneksi server databasenya sudah dapat langsung dilakukan tanpa harus mendaftarkannya. Di dalam sistem fuzzifikasi ini, konektor MySQL Connector/J dipakai sebagai driver bagi koneksi program Java (melalui JDBC) ke MySQL. Di dalam IDE NetBeans, untuk mendaftarkan driver ini dilakukan dengan langkah-langkah sebagai berikut : 1.
Dalam jendela Runtime, klik kanan di atas node Drivers dan kemudian jalankan menu kontekstual Add Driver sehingga dialog Add JDBC Driver terbuka.
2.
Klik tombol Add dan tentukan lokasi dari file connector (JAR) berada.
3.
Setelah dipilih, klik tombol Find dan kemudian pilih Driver Class org.gjt.mm.mysql.Driver lalu tekon tombol OK.
Setelah proses tersebut dilaksanakan maka pada menu Runtime di dalam node
Driver-nya
akan
ditambahkan
node
baru
yang
bernama
jdbc:mysql://localhost:3306[root on Default schema].
3.8.2 Kelas DriverManager Kelas java.sql.DriverManager dipakai untuk loading dan mengatur driver JDBC, serta untuk mendirikan koneksi ke database. Untuk load terhadap driver dilakukan dengan memakai method Class.forName(). Sedangkan untuk mendirikan
58
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
koneksi, dipakai method getConnection(), dua bentuk dari method ini adalah sebagai berikut : •
connection getConnection(String url)
•
connection getConnection (String url, String user, String pwd)
Parameter url (uniform resource locator) yang dipakai untuk menunjukkan lokasi database. Bentuk umumnya adalah JDBC:subprotocol:subname. Sedangkan user dan pwd adalah nama pemakai (user-ID) dan password. Berikut ini adalah penggalan listing program yang dipakai untuk koneksi ke database yang bernama mahasiswa : Connection con = null; Statement stmt = null; public Database() { try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/mahasiswa", "root", "elektro"); stmt = con.createStatement(); } catch (SQLException e){ System.err.println("ErrorSQl: " + e.getMessage()); } Dari listing diatas, pertama kali program akan loading driver MySQL dengan memakai method class.forName(). Kemudian koneksi database akan dilakukan oleh DriverManager dengan memakai getConnection(). Dalam URL yang dipakai sebagai subprotokol adalah mysql, localhost yang secara default memiliki IP 127.0.0.1 dinyatakan sebagai lokasi dari server MySQL (http//localhost). Nomor port 3306 merupakan nomor port default dari server MySQL. Database yang diakses bernama mahasiswa, user ID-nya adalah root dengan password elektro.
59
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
3.8.3 Interface Connection Ketika
DriverManager
membentuk
koneksi
dengan
memakai
getConnection(), maka method ini akan mengembalikan obyek Connection. Interface java.sql.Connection dipakai untuk membentuk koneksi (session) ke database serta mengatur hubungan tersebut, seperti commit, rollback atau menyiapkan (prepare) SQL-statement. Keneksi yang telah dibuat pada akhirnya harus ditutup dengan memakai close(). Berikut adalah penggalan programnya : private void formWindowClosing(java.awt.event.WindowEvent evt) { if (stmt != null){ try{ stmt.close(); } catch(SQLException e) { System.err.println("Error SQL: " + e.getMessage()); } } if (con!= null){ try{ con.close(); } catch(SQLException e){ System.err.println("Error SQL: " + e.getMessage()); } } }
3.8.4 Interface Statement Inteface java.sql.statement dipakai untuk menangani dan mengeksekusi SQLstatement yang dikirimkan dari Aplikasi ke server database. Statemant dapat dibuat dari obyek Connection dengan memakai method Connection.createStatement(). Statement natinya akan dieksekusi di dalam method getResultData(). Berikut ini adalah listing program method getResultData() dan closeResultSet() :
60
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
public ResultSet getResultData(){ ResultSet rs = null; try { rs = stmt.executeQuery("select * from mahasiswa"); } catch(SQLException e){ System.err.println("Error SQL: " + e.getMessage()); } return rs; } public void closeResultSet(ResultSet rs){ if(rs !=null){ try{ rs.close(); } catch(SQLException e){ System.err.println("Error SQL: " + e.getMessage()); } } } Dalam method getResultData(), obyek Statement dieksekusi oleh method executeQuery(). Dalam hal ini SQL-statement yang dieksekusi adalah SELECT * FROM mahasiswa, yang artinya meminta (query) seluruh kolom (“ *” ) dari tabel mahasiswa dan hasilnya berupa ResultSet. Sedangkan method closeResultSet() adalah method yang dipakai untuk menutup obyek ResultSet.
3.8.5 Interface ResultSet Result-set merupakan data tabel yang ada di dalam database. Jika SQLstatement tertentu dikirimkan ke server database untuk membaca record maka hasilnya berupa result-set, yaitu baris-baris data hasil dari eksekusi query SQL tersebut. Interface java.sql.ResultSet berfungsi untuk mengontrol letak kursor yang menunjukkan baris (record) yang sedang aktif di dalam tebel database. Untuk begerak ke baris berikutnya dipakai
method next(). Untuk bergerak ke baris
sebelumynya dipakai method previous(). Sedangkan methode first() dan last()
61
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
dipakai untuk menuju baris pertama dan baris terakhir dari result-set. Untuk lebih jelasnya, kode programnya dapat dilihat pada Lampiran B. Interface
ini juga berisi beberapa method yang berawalan get, seperti
getNumeric(), getDecimal(), getDate(), getDouble(), dan sebagainya. Method-method ini dipakai untuk konversi dari tipe data SQL-based ke tipe data Java karena tipe data antara SQL dan Java berbeda. Dalam SQL, tipe data lebih condong pada loosselytyped sedangkan dalam Java strongly-typed. Berikut ini adalah daftar pemetaan tipe data SQL – Java : Tabel 3.1 Konversi tipe data SQL-Java Tipe Data SQL
Tipe Data Java
NUMERIC
java.sql.Numeric
CHAR
String
DECIMAL
java.sql.Numeric
VARCHAR
String
TYNIINT
byte
LONGVARCHAR
String
SMALLINT
short
DATE
java.sql.Date
INTEGER
int
TIME
java.sql.Date
BIGINT
long
BINARY
byte[]
REAL
float
VARBINARY
byte[]
FLOAT
float
LANGVARBINARY
byte[]
DOUBLE
double
BIT
boolean
62
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Berikut
ini
adalah
penggalan
program
yang
memakai
interface.java.sql.ResultSet : public DatabaseKastemisasi(ResultSet rs) { ResultSets = new ArrayList<String[]>(); try { while(rs.next()){ String[] row = { rs.getString("NIM"), rs.getString("NAMA"), rs.getString("IPK"), rs.getString("TOEFL"), rs.getString("ABSENSI"), rs.getString("GAJI_ORTU"), rs.getString("STATUS"), }; ResultSets.add(row);
}
} } catch(Exception e){ System.out.println("Exception in deddy1model"); } public Object getValueAt(int rowindex, int columnindex){ String[] row = ResultSets.get(rowindex); return row[columnindex]; } public int getRowCount(){ return ResultSets.size(); } public int getColumnCount(){ return colnum; } public String getColumnName(int param){ return colNames[param]; }
Dari penggalan program di atas, obyek Statement yang mengeksekusi perintah
SQL
menghasilkan
ResultSet,
yaitu
dengan
memakai
method
executeQuery(). Setelah obyek ResultSet didapatkan, barulah data dapat ditampilkan atau diproses dengan memakai method-method lain yang ada.
63
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
BAB IV UJI COBA APLIKASI DAN ANALISA
4.5
Uji Coba Fuzzifikasi Untuk menjalankan sistem fuzzifikasi database dengan menggunkan metode
fuzzy query database ini, pengguna tinggal menjalankan program yang telah terinstall. Dengan aplikasi ini pengguna tidak perlu login ke server database sebelum menjalankan aplikasi, karena mekanisme login dan manajemen data secara sederhana telah tersedia di dalam aplikasi. Tetapi walaupun begitu harus diperhatikan bahwa server database yang dalam hal ini adalah MySQL server harus dalam keadaan aktif.
4.5.1 Percobaan 1 Pada percobaan 1 ini, aplikasi dijalankan sesuai dengan urutan proses yang ada dengan tidak mengubah nilai default untuk masing-masing variabel fuzzy. Hasil yang diharapkan adalah mahasiswa yang direkomendasikan berdasarkan kriteria yang sudah ditetapkan sistem dengan query yang diberikan pengguna. Dalam percobaan ini data yang digunakan adalah berasal dari database mahasiswa deangan nama tabel MAHASISWA. Seperti terlihat pada Tabel 4.1. Kemudian pada tabbed IPK didefinisikan bahwa fungsi keanggotaan dari IPK adalah fungsi kurva dengan himpunan fuzzy istimewa. Pada saat pendefinisian ini dilakukan sistem akan menampilkan pada pengguna nilai semesta pembicaan yang dimungkinkan bagi domain IPK dan secara default juga sistem akan memberikan nilai untuk batas bawah, nilai tengah, dan batas atas himpunan serta query seleksi data untuk variabel IPK. Bagi pengguna yang ingin menentukan sendiri batas bawah,
64
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
nilai tengah, dan batas atas himpunan dapat secara langsung mengedit nilai yang diberikan sistem. Tetapi harus sesuai dengan semesta pembicaraan bagi variabel fuzzy yang diproses. Sedangkan untuk query seleksi pengguna tidak dapat mengubahnya setelah pendefinisian variabel. Query ini berfungsi sebagai pendefinisian tentang sifat fuzzy data pada variabel yang ditetapkan.
Tabel 4.1 Tabel Mahasiswa
Setelah selesai dengan variabel IPK, maka himpunan untuk variabel TOEFL juga didefinisikan, yaitu dengan memilih fungsi keanggotaan kurva bahu dan himpunan fuzzy baik. Sama seperti pada pendefinisian untuk IPK, secara default sistem akan memberikan nilai untuk domain dan batas bawah, nilai tengah, batas atas domain serta query seleksi. Demikian juga untuk variabel ABSENSI pendefinisian juga dilakukan dengan memilih himpunan tertinggi yang ditawarkan di dalam field Himpunan. Sedangkan untuk variabel GAJI_ORTU dilakukan sebaliknya. Yaitu dengan
memilih
himpunan
terendah
yang
ditawarkan
aplikasi.
Dengan
pendefinisiaan seperti ini, diharapkan sistem akan merekomendasikan mahasiswa
65
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
dengan nilai IPK istimewa, TOEFL istimewa, ABSENSI baik, dan GAJI_ORTU rendah, serta belum menerima beasiswa. Setelah proses pendefiniian selesai, maka button fuzzifikasi ditekan untuk menghitung nilai derajat keanggotaan untuk setiap record pada database sesuai variabel fuzzy masing-masing untuk himpunan fuzzy yang telah ditetapkan. Kemudian setelah perhitungan nilai derajat keanggotan untuk masing-masing variabel selesai, maka tabel temporari telah merekam hasil perhitungan tersebut. Seperti terlihat pada Tabel 4.2.
Tabel 4.2 Tabel Temporari Percobaan 1
Tahapan selanjutnya adalah melakukan query untuk meyeleksi mahasiswa yang direkomendasikan untuk mendapat beasiswa. Pada tahapan ini pengguna harus memilih jenis operasi himpunan yang ada pada panel query seleksi. Operator yang disediakan untuk operasi ini hanya ada dua, yaitu operator OR dan AND. Dalam
66
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
sistem ini untuk memasukkan operatornya harus dimulai dengan memasukan operator pertama atau kedua terlebih dahulu dengan mengakhirkan operator kedua. Pada Gambar 4.1 tampak bagaimana operasi query pada percobaan pertama ini.
Gambar 4.1 Query Seleksi Data
Setelah operator untuk masing-masing himpunan fuzzy ditentukan, maka untuk memprosesnya dan agar data kirimkan ke tabel HASIL pada database hasil, pengguna harus menekan tombol Query Seleksi. Sedangkan untuk melihat hasilnya pengguna tinggal menekan tombol Hasil. Hasil dari percobaan 1 ini dapat dilihat pada Tabel 4.3. Tabel 4.3 Tabel Hasil Percobaan 1
67
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
4.5.2 Percobaan 2 Percobaan 2 ini dilakukan dengan cara yang sama dengan percobaan 1, tetapi pada percobaan ini nilai-nilai untuk batas bawah, nilai tengah, nilai batas atas untuk setiap variabel fuzzy akan diubah. Artinya sistem tidak akan membaca nilai default yang telah diberika pada saat pemrograman, melainkan nilai yang diberikan pengguna. Sebelum percobaan 2 dijalankan, tabel hasil dan tabel temporari harus dibersihkan terlebih dahulu. Hal ini dilakukan dengan menekan tombol yang tersedia untuk fungsi tersebut pada menu utama. Setelah tabel dibersihkan maka percobaan 2 dapat dilakukan. Dalam percobaan 2 ini dilakukan pengaturan nilai sebagai berikut : a. Variabel IPK 1. Himpunan fuzzy yang dipilih adalah Baik 2. Nilai batas bawah = 3,4 3. Nilai tengah = 3,5 4. Nilai batas atas = 3,6 b. Variabel TOEFL 1. Himpunan fuzzy yang dipilih adalah Baik 2. Nilai batas bawah = 450 3. Nilai tengah = 500 4. Nilai batas atas = 550 c. Variabel ABSENSI 1. Himpunan fuzzy yang dipilih adalah Cukup 2. Nilai batas bawah = 75 3. Nilai tengah = 80 4. Nilai batas atas = 85
68
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
d. Variabel GAJI_ORTU 1. Himpunan fuzzy yang dipilih adalah Rendah 2. Nilai batas bawah = 2 3. Nilai tengah = 2.5 4. Nilai batas atas = 3 Setelah varibel-variabel fuzzy didefinisikan, maka proses fuzzifikasi dilakukan dan dari proses ini dihasilkan data temporari sebagai mana terlihat pada Tabel 4.4.
Tabel 4.4 Tabel Temporari Percobaan 2
Tahapan selanjutnya adalah dengan memasukkan operator untuk query data dari tabel Temporari ke tabel Hasil. Pada percobaan 2 ini akan dicoba dengan memasukkan operator yang bervariasi. Yaitu : 1. Operator 1 = OR 2. Operator 3 = AND
69
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
3. Operator 2 = OR Pada percobaan 2 ini yang diharapkan oleh pengguna adalah derajat perekomendasian dengan kriteria mahasiswa seperti pada Gambar 4.2.
Gambar 4.1 Query Percobaan 2 Dari keseluruhan proses pada percobaan 2 ini, maka didapat hasil seperti pada Tabel 4.6 Tabel 4.5 Tabel Hasil Percobaan 2
70
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
4.6
Analisa Setelah percobaan 1 dan percobaan 2 dilakukan dan hasilnya berupa derajat
perkomendasian untuk calon mahasiswa penerima beasiswa berhasil didapatkan, sehingga seorang mahasiswa calon penerima beasiswa dapat direkomendasikan berdasarkan nilai derajat perekomendasian yang dihasilkan oleh aplikasi ini.
4.6.1 Analisa Percobaan 1 Pada percobaan 1, query yang diberikan kepada sistem adalah : SELECT FROM mahasiswa WHERE (IPK=Istimewa OR TOEFL=Istimewa) OR (ABSENSI=Baik OR GAJI_ORTU=Rendah) Berdasarkan query tersebut, maka sistem akan memproses data yang ada pada tabel TEMPORARI dengan tahapan sebagai berikut : 1.
Nilai derajat keanggotaan pada kolom IPK (Istimewa) dioperasikan dengan nilai derajat keanggotaan TOEFL (Istimewa). Karena nilai derajat keanggotaan yang diambil sebagai hasil dari operator OR adalah nilai yang terbesar, maka sistem akan mengambil nilai tersebut dan memasukkannya ke dalam tabel TEMPORARI1 kolom DK.
2.
Sama halnya seperti pada himpunan ABSENSI Baik dan GAJI_ORTU Rendah dengan operator OR, maka nilai maksimal dari kedua himpunan ini akan disimpan pada tabel TEMPORARI1 tetapi pada kolom DK1.
3.
Pada tahapan selanjutnya, sistem telah memegang nilai derajat keanggotaan untuk himpunan IPK Istimewa dan TOEFL Istimewa pada kolom DK. Sedangkan nilai derajat keanggotaan untuk himpunan
71
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
ABSENSI Baik dan GAJI_ORTU Rendah dipegang oleh sistem untuk masing-masing record pada kolom DK1. 4.
Setelah nilai derajat keanggotaan pada kolom DK dan DK1 telah terdefinisi, maka sistem melanjutkan pada tahapan selajutnya, yaitu mengoperasikan nilai pada kolom DK dan DK1 dengan operator OR serta
menyimpan
nilainya
pada
tabel
TEMPORARI1
kolom
DK_HASIL. 5.
Hasil akhir pada kolom DK_HASIL inilah yang dijadikan sebagai nilai derajat perekomendasiaan yang diberikan oleh aplikasi.
Sebagai contoh, mahasiswa dengan NIM 020402087 memiliki data IPK = 3.14, TOEFL = 357, ABSENSI = 76, dan GAJI_ORTU = 2.7. Maka dari data tersebut diperoleh nilai derajat keanggotaan untuk masing-masing variabel fuzzy sebagai berikut : 1.
Derajat keanggotaan IPK-nya pada himpunan Istimewa = 0.
2.
Derajat keanggotaan TOEFL-nya pada himpunan Istimewa = 0.
3.
Derajat keanggotaan ABSENSI-nya pada himpunan Absensi Baik = 0.
4.
Derajat keanggotaan GAJI_ORTU-nya pada himpunan Rendah = 0.299.
Maka pada tahapan operasi kedua untuk mahasiswa ini diperoleh data sebagai berikut : 1.
Derajat keanggotaannya untuk himpunan IPK Istimewa dan TOEFL Istimewa = 0 (DK). IPK
U TOEFL = max (
IPK[0],
T0EFL[0])
= 0
72
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
2.
Derajat keanggotaannya untuk himpunan ABSENSI Baik dan GAJI_ORTU Rendah = 0 (DK1). ABSENSI
U GAJI_ORTU = max (
ABSENSI[0],
GAJI_ORTU[0.299])
= 0.299 Sehingga derajat perekomendasian yang diberikan oleh sistem untuk mahasiswa ini adalah : DK
U DK1 = max (
DK[0],
DK1[0.299])
= 0.299
4.6.2 Analisa Percobaan 2 Pada percobaan 2, query yang diberikan kepada sistem adalah : SELECT FROM mahasiswa WHERE (IPK=Baik OR TOEFL=Baik) OR (ABSENSI=Cukup AND GAJI_ORTU=Sedang) Berdasarkan query tersebut, maka sistem akan memproses data yang ada pada tabel TEMPORARI dengan tahapan sebagai berikut : 1.
Nilai derajat keanggotaan pada kolom IPK (Baik) dioperasikan dengan nilai derajat keanggotaan TOEFL (Baik). Karena nilai derajat keanggotaan yang diambil sebagai hasil dari operator OR adalah nilai yang terbesar, maka sistem akan mengambil nilai tersebut dan memasukkannya ke dalam tabel TEMPORARI1 kolom DK.
2.
Sedangkan pada himpunan ABSENSI Cukup dan GAJI_ORTU Sedang dengan operator AND, maka nilai terkecil dari kedua himpunan ini yang diambil sebagai nilai derajat keanggotaannya, kemudian disimpan di tabel TEMPORARI1 pada kolom DK1.
73
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
3.
Pada tahapan selanjutnya, sistem telah memegang nilai derajat keanggotaan untuk himpunan IPK Baik dan TOEFL Baik pada kolom DK. Sedangkan nilai derajat keanggotaan untuk himpunan ABSENSI Cukup dan GAJI_ORTU Sedang dipegang oleh sistem untuk masingmasing record pada kolom DK1.
4.
Setelah nilai derajat keanggotaan pada kolom DK dan DK1 telah terdefinisi, maka sistem melanjutkan pada tahapan selajutnya, yaitu mengoperasikan nilai pada kolom DK dan DK1 dengan operator OR serta
menyimpan
nilainya
pada
tabel
TEMPORARI1
kolom
DK_HASIL. 5.
Hasil akhir pada kolom DK_HASIL inilah yang dijadikan sebagai nilai derajat perekomendasiaan yang diberikan oleh aplikasi.
Sebagai contoh untuk diamati secara khusus, diambil dari percobaan 2 ini adalah seorang mahasiswa yang memiliki NIM 020402087 memiliki data berupa nilai IPK = 3.14, nilai TOEFL = 357, persentase ABSENSI = 76, dan jumlah GAJI_ORTU = 2.7. Maka dari data tersebut diperoleh nilai derajat keanggotaan untuk masing-masing variabel fuzzy sebagai berikut : 1.
Derajat keanggotaan IPK-nya pada himpunan Baik = 0.
2.
Derajat keanggotaan TOEFL-nya pada himpunan Baik = 0.
3.
Derajat keanggotaan ABSENSI-nya pada himpunan Cukup = 0.2.
4.
Derajat keanggotaan GAJI_ORTU-nya pada himpunan Sedang = 0.59.
74
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Maka pada tahapan operasi kedua untuk mahasiswa ini, mekanisme perhitungan fire strength yang dilakukan oleh aplikasi adalah seperti yang dipaparkan di bawah : 1.
Derajat keanggotaannya untuk himpunan IPK Istimewa dan TOEFL Istimewa = 0 (DK). IPK
U TOEFL = max (
IPK[0],
T0EFL[0])
= 0 2.
Derajat keanggotaannya untuk himpunan ABSENSI Baik dan GAJI_ORTU Rendah = 0 (DK1). ABSENSI
GAJI_ORTU
= min (
CUKUP[0.2],
SEDANG[0.599])
= 0,2 Sehingga derajat perekomendasian yang diberikan oleh aplikasi melalui proses perhitungan fire strength untuk mahasiswa ini adalah : DK
U DK1 = max (
DK[0],
DK1[0.2])
= 0.2
75
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
BAB V PENUTUP
4.7
Kesimpulan Dari pengerjaan proyek Tugas Akhir ini dapat ditarik beberapa kesimpulan,
antara lain adalah : 1.
Aplikasi berbasis Java dapat mengakses dan memanipulasi database yang dibangun dengan MySQL server setelah dilakukan koneksi dengan driver, konfigurasi, serta konversi tipe data yang tepat diantara keduanya.
2.
Seleksi berdasarkan sistem logika klasik yang tegas dan curam oleh sistem database, dapat diubah menjadi seleksi yang menekankan pada nilai derajat keanggotaan pada himpunan yang diacu.
3.
Derajat perekomendasian yang diberikan oleh sistem ini hanya berasal dari perhitungan nilai fire strength masing-masing variabel tanpa menggunakan sistem inferensi fuzzy, tetapi walaupun demikian aplikasi ini dapat dimanfaatkan untuk mendukung proses pengambilan keputusan.
4.
Pengguna harus mengetahui karakteristik dari operator-operator himpunan fuzzy dalam menggunakan aplikasi ini. Karena dengan memahami
kerakteristik
tersebut
pengguna
dapat
penekanan pada variabel fuzzy tertentu.
76
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
memberikan
4.8
Saran 1.
Diharapkan untuk pengembangan lebih lanjut, sistem atau aplikasi ini dapat menangani data dari tabel-tabel yang berelasi. Sehingga database yang dibangun tidak perlu terpisah dan berdiri sendiri.
2.
Untuk pengambilan keputusan yang lebih baik lagi diharapkan dapat menggunakan metode kombinasi (hybrid). Yaitu antara metode fuzzy dengan metode artificial intelligence yang lainnya. Misalnya jaringan syaraf tiruan.
3.
Dalam pengembangan lebih lanjut, diharapkan varibel-variabel fuzzy yang diolah memiliki pembobotan yang dinamis. Sehingga aplikasi dapat menentukan variabel yang menjadi prioritas dalam pengambilan derajat perekomendasian. Misalnya untuk beasiswa prestasi, keputusan yang diambil lebih ditekankan pada prestasi akademik dan untuk beasiswa kurang mampu, lebih ditekankan pada kondisi ekonomi calon penerima beasiswa.
77
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Daftar Pustaka
1. Sri Kusumadewi, 2003, “ Artificial Intelligence” , Graha Ilmu, Yogyakarta. 2. Thomas Sri Widodo, 2005, “ Sistem Neuro Fuzzy” , Graha Ilmu, Yogyakarta. 3. Yuniar Supardi, 2006, “ Java dan MySQL” , Elex Media Komputindo, Jakarata 4. Setiyo Cahyono, 2006, “ Pemrogramn Database dengan MySQL dan Java” , Informatika, Bandung. 5. Sri Hartati Wijono, B. Herry Suharto, Matius Soesilo Wijono, 2007, “ Pemrograman GUI Swing Java dengan NetBeans 5” , Andi Yogyakarta. 6. Willem Siler, James J, Buckley, 2005, “ Fuzzy Expert System And Fuzzy Reasoning” , John Wiley & Sons, Chichester, England. 7. J. Harris, 2006, “ Fuzzy Logic Application in Engineering Science” , Springer, Dordrecht, Netherlands. 8. Timothy, J.Ross, 2004, “ Fuzzy Logic With Engineering Applications” , John Wiley & Sons, Chichester, England.
78
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Lampiran A Listing Porgram Koneksi Database /* * Database.java * * Created on March 26, 2008, 11:39 PM */ import java.sql.*; /** * * @author deddy */ public class Database extends javax.swing.JFrame { Connection con = null; Statement stmt = null; /** Creates new form Database */ public Database() { try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/beasiswa", "root", "elektro"); stmt = con.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } initComponents(); } public ResultSet getResultData(){ ResultSet rs = null; try { rs = stmt.executeQuery("select * from mahasiswa"); } catch(SQLException e){ System.err.println("Error SQL: " + e.getMessage()); } return rs; } public void closeResultSet(ResultSet rs){ if(rs !=null){ try{ rs.close(); } catch(SQLException e){ System.err.println("Error SQL: " + e.getMessage()); } } } /** This method is called from within the constructor to
79
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
* initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc=" Generated Code "> private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); jTable1 = new javax.swing.JTable(); ButtonOk = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { formWindowClosing(evt); } }); ResultSet rs = getResultData(); jTable1.setModel(new DatabaseKastemisasi(rs)); closeResultSet(rs); jScrollPane1.setViewportView(jTable1); ButtonOk.setText("OK"); ButtonOk.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { ButtonOkActionPerformed(evt); } }); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(ButtonOk)) .addContainerGap(15, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 201, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(ButtonOk) .addContainerGap(13, Short.MAX_VALUE)) ); pack(); }// private void ButtonOkActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: setVisible(false); } private void formWindowClosing(java.awt.event.WindowEvent evt) {
80
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
// TODO add your handling code here: if (stmt != null){ try{ stmt.close(); } catch(SQLException e) { System.err.println("Error SQL: " + e.getMessage()); } } if (con!= null){ try{ con.close(); } catch(SQLException e){ System.err.println("Error SQL: " + e.getMessage()); } } } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Database().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JButton ButtonOk; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTable jTable1; // End of variables declaration }
81
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Lampiran B Listing Porgram Tabel Model /* * DatabaseKastemisasi.java * Created on March 26, 2008, 11:45 PM * To change this template, choose Tools | Template Manager * and open the template in the editor. */ import javax.swing.table.AbstractTableModel; import java.sql.*; import java.util.ArrayList; public class DatabaseKastemisasi extends AbstractTableModel{ private int colnum = 7; private int rownum; private String[] colNames = {"NIM", "NAMA", "IPK","TOEFL","ABSENSI","GAJI_ORTU","STATUS",}; private ArrayList<String[]> ResultSets; /** Creates a new instance of DatabaseKastemisasi */ public DatabaseKastemisasi(ResultSet rs) { ResultSets = new ArrayList<String[]>(); try { while(rs.next()){ String[] row = { rs.getString("NIM"), rs.getString("NAMA"), rs.getString("IPK"), rs.getString("TOEFL"), rs.getString("ABSENSI"), rs.getString("GAJI_ORTU"), rs.getString("STATUS"), }; ResultSets.add(row);
}
}
} } catch(Exception e){ System.out.println("Exception in deddy1model"); } public Object getValueAt(int rowindex, int columnindex){ String[] row = ResultSets.get(rowindex); return row[columnindex]; } public int getRowCount(){ return ResultSets.size(); } public int getColumnCount(){ return colnum; } public String getColumnName(int param){ return colNames[param]; }
82
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Lampiran C Listing Porgram Fuzzifikasi IPK private void FuzzifikasiButtonActionPerformed(java.awt.event.ActionEvent evt) { // Menghitung fuzzy IPK String s = ComboBoxHimpunanIpk.getSelectedItem().toString(); if (s.equals("Buruk")){ String med1 = FieldAIpk.getText(); String med2 = FieldBIpk.getText(); String max = FieldCIpk.getText(); double a = Double.parseDouble(med1); double b = Double.parseDouble(med2); double c = Double.parseDouble(max); try{ try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/beasiswa", "root", "elektro"); stmt = con.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql="SELECT * FROM mahasiswa"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ String ipk = rs.getString("IPK"); String nim = rs.getString("NIM"); String nama = rs.getString("NAMA"); String status = rs.getString("STATUS"); double x = Double.parseDouble(ipk); if ( x <= a || x >=c){ double h = Buruk1(a,b,c,x); String hs =String.valueOf(h); Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage());
83
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
} String sql1="INSERT INTO temporari (NIM,NAMA,DK_IPK,STATUS) VALUE(' "+nim+"' ,' "+nama+"' ,' "+hs+"' ,' "+status+"' );"; stmt1.executeUpdate(sql1); stmt1.close(); con1.close(); // JOptionPane.showMessageDialog(this,"Data telah tersimpan"); } else if ( a<=x && x<=b ){ double h = Buruk2(a,b,c,x); String hs =String.valueOf(h); Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql1="INSERT INTO temporari (NIM,NAMA,DK_IPK,STATUS) VALUE(' "+nim+"' ,' "+nama+"' ,' "+hs+"' ,' "+status+"' );"; stmt1.executeUpdate(sql1); stmt1.close(); con1.close(); } else if ( x>=b ){ double h = Buruk3(a,b,c,x); String hs =String.valueOf(h); Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql1="INSERT INTO temporari (NIM,NAMA,DK_IPK,STATUS) VALUE(' "+nim+"' ,' "+nama+"' ,' "+hs+"' ,' "+status+"' );"; stmt1.executeUpdate(sql1); stmt1.close();
84
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
}
con1.close(); }
stmt.close(); con.close(); } catch(Exception e){System.out.println(e);} }else if(s.equals("Kurang")){ String min = FieldAIpk.getText(); String med = FieldBIpk.getText(); String max = FieldCIpk.getText(); double a = Double.parseDouble(min); double b = Double.parseDouble(med); double c = Double.parseDouble(max); try{ try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/beasiswa", "root", "elektro"); stmt = con.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql="SELECT * FROM mahasiswa"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ String ipk = rs.getString("IPK"); String nim = rs.getString("NIM"); String nama = rs.getString("NAMA"); String status = rs.getString("STATUS"); double x = Double.parseDouble(ipk); if ( x <= a || x >= c ){ double h = Segitiga1(a,b,c,x); String hs =String.valueOf(h); Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); }
85
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql1="INSERT INTO temporari (NIM,NAMA,DK_IPK,STATUS) VALUE(' "+nim+"' ,' "+nama+"' ,' "+hs+"' ,' "+status+"' );"; stmt1.executeUpdate(sql1); stmt1.close(); con1.close(); } else if ( a<=x && x<=b ) { double h = Segitiga2(a,b,c,x); String hs =String.valueOf(h); Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql1="INSERT INTO temporari (NIM,NAMA,DK_IPK,STATUS) VALUE(' "+nim+"' ,' "+nama+"' ,' "+hs+"' ,' "+status+"' );"; stmt1.executeUpdate(sql1); stmt1.close(); con1.close(); } else if( b<=x && x<=c ){ double h = Segitiga3(a,b,c,x); String hs =String.valueOf(h); Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql1="INSERT INTO temporari (NIM,NAMA,DK_IPK,STATUS) VALUE(' "+nim+"' ,' "+nama+"' ,' "+hs+"' ,' "+status+"' );"; stmt1.executeUpdate(sql1);
86
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
stmt1.close(); con1.close();
} } stmt.close(); con.close();
} catch(Exception e){System.out.println(e);} }else if(s.equals("Sedang")){ String min = FieldAIpk.getText(); String med = FieldBIpk.getText(); String max = FieldCIpk.getText(); double a = Double.parseDouble(min); double b = Double.parseDouble(med); double c = Double.parseDouble(max); try{ try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/beasiswa", "root", "elektro"); stmt = con.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql="SELECT * FROM mahasiswa"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ String ipk = rs.getString("IPK"); String nim = rs.getString("NIM"); String nama = rs.getString("NAMA"); String status = rs.getString("STATUS"); double x = Double.parseDouble(ipk); if ( x <= a || x >= c ){ double h = Segitiga1(a,b,c,x); String hs =String.valueOf(h); Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage());
87
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
} String sql1="INSERT INTO temporari (NIM,NAMA,DK_IPK,STATUS) VALUE(' "+nim+"' ,' "+nama+"' ,' "+hs+"' ,' "+status+"' );"; stmt1.executeUpdate(sql1); stmt1.close(); con1.close(); } else if ( a<=x && x<=b ) { double h = Segitiga2(a,b,c,x); String hs =String.valueOf(h); Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql1="INSERT INTO temporari (NIM,NAMA,DK_IPK,STATUS) VALUE(' "+nim+"' ,' "+nama+"' ,' "+hs+"' ,' "+status+"' );"; stmt1.executeUpdate(sql1); stmt1.close(); con1.close(); } else if( b<=x && x<=c ){ double h = Segitiga3(a,b,c,x); String hs =String.valueOf(h); Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql1="INSERT INTO temporari (NIM,NAMA,DK_IPK,STATUS) VALUE(' "+nim+"' ,' "+nama+"' ,' "+hs+"' ,' "+status+"' );"; stmt1.executeUpdate(sql1); stmt1.close(); con1.close(); } }
88
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
stmt.close(); con.close();
} catch(Exception e){System.out.println(e);} } else if(s.equals("Baik")){ String min = FieldAIpk.getText(); String med = FieldBIpk.getText(); String max = FieldCIpk.getText(); double a = Double.parseDouble(min); double b = Double.parseDouble(med); double c = Double.parseDouble(max); try{ try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/beasiswa", "root", "elektro"); stmt = con.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql="SELECT * FROM mahasiswa"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ String ipk = rs.getString("IPK"); String nim = rs.getString("NIM"); String nama = rs.getString("NAMA"); String status = rs.getString("STATUS"); double x = Double.parseDouble(ipk); if ( x <= a || x >= c ){ double h = Segitiga1(a,b,c,x); String hs =String.valueOf(h); Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql1="INSERT INTO temporari (NIM,NAMA,DK_IPK,STATUS) VALUE(' "+nim+"' ,' "+nama+"' ,' "+hs+"' ,' "+status+"' );";
89
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
stmt1.executeUpdate(sql1); stmt1.close(); con1.close(); } else if ( a<=x && x<=b ) { double h = Segitiga2(a,b,c,x); String hs =String.valueOf(h); Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql1="INSERT INTO temporari (NIM,NAMA,DK_IPK,STATUS) VALUE(' "+nim+"' ,' "+nama+"' ,' "+hs+"' ,' "+status+"' );"; stmt1.executeUpdate(sql1); stmt1.close(); con1.close(); } else if( b<=x && x<=c ){ double h = Segitiga3(a,b,c,x); String hs =String.valueOf(h); Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql1="INSERT INTO temporari (NIM,NAMA,DK_IPK,STATUS) VALUE(' "+nim+"' ,' "+nama+"' ,' "+hs+"' ,' "+status+"' );"; stmt1.executeUpdate(sql1); stmt1.close(); con1.close(); } } stmt.close(); con.close();
90
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
} catch(Exception e){System.out.println(e);} } else if(s.equals("Istimewa")){ String min = FieldAIpk.getText(); String med1 = FieldBIpk.getText(); String med2 = FieldCIpk.getText(); double a = Double.parseDouble(min); double b = Double.parseDouble(med1); double c = Double.parseDouble(med2); try{ try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/beasiswa", "root", "elektro"); stmt = con.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql="SELECT * FROM mahasiswa"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ String ipk = rs.getString("IPK"); String nim = rs.getString("NIM"); String nama = rs.getString("NAMA"); String status = rs.getString("STATUS"); double x = Double.parseDouble(ipk); if ( x <= a || x >= c ){ double h = Istimewa1(a,b,c,x); String hs =String.valueOf(h); Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql1="INSERT INTO temporari (NIM,NAMA,DK_IPK,STATUS) VALUE(' "+nim+"' ,' "+nama+"' ,' "+hs+"' ,' "+status+"' );"; stmt1.executeUpdate(sql1); stmt1.close(); con1.close();
91
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
} else if ( a<=x && x<=b ) { double h = Istimewa2(a,b,c,x); String hs =String.valueOf(h); Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql1="INSERT INTO temporari (NIM,NAMA,DK_IPK,STATUS) VALUE(' "+nim+"' ,' "+nama+"' ,' "+hs+"' ,' "+status+"' );"; stmt1.executeUpdate(sql1); stmt1.close(); con1.close(); } else if( b<=x && x<=c ){ double h = Istimewa3(a,b,c,x); String hs =String.valueOf(h); Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql1="INSERT INTO temporari (NIM,NAMA,DK_IPK,STATUS) VALUE(' "+nim+"' ,' "+nama+"' ,' "+hs+"' ,' "+status+"' );"; stmt1.executeUpdate(sql1); stmt1.close(); con1.close(); } } stmt.close(); con.close(); } catch(Exception e){System.out.println(e);} }
92
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Lampiran D Listing Porgram Fungsi Keanggotaan public double Segitiga1(double a, double b, double c, double x){ return 0; }; public double Segitiga2(double a, double b, double c,double x){ return (x-a)/(b-a); }; public double Segitiga3(double a, double b, double c, double x){ return (c-x)/(c-b); }; public double Buruk1(double a, double b, double c, double x){ return 0; }; public double Buruk2(double a, double b, double c, double x){ return 1; }; public double Buruk3(double a, double b, double c, double x){ return (c-x)/(c-b); }; public double Istimewa1(double a, double b, double c, double x){ return 0; }; public double Istimewa2(double a, double b, double c, double x){ return (x-a)/(b-a); }; public double Istimewa3(double a, double b, double c, double x){ return 1; };
93
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Lampiran E Listing Porgram Perhitungan Fire Strength private void OperatorKeduaActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: // DK dan DK1 javax.swing.JComboBox jcb = ( javax.swing.JComboBox) evt.getSource(); String s2 = (String) jcb.getSelectedItem().toString(); if (s2.equals("OR")){ try{ try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt = con.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql="SELECT NIM,DK,DK1 FROM temporari1"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ String nim = rs.getString("NIM"); //String nama = rs.getString("NAMA"); String dk = rs.getString("DK"); String dk1 = rs.getString("DK1"); double a = Double.parseDouble(dk); double b = Double.parseDouble(dk1); if ( a >= b){ Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String dk2 =String.valueOf(a); String sql4="UPDATE temporari1 SET DK_HASIL = ' "+dk2+"'WHERE NIM = ' "+nim+"' ;"; stmt1.executeUpdate(sql4);
94
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
stmt1.close(); con1.close(); } else if ( b >= a ){ Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String dk2 =String.valueOf(b); String sql5="UPDATE temporari1 SET DK_HASIL = ' "+dk2+"'WHERE NIM = ' "+nim+"' ;"; stmt1.executeUpdate(sql5); stmt1.close(); con1.close(); } } stmt.close(); con.close(); } catch(Exception e){System.out.println(e);} } else if (s2.equals("AND")){ try{ try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt = con.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String sql="SELECT NIM,DK,DK1 FROM temporari1"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ String nim = rs.getString("NIM"); String dk = rs.getString("DK"); String dk1 = rs.getString("DK1"); double a = Double.parseDouble(dk); double b = Double.parseDouble(dk1); if ( a <= b){
95
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009
Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String dk2 =String.valueOf(a); String sql6="UPDATE temporari1 SET DK_HASIL = ' "+dk2+"'WHERE NIM = ' "+nim+"' ;"; stmt1.executeUpdate(sql6); stmt1.close(); con1.close(); } else if ( b <= a ){ Connection con1 = null; Statement stmt1 = null; try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e){ System.err.println("Error loading driver:" + e.getMessage()); } try { con1 = DriverManager.getConnection( "jdbc:mysql://localhost:3306/temporari", "root", "elektro"); stmt1 = con1.createStatement(); } catch (SQLException e){ System.err.println("Error SQl: " + e.getMessage()); } String dk2 =String.valueOf(b); String sql7="UPDATE temporari1 SET DK_HASIL = ' "+dk2+"'WHERE NIM = ' "+nim+"' ;"; stmt1.executeUpdate(sql7); stmt1.close(); con1.close(); } } stmt.close(); con.close(); } catch(Exception e){System.out.println(e);} } }
96
Deddy Irwan : Implementasi Fuzzy Query Pada Database Untuk Perekomendasian Beasiswa, 2008. USU Repository © 2009