Anda di halaman 1dari 11

FUZZY DATABASE APPLICATION

Ardiansyah , 0606078273

Aplikasi ini merupakan bagian implementasi dari paper Efficient Processing of Nested Fuzzy SQL Queries in a Fuzzy Database dan hanya menerapkan konsep fuzzy database, yaitu bagaimana sebuah database pada suatu aplikasi (misalnya sistem informasi) memfasilitasi konsep fuzzy pada penyimpanan datanya. Aplikasi ini sudah saya tempatkan disuatu server dengan alamat http://ardisragen.web.id/fuzzydb

Scope: Aplikasi ini hanya menerapkan konsep fuzzy pada proses penyimpanan dan searching data sesuai dengan konsep yang telah dijelaskan pada paper di atas, tepatnya pada paper halaman 1-3. Sementara itu, proses efisiensi query yang dijelaskan di paper tidak diimplementasikan.

Petunjuk Instalasi: Software yang dibutuhkan adalah web server Apache 2 (yang sudah berisi modul pemrograman PHP 5) dan database MySQL 5. Ekstrak file fuzzydb.zip ke dalam directory htdocs pada instalasi Apache Anda. Pada Windows misalnya terdapat pada C:\Apache\htdocs atau C:\Program Files\Apache

Software

Fondation\Apache\htdocs. Atau jika Anda menginstall paket XAMPP,

directory htdocs dapat ditemukan di C:\Program Files\xampp\xampp\htdocs. Import file fuzzydb.sql pada directory fuzzydb, ke dalam database MySQL. Nama database, username, dan password pada database MySQL yang digunakan default pada aplikasi ini adalah dbname=fuzzydb, username=root, password=(kosong). Untuk mengubah nama database, username, atau password agar dapat disesuaikan dengan database MySQL Anda, silakan buka file Connection.class.php pada directory class. Pada browser, ketikkan URL berikut:
http://directory_htdocs_anda/fuzzydb, misalnya http://localhost/fuzzydb

Petunjuk Penggunaan: Terdapat 4 menu utama yang dapat dipilih, yaitu Membership Function, Add Data, View Data, dan Query.

Menu Membership Function (MF) dapat digunakan untuk:

Melihat membership function yang sudah didefinisikan yang hanya berupa trapezoidal MF dan triangle MF, yang memiliki 4 nilai interval [a b c d]. Triangle MF dapat dianggap sebagai trapezoidal MF di mana b = c, sehingga triangle MF [a b c] dapat dinyatakan dengan [a b b c]. Trapezoidal MF ini juga dapat memiliki 3 nilai [a b c] ketika d bernilai tak berhingga. Pada kasus tersebut, sebenarnya nilai interval yang dibutuhkan secara logika hanyalah a dan b, namun nilai c

harus didefinisikan untuk kebutuhan penggambaran grafik MF karena nilai c dibutuhkan sebagai nilai batas atas (nilai batas paling kanan pada sumbu X pada penggambaran grafik). o Mengubah nilai interval pada field Age dan Income. Age dan Income merupakan field pada tabel yang menerapkan konsep fuzzy. Menambah linguistic variable pada field Age dan Income. Namun dibutuhkan aplikasi tambahan seperti phpmyadmin.

Menu Add Data dapat digunakan untuk menambah input berupa data Name, Age, dan Income pada tabel Male dan Female. Saat mengisi nilai Age dan Income, Anda dapat memilih apakah akan memasukkan nilai crisp atau fuzzy. Pada saat pengisian 1 tupel (male atau female), ada field ID yang dibuat auto_increment.

Menu View Data dapat digunakan untuk melihat output berupa isi tabel Male dan Female.

Menu Query dapat digunakan untuk mencari data Male atau Female yang sesuai dengan input parameter yang didefinisikan melalui konsep fuzzy, yaitu field Age dan Income. Pada kedua input field Age dan Income, Anda dapat memilih parameter crisp atau fuzzy.

Hasil query juga akan menampilkan output Degree, yaitu satisfaction degree yang menyatakan seberapa besar 1 tupel memenuhi syarat / kondisi query.

Pada saat definisi parameter Age dan Income, Anda juga dapat menyisipkan input comparison berupa AND dan OR. Comparison AND akan mencari nilai degree minimum dari 2 syarat query yang di-compare, sedangkan OR mencari nilai maksimum.

Sebelum menekan tombol Execute untuk mengeksekusi query, Anda harus memilih option mengenai target query, yaitu Male Only atau Female Only.

Untuk mengetahui validitas input setelah menekan suatu tombol, Anda dapat mengecek apakah ada error report pada output di bagian atas halaman web. Error report yang terjadi biasanya hanya terjadi ketika input yang Anda masukkan kurang lengkap atau tidak sesuai dengan scope aplikasi.

Penjelasan Source Code: Aplikasi Fuzzy Database yang saya buat adalah berbasis web (web-based application) dengan menerapkan 3 layer MVC (Model, View, Controller). Saya menggunakan

framework PHP bernama Smarty sebagai template engine yang terdapat pada directory smarty-2.6.16. Selain Smarty, semua source code saya tulis sendiri, termasuk cara penggambaran grafik pada menu Membership Function. Pada menu tersebut, pada awalnya saya ingin memanfaatkan fasilitas dari MatLab untuk proses representasi grafik. Namun karena proses interaksi (antara aplikasi dengan user) yang akan semakin tidak praktis karena akan terjadi proses ekspor dan impor file, akhirnya saya memilih untuk menulis code sendiri. Untuk kebutuhan Model, saya membuat file *.class.php yang ditempatkan pada directory class. File-file ini digunakan untuk definisi class dan function yang akan digunakan oleh Controller. Untuk kebutuhan View, saya membuat file *.tpl, *.css, dan file-file image yang ditempatkan pada directory templates. Hasil compile file *.tpl secara otomatis oleh Smarty diletakkan pada directory templates_c. File-file ini digunakan untuk merepresentasikan tampilan interface web. Untuk kebutuhan Controller, saya membuat file *.php yang ditempatkan pada directory fuzzydb. File-file ini digunakan untuk mengontrol alur jalannya aplikasi saat berinteraksi dengan Anda. Selain itu juga terdapat file config.php pada directory libs untuk mengatur konfigurasi awal pada aplikasi dan mengatur konektivitas antar layer. Modifikasi (sebagai value add) yang saya lakukan terhadap konsep fuzzy database pada paper ada pada bagian penyimpanan data pada tabel database. Saya membuat 1 field penanda pada tabel male dan female, yang menandakan apakah data Age dan Income yang tersimpan merupakan data crisp atau fuzzy. Hal ini bermanfaat ketika pemrosesan query karena alur algoritma akan langsung mengetahui bahwa suatu data yang tersimpan pada suatu tabel crisp ataukah fuzzy. Pada paper, detail implementasi tentang hal ini tidak dijelaskan.

Penjelasan Struktur Database: Database yang saya gunakan adalah MySQL, yang sebenarnya merupakan conventional database yang hanya ditujukan untuk menangani nilai crisp. Akan tetapi saya berusaha melakukan modifikasi pada isi tabelnya agar bisa menampung nilai-nilai yang fuzzy. Nilai fuzzy tersebut tetap disimpan secara logic sebagai nilai crisp, tetapi perbedaannya dengan nilai crisp murni adalah bahwa nilai fuzzy tersebut memiliki interval, seperti yang telah dijelaskan sebelumnya di bagian Petunjuk Penggunaan saat penjelasan Membership Function. Ada 4 tabel yang saya buat di dalam MySQL, yaitu age, income, male, dan female. Tabel male dan female merupakan entity utama dalam aplikasi ini. Kedua tabel tersebut memiliki field yang bisa bernilai fuzzy, yaitu pada field age dan income. Oleh karena itu, perlu dibuat 2 tabel baru, yaitu tabel age dan income untuk menangani kebutuhan fuzzy ini.

Berikut ini struktur tabelnya:


CREATE TABLE `male` ( `id` int(5) NOT NULL auto_increment, `fname` varchar(30) default NULL, `age_opt` enum('c','f') default NULL, `age` varchar(30) default NULL, `income_opt` enum('c','f') default NULL, `income` varchar(30) default NULL, PRIMARY KEY ); (`id`)

CREATE TABLE `female` ( `id` int(5) NOT NULL auto_increment, `fname` varchar(30) default NULL, `age_opt` enum('c','f') default NULL, `age` varchar(30) default NULL, `income_opt` enum('c','f') default NULL, `income` varchar(30) default NULL, PRIMARY KEY ); (`id`)

CREATE TABLE `age` ( `id` int(5) NOT NULL auto_increment, `predicate` varchar(50) NOT NULL, `value` varchar(50) NOT NULL, PRIMARY KEY ); (`id`)

CREATE TABLE `income` (

`id` int(5) NOT NULL auto_increment, `predicate` varchar(50) NOT NULL, `value` varchar(50) NOT NULL, PRIMARY KEY ); (`id`)

Struktur tabel male dan female adalah sama, yaitu memiliki field id, fname, age_opt, age, income_opt, dan income. Field id berisi primary key, field fname berisi nama male/female, field age_opt berisi nilai trivial yaitu crisp atau fuzzy yang dinyatakan dengan karakter c atau f. Jika field age_opt bernilai c (crisp), field age akan memiliki nilai age (crisp) yang sebenarnya. Tetapi jika bernilai f (fuzzy), field age akan berupa nilai id yang me-reference ke field id di tabel age. Hal yang serupa berlaku untuk field income_opt dan income karena field age dan income pada tabel male dan female sama-sama dapat bernilai fuzzy. Struktur tabel age dan income adalah sama, yaitu memiliki field id, predicate, dan value. Field id berisi primary key yang di-reference oleh tabel male dan female, field predicate berisi linguistic variable berupa kata-kata seperti medium young, about 35, dan sebagainya, sedangkan field value berisi nilai interval seperti yang telah dijelaskan sebelumnya di bagian Membership Function.

Penjelasan Algoritma: Algoritma terutama dilakukan ketika: Penggambaran grafik membership function (file img.php) Hal ini dilakukan dengan bantuan suatu library dari PHP yang dapat menggambar grafik 2 dimensi. Nilai-nilai interval membership function dibaca dari tabel age dan income lalu dibuat garis satu demi satu. Penentuan satisfaction degree dari query (file query.php) Proses ini dilakukan ketika Anda ingin melihat hasil query yang berdasarkan pada nilai crisp atau fuzzy. Satisfaction degree menyatakan seberapa besar suatu tuple di tabel male atau female memenuhi suatu kondisi query. Setiap tuple di tabel male atau female akan dihitung satisfaction degree-nya berdasarkan membership function yang telah dibuat pada tabel age dan income. Prosedur query yang digunakan yaitu Anda memilih satu field yang akan dicari ke dalam tabel male atau female berupa nilai fuzzy atau crisp. Artinya, ada 2 nilai yang harus dicocokkan dan diperoleh nilai satisfaction degreenya, yaitu dari query dan dari 1 field di tabel database. Pada proses perolehan satisfaction degree ini, ada 3 kasus algoritma yang saya temukan, sesuai dengan penjelasan dari paper, yaitu:

Pasangan nilai berupa nilai crisp dan crisp. Pada kasus ini, 2 nilai crisp dicocokan dan hanya memiliki 2 kemungkinan nilai. Jika sama, degree bernilai 1, atau 0 jika sebaliknya.

Pasangan nilai berupa nilai crisp dan fuzzy. Pada kasus ini, nilai crisp dimasukkan ke dalam membership function. Misalnya age 35 jika dimasukkan ke membership function medium young akan memiliki suatu nilai degree [01]

Pasangan nilai berupa nilai fuzzy dan fuzzy. Pada kasus ini, satisfaction degree merupakan nilai maksimum dari sekumpulan nilai di mana kedua nilai fuzzy tersebut memiliki degree yang lebih besar dari 0. Jika dilihat secara visual dari grafik membership function, nilai degree yang dimaksud adalah nilai maksimum dari daerah irisan antara 2 membership function tersebut. Kasus ini merupakan kasus utama yang dapat menyebabkan lambatnya performance (sesuai yang disebutkan di dalam paper). Algoritma yang saya gunakan yaitu mengumpulkan semua nilai satisfaction degree dari kedua membership function, lalu untuk kedua nilai yang sama-sama lebih besar dari nol, saya cari nilai maksimumnya.

Analisis: Seperti yang telah dijelaskan pada paper, performa fuzzy database lebih lambat dibandingkan conventional database dalam hal pemrosesan query, yaitu ketika suatu tupel harus dievaluasi satisfaction degree-nya terhadap suatu kondisi query. Hal ini memakan waktu yang lebih lama dibandingkan conventional database. Pada conventional database (jika dianggap sebagai subset dari fuzzy database), evaluasi satisfaction degree hanya akan bernilai 0 atau 1. Sedangkan pada fuzzy database, satisfaction degree harus dihitung ke dalam sebuah membership function terlebih dahulu. Proses ini dapat melibatkan proses berikutnya seperti mencari irisan dari 2 membership function, mencari nilai minimum dan maksimum dari satisfaction degree, atau mengurutkan tupel sebelum proses Merge-Join. Performa yang lebih lambat akan semakin terasa ketika proses Equi-Join. Pada kasus ini, algoritma fuzzy database harus mengecek satu demi satu tupel dari 2 tabel yang di-join. Oleh karena itulah, paper di atas menerapkan algoritma baru berupa Merge-Join daripada Nested-Loop-Join saat proses Equi-Join pada setiap query sehingga akan didapatkan efisiensi yang cukup signifikan dalam hal performa. Namun, proses Equ-Join belum diimplementasikan pada aplikasi ini.