•  

    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

    BAHAN PRESENTASI UNTUK MATA KULIAH ELEKTRONIKA 2020/2021     Oleh : Rahma Azira Ichsan 2010953021   Dosen Pengempu: Dr. Da...