BAB 8
STAND-ALONE FIS (Fuzzy Inference System) BAHASA C
Fuzzy Logic Toolbox sudah menyediakan stand-alone FIS dalam bahasa C. Dalam direktori instalasi MATLAB, cari folder toolbox¥fuzzy¥fuzzy dan akan muncul dua file, yaitu fismain.c dan fis.c. Kedua file tersebut masih berupa source code yang belum dikompliksi dan sangat memungkinkan untuk dikomplikasi sesuai dengan kebutuhan. Setelah dikomplikasi menjadi sebuah executable file, file tersebut bisa membaca file FIS yang dihasilkan dari MATLAB dan file data input (file teks) untuk FIS.
8.1 Komplikasi dalam Linux/Unix
Jika ingin menggunakan FIS pada sistem operasi Linux atau Unix, file apat dikomplikasi dengan memberikan satu baris perintah berikut dalam Unix promt atau Linux promt:
cc -o -o fis.exe fismain.c lm
perhatikan bahwa file fis.c tidak harus dipanggil secara eksplisit dalam perintah komplikasi di atas karena sudah dipanggil dalam file fismain.c dengan perintah:
#include “fis.c”
Hasil dari komplikasi tersebut adalah sebuah executable file yang diberi nama fis.exe. Untuk nama file bisa diganti formatnya dan tidak harus .exe.
8.2 Komplikasi dalam Windows
Berikut adalah contoh cara mengkomplikasi fismain.c dalam Windows dengan menggunakan Visual C++ bawaan Microsoft Visual Studio. Langkah-langkahnya, yaitu:
1. Pilih New Project. Untuk bisa mengkomplikasi suatu file menjadi executable file hnya bisa dulakukan dengan membuat suatu project terlebih dahulu.
2. Pada Project Type, klik tanda’-‘ pada item Visual C++ Project lalu pilih Win32. Pada kotak Templates, pilih Win32 Console Project.
3. Tentukan direktori project lalu beri nama. Pastikan direktori sesuai dengan yang diinginkan dengan tampilnya tulisan Project will be created at...
4. Pilihi Application setting.
5. Pastikan Application Type adalah Console Application
.
6. Pilih Empty Project pada bagian Additional Options.
7. Pilih menu untuk menggbukan source code file menjadi bagian dari project .
8. Pada folder instalasi Matlab, cari folder fuzzy¥fuzzy, temukan file fismain.c, lalu klik dua kali file tersebut.
9. Pilih menu untuk komplikasi fismain.c menjadi fis.exe. Nama fis.exe akan selalu sesuai dengan nama project yang diisikan sebelumnya.
10. Jika komplikasi berhasil, maka akan muncul tampilan hasil komplikasi seperti pada Gambar 8.10. Executable file fis.exe seharusnya bisa ditemukan di folder e:¥Matlab¥work¥fis¥Debug, yang mana adalah lokasi default jika urutan langkah yang ditempuh sama persis dengan langkah di atas.
8.3 Eksekusi
Setelah komplikasi berhasl, silahkan menuju ke folder dimana fis.exe berada kemudian ketik:
fis.exe
dan akan menghasilkan respon:
Usage: fis.exe data_file fis_file
Pesan ini berarti fis.exe meminta dua file: data_file dan fis_file. data_file adalah file yang berisi matriks data masukan untuk FIS. Tiap baris dalam data_file adalah sebuah vektor masukan, dan tiap kolomnya bersesuaian dengan vektor input data tertentu. fis_file adalah sebuah file FIS berekstensi .fis yang dibuat dan disimpan dari Matlab. Sebagai contoh, digunakan data yang didapat dengan mengeksekusi file tripdata.m. Pada Matlab Editor, ketikkan:
% menghapus sueua variabel yang ada dalam memori clear all % membersihkan tampilan clc % mengeksekusi file trpdata.m tripdata % membuat FIS awal, dengan % data input : datin % hasil ekekus tripdata % data output : datout % hasil eksekusi tripdata fis=genfis2(datin, datout, 0.5); % melatih FIS awal, dan menyimpan hasil pelatihan % dalam variabel trainedfis trainedfis=anfis([datin datout],fis,[55 0 0.1]); |
Simpan program di atas, misalkan dengan nama file fisku.m, lalu pada MATLAB promt, ketikkan:
fisku
maka akan didapatkan sebuah FIS trainedfis yang sudah dilatih dengan pasangan data datin dan datout.
Sekarang, persiapkan data input dan file FIS sehingga bisa menjalankan fis.exe tanpa bergantung pada MATLAB. Misalkan, dipakai datin sebagai data masukan. Simpan datin ke disk dalam format ASCII dengan perintah berikut:
save fis_in.dat datin -ascii
maka datin akan diubah ke format ASCII dan disimpan ke dalam disk dengan nama file fis_in.dat. lokasi file sama dengan lokasi Current Directory dari MATLAB. Simpan variabel FIS trainedfis ke dalam disk dengan perintah:
writefis(trainedfis)
maka akan muncul kotak dialog Save FIS. Ketikkan nama untuk FIS, misalkan trainedfis lalu Save sehingga variabel workspace trainedfis akan disimpan dalam disk dengan nama trainedfis.fis. pindahkan dan copy file fis_in.dat dan trainedfis.fis ke folder dimana fis.exe berada. Jalankan perintah:
fis.exe fis_in.dat trainedfis.fis
Dengan perintah ini, output dari FIS trainedfis akan ditampilkan, dimana setiap barisnya adalah vektor output. Output dari FIS ini bisa langsung disimpan ke dalam disk (berformat ASCII) dengan perintah:
fis.exe fis_in.dat trainedfis.fis > out_trainedfis.dat
dimana out_trainedfis.dat adalah nama file teks dari output FIS.
Beberapa hal yang perlu diketahui mengenai stand-alone executable file:
1. ANSI C compatible
2. Hanya bisa memakai fungsi-fungsi keanggotaan yang disediakan delam Fuzzy Logic Toolbox yang berjumlah 11 buah.
3. fismain.c hanya berisi fungsi main.c. Namun, tetap bisa digabunggakan dengan source file code buatan sendiri.
4. Jika ingin menggunakan fungsi-fungsi keanggotaan buatan sendiri, file fis.c yang berisi semua fungsi yang diperlukan untuk melakukan proses fuzzy inference harus dimodifikasi.
8.4 Membuat Sendiri Stand-Alone FIS
Stand-alone FIS bahasa C++
#include <stdio.h> #include <math.h>
/*Generalized bell curve membership function */ double gbllmf (double X, double * par) { double A,B,C,dom; A=par[0]; B=par[1]; C=par[2]; Dom=1./pow( 1+fabs( (X-C)/A ),2*B); Return dom; }
/*Takagi-Sugeno FIS */ double TK-FIS(double * in_data, double * parin, double * parout,int * rule,int * par) /* in_data : sebuah vektor data input parin : matriks parameter membership function keseluruhan input parout : matriks koefisien persamaan garis semua bagain THEN-rules rule : matriks nomor membership function dan noor persamaan garis yang dupakai dalam tiap TF-THEN rule par : vektor parameter yang berisi {input_num, mf_num, mf_par_num, rule_num} (lihat penjelasan di bawah) */ { double z, //output dari rule berupa a line equation w, //antecedent weight W, //total weight FISOut; //FIS Output
int input_num,//jumlah input mf_num,//jumlah membership function tiap input mf_par_num,//jumlah parameter membership function tiap input rule_num,//jumlah rule mf_no,//kode indeks membership function parin_col,//indeks kolom pada matriks parin i,j,k; input_num=par[0]; mf_num=par[1]; mf_par_numpar[2]; rule_num=par[3];
double * mf_par = new double(mf_par_num+1); FISOut=0.; W=0.;
for (i=1;i<=rule_num;i++) { w=1.0; z=0.0; for (j=1;j<=input_num;j++) { mf_no=rulr[(i-1)*(input_num+1+j)]; for (k=1;k<=mf_par_num;k++) { parin_col=(mf_no-1)*mf_par_num+k; mf_par[k-1]=parin[(j-1)*mf_num*mf_par_num+parin_cc1)] } w*=gbellmf(in_data[j-1],mf_par);//fuzzy operation AND z+=in_data[j-1]*parout[(i-1)*(input_num+1)+j]; } z+=parout[(i-1)*(input_num+1)+input_num+1]; FISOut+=w*z; W+=w; } FISOut=FISOut/W; Return FISOut; } |
Source code pada program di atas berisi dua buah fungsi: gbllmf dan TK_FIS. Bagian terpenting implementasi FIS ada pada fungsi TK_FIS dengan defenisi:
double TK-FIS(double * in_data, double * parin, double * parout,int * rule,int * par)
penjelasan format data yang harus diisikan ke argumen in_data, parin, parout, rule, dan par dalam fungsi TK_FIS diberikan di bawah. Semua argumen tersebut berupa single array tetapi difungsikan sebagai “matriks”, tergntung pada cara pengaksesan elemen-elemennya.
Untuk menggunakan fungsi TK_FIS, semua input FIS harus mempunyai jumlah dan jenis membership function berjenis gbellmf (generalized bell cureve membership function). TK_FIS mengasumsikan bahwa pada bagian antecedent IF-THEN rule, antar input hanya berlaku operasi fuzzy logic AND.
Video terkait materi
Buku Belajar Cepat Fuzz Logic menggunakan MATLAB Oleh Dr. Eng. Agus Naba
HTML [download]
Tidak ada komentar:
Posting Komentar