Penerapan Metode Fuzzy Tsukamoto Untuk Sistem Kontrol Frekuensi Putar Kipas Angin

Logika fuzzy bila dibandingkan dengan logika konvensional, kemampuannya dalam proses pelanaran secara bahasa menjadi kelebihan tersendiri. Ditambah pula kelebihannya dalam perancangannya yang tidak memerlukan persamaan matematik yang rumit, mampu memodelkan fungsi non linear bahkan dapat mengaplikasikan pengalaman-pengalaman para pakar secara langsung tanpa harus melalui proses pelatihan.

Pada logika fuzzy, sistem inferensi (penalaran) yang paling populer ada tiga macam, yaitu metode Tsukamoto, Sugeno dan Mamdani. Kali ini, saya tidak berpanjang lebar untuk membahas teori-teori logika fuzzy beserta sistem inferensinya. Sangat banyak, artikel atau bahkan jurnal-jurnal yang membahas teori fuzzy, teman-teman bisa belajar teori fuzzy dari sana. Saya lebih tertarik untuk langsung mengimplementasikan logika fuzzy dan salah satu sistem inferensinya ke dalam satu studi kasus. Baik implementasi secara manual (perhitungan matematis) maupun diterapkan langsung ke dalam salah satu bahasa pemrograman.

Saya berencana untuk memberikan contoh implementasi logika fuzzy beserta semua sistem inferensinya (Tsukamoto, Sugeno dan Mamdani) dalam studi kasus yang berbeda. Namun saat ini, implementasi logika fuzzy saya arahkan langsung ke sistem inferensi metode tsukamoto. Untuk metode sugeno dan mamdani, akan saya bahas di studi kasus yang lain.


Contoh studi kasus untuk implementasi metode fuzzy tsukamoto adalah sistem kontrol untuk menentukan frekuensi putar sebuah kipas angin. Sistem kontrol ini menggunakan dua masukan, yaitu kecepatan putar kipas dan suhu, dan menghasilkan keluaran berupa frekuensi kipas angin. Demi memperjelas permasalahan studi kasus, berikut penjelasan lebih detail :

Untuk mengatur frekuensi putar kipas angin secara otomatis digunakan sistem kontrol yang dapat mengkontrol sumber frekuensi putar kipas angin. Sistem kontrol ini dipengaruhi oleh tiga variabel, yaitu kecepatan putar kipas angin, suhu ruangan, dan sumber frekuensi putar kipas angin. Berdasarkan data spesifikasi dari pabrik, kecepatan putar kipas angin terkecil adalah 1000 rpm (rotation per minute) dan terbesar adalah 5000 rpm, kemampuan sensor suhu rungan berada dalam interval 100 kelvin hingga 600 kelvin, sedangkan sumber frekuensi putar kipas angin hanya mampu menyediakan frekuensi sebesar 2000 hz hingga7000 hz. Apabila sistem kontrol ruangan menggunakan 4 rule berikut :

[R1] IF kecepatan LAMBAT dan suhu TINGGI then frekuensi KECIL 
[R2] IF kecepatan LAMBAT dan suhu RENDAH then frekuensi KECIL 
[R3] IF kecepatan CEPAT dan suhu TINGGI then frekuensi BESAR 
[R4] IF kecepatan CEPAT dan suhu RENDAH then frekuensi BESAR 

Berapakah sumber frekuensi putar yang dihasilkan sistem kontrol bila saat itu sensor suhu menunjukkan angka 300 kelvin, sedangkan kipas angin berputar dengan kecepatan 4000 rpm?

Dalam memecahkan solusi studi kasus menggunakan model fuzzy tsukamoto, urutan langkah yang akan ditempuh adalah :
  1. Fuzzifikasi
  2. Inferensi Tsukamoto 
  3. Defuzzifikasi
Mari, kita hitung secara matematis sesuai dengan urutan langkah tersebut : 
TAHAP 1 : FUZZIFIKASI
Fuzzifikasi adalah proses untuk merubah nilai crips menjadi nilai fuzzy. Nilai fuzzy berupa himpunan fuzzy yang masing-masing akan memiliki derajat keanggotaan dengan rentang antara 0 hingga 1. Sebagaimana yang dijelaskan dalam studi kasus, variabel yang digunakan ada tiga macam, dua variabel sebagai input (kecepatan kipas dan suhu) dan satu variabel sebagai output, yaitu frekuensi. Masing-masing variabel memiliki himpunan fuzzy-nya :
  • Variabel Kecepatan = {LAMBAT, CEPAT} dengan domain 1000 - 5000
  • Variabel Suhu = {RENDAH, TINGGI} dengan domain 100-600
  • Variabel Frekuensi = {KECIL, BESAR} dengan domain 2000-7000
Fuzzifikasi Variabel Kecepatan

Gambar 1 Fungsi Keangotaan Variabel Kecepatan
Variabel kecepatan terdiri atas 2 himpunan fuzzy, yaitu LAMBAT dan CEPAT. Fuzzifikasi kecepatan adalah untuk mencari derajat keanggotaan himpunan LAMBAT dan CEPAT berdasarkan masukan kecepatan sebesar 4000 rpm. derajat keanggotaan kecepatan disimbolkan dengan miu[x].

Maka, derajat keanggotaan untuk kecepatan 4000 rpm, adalah : 
miuLAMBAT[4000] = (5000-4000)/4000 = 0,25 
miuCEPAT[4000] = (4000-1000)4000 = 0,75

Fuzzifikasi Veriabel Suhu 


Gambar 2 Fungsi Keanggotaan Variabel Suhu
Variabel suhu terdiri atas 2 himpunan fuzzy, yaitu RENDAH dan TINGGI. Fuzzifikasi suhu adalah untuk mencari derajat keanggotaan himpunan RENDAH dan TINGGI berdasarkan masukan suhu sebesar 300 kelvin. derajat keanggotaan suhu disimbolkan dengan miu[y].





Maka, derajat keanggotaan untuk suhu 300 kelvin, adalah :
miuRENDAH[300] = (600-300)/500 = 0,6
miuTINGGI[300] = (300-100)/500 = 0,4

Fuzzifikasi Variabel Frekuensi

Gambar 3 Fungsi Keanggotaan Variabel Frekuensi
variabel frekuensi terdiri atas dua himpunan, yaitu KECIL dan BESAR, dengan domain pada interval 2000-7000. Domain tersebut berguna dalam proses perhitungan nilai z, pada saat proses inferensi tsukamoto. nilai z pada metode tsukamoto, diperoleh dengan cara : 
z = zmax - a_predikat(zmax - zmin) ; 
zmax = 7000 ; zmin = 2000 ; a_predikat = hasil fungsi MIN


TAHAP 2 : INFERENSI TSUKAMOTO
Pada mesin inferensi, kita terapkan fungsi MIN untuk setiap aturan pada aplikasi fungsi implikasinya. Sehingga penerapan fungsi MIN dilakukan sebanyak 4 kali, sesuai dengan banyaknya aturan fuzzy-nya (rulebase) . 


[R1] IF kecepatan LAMBAT dan suhu TINGGI then frekuensi KECIL 
a_predikat1 = min(miuLAMBAT[4000], miuTINGGI[300])
a_predikat1 = min(0,25 ; 0,4)
a_predikat1 = 0,25
z1 = zmax - a_predikat1 (zmax-zmin) 
z1 = 7000 - 0,25(7000-2000)
z1 = 5750 rpm 

[R2] IF kecepatan LAMBAT dan suhu RENDAH then frekuensi KECIL 
a_predikat2 = min(miuLAMBAT[4000], miuRENDAH[300])
a_predikat2 = min(0,25 ; 0,6)
a_predikat2 = 0,25
z2 = zmax - a_predikat2(zmax-zmin) 
z2 = 7000 - 0,25(7000-2000)
z2 = 5750 rpm 

[R3] IF kecepatan CEPAT dan suhu TINGGI then frekuensi BESAR 
a_predikat3 = min(miuCEPAT[4000], miuTINGGI[300])
a_predikat3 = min(0,75 ; 0,4)
a_predikat3 = 0,4
z3 = zmin - a_predikat3(zmin-zmax) 
z3 = 2000 - 0,4(2000-7000)
z3 = 4000 rpm 

[R4] IF kecepatan CEPAT dan suhu RENDAH then frekuensi BESAR 
a_predikat4 = min(miuCEPAT[4000], miuRENDAH[300])
a_predikat4 = min(0,75 ; 0,6)
a_predikat4 = 0,6
z4 = zmin - a_predikat4(zmin-zmax) 
z4 = 2000 - 0,6(2000-7000)
z4 = 5000 rpm 

TAHAP 3 : DEFUZZIFIKASI 
Nilai tegas z dicari menggunakan rata-rata terbobot, yaitu : 





Jadi dapat disimpulkan, melalui hasil defauzzifikasi ini diketahui bahwa suhu 300 kelvin dan kecepatan 4000 rpm akan menghasilkan sumber frekuensi putar kipas angin sebesar 4983,33 Hz.

Sesuai yang saya janjikan, saya tidak hanya menghitung secara matematis (manual), namun juga mengimplementasikan studi kasus secara langsung dalam bentuk pemrograman, yang dalam hal ini saya menggunakan pemrograman java. Program saya buat dalam bentuk console maupun berbasis interface. Tentunya, program dibuat berdasarkan patokan studi kasus.

Berikut ini kode sumber program

/**
 *
 * @author CHARIS
 */
public class FuzzyTsukamoto {

    private double kecepatanLambat;
    private double kecepatanCepat;
    private double suhuRendah;
    private double suhuTinggi;
    private double a_predikat1, a_predikat2, a_predikat3, a_predikat4;
    private double z1, z2, z3, z4; 
    public double zTotal,z,a_pred_z ; 

    public void fuzzifikasiKecepatan(double kecepatan) {
        if (kecepatan <= 1000) {
            kecepatanLambat = 1;
            kecepatanCepat = 0;
        } else if (kecepatan >= 1000 && kecepatan <= 5000) {
            kecepatanLambat = (5000 - kecepatan) / (5000 - 1000);
            kecepatanCepat = (kecepatan - 1000) / (5000 - 1000);
        } else {
            kecepatanLambat = 0;
            kecepatanCepat = 1;
        }
        System.out.println("derajat keanggotaan kecepatan cepat : " + kecepatanCepat);
        System.out.println("derajat keanggotaan kecepatan lambat : " + kecepatanLambat);
    }

    public void fuzzifikasiSuhu(double suhu) {
        if (suhu <= 100) {
            suhuRendah = 1;
            suhuTinggi = 0;
        } else if (suhu >= 100 && suhu <= 600) {
            suhuRendah = (600 - suhu) / (600 - 100);
            suhuTinggi = (suhu - 100) / (600 - 100);
        } else {
            suhuRendah = 0;
            suhuTinggi = 1;
        }
        System.out.println("derajat keanggotaan suhu rendah : " + suhuRendah);
        System.out.println("derajat keanggotaan suhu tinggi : " + suhuTinggi);
    }

    public void mesinInferensiTsukamoto() {
        {
            // IF kecepatan LAMBAT dan suhu TINGGI then Frekuensi   KECIL
            a_predikat1 = Math.min(kecepatanLambat, suhuTinggi);
            z1 = 7000 - a_predikat1 * (7000 - 2000);
            System.out.println("a predikat 1 : " + a_predikat1 + " | " + "z1 : " + z1);

            // IF kecepatan LAMBAT dan suhu RENDAH then Frekuensi KECIL
            a_predikat2 = Math.min(kecepatanLambat, suhuRendah);
            z2 = 7000 - a_predikat2 * (7000 - 2000);
             System.out.println("a predikat 2 : " + a_predikat2 + " | " + "z2 : " + z2);

            // IF kecepatan CEPAT dan suhu TINGGI then Frekuensi BESAR
            a_predikat3 = Math.min(kecepatanCepat, suhuTinggi);
            z3 = 2000 - a_predikat3 * (2000 - 7000);
             System.out.println("a predikat 3 : " + a_predikat3+ " | " + "z3 : " + z3);

            // IF kecepatan CEPAT dan suhu RENDAH then Frekuensi BESAR
            a_predikat4 = Math.min(kecepatanCepat, suhuRendah);
            z4 = 2000 - a_predikat4 * (2000 - 7000);
            System.out.println("a predikat 4 : " + a_predikat4 + " | " + "z4 : " + z4);
        }
    }
    
    public void defuzzifikasi(){
        a_pred_z = (a_predikat1*z1)+(a_predikat2*z2)+(a_predikat3*z3)+(a_predikat4*z4) ;
        z = a_predikat1+a_predikat2+a_predikat3+a_predikat4 ;
        zTotal = a_pred_z/z ;
        System.out.println("Output Fuzzy berupa Frekuensi Kipas : "+zTotal + " Hz");
    }

    public static void main(String[] args) {
        FuzzyTsukamoto fs = new FuzzyTsukamoto();
        double kec = 4000 ; double suhu = 300 ; 
        System.out.println("========== INPUT FUZZY ==========");
        System.out.println("Kecepatan : " + kec + " rpm");
        System.out.println("Suhu      : " + suhu + " kelvin");
        System.out.println("========== FUZZIFIKASI KECEPATAN ==========");
        fs.fuzzifikasiKecepatan(kec);
          System.out.println("========== FUZZIFIKASI SUHU ==========");
        fs.fuzzifikasiSuhu(suhu);
         System.out.println("========== INFERENSI TSUKAMOTO ==========");
        fs.mesinInferensiTsukamoto();
        System.out.println("========== DEFUZZIFIKASI TSUKAMOTO ==========");
        fs.defuzzifikasi() ;
    }
}

Berikut hasil keluaran program secara console, dengan hasil akhir yang sama persis dengan perhitungan manual :
Gambar 4 Program secara konsole
Sedangkan, berikut ini hasil keluaran program berbasis GUIdengan hasil akhir yang juga sama persis dengan perhitungan manual :
Gambar 5 Program secara GUI
Demikianlah, penjelasan ringkas mengenai penerapan metode fuzzy tsukamoto berdasarkan contoh perhitungan manual, maupun contoh pemrograman. Bagi teman-teman yang ingin bertanya atau terdapat hal-hal yang belum mengerti dari penjelasan diatas bisa kontak saya secara langsung melalui email atau whatApp atau melalui komentar di blog ini. Terima kasih

Bagi teman-teman yang ingin mencoba program GUI implementasi fuzzy tsukamoto untuk sistem kontrol diatas, silakan hubungi kami. Terima kasih.

Lebih detail, silakan lihat juga demo programnya di channel resmi youtube Informatika Kita



Referensi 
  • Sutojo, T, dkk. 2011. Kecerdasan Buatan. Yogyakarta : Andi 
  • ________________ . Logika Fuzzy Metode Tsukamoto. http://www.metode-algoritma.com/. Diakses pada tanggal 28 Agustus 2016

Subscribe to receive free email updates:

5 Responses to "Penerapan Metode Fuzzy Tsukamoto Untuk Sistem Kontrol Frekuensi Putar Kipas Angin"

  1. Lengkap sekali tutorialnya om Charis (Y_
    Thengkiu

    ReplyDelete
  2. kok tutorial dama codingan yang GUInya engga ada mas charis??
    saya mau tanya2 tentang masalah ini dong.. soalnya skripsi saya tentang fuzzy tsukamoto

    ReplyDelete
  3. boleh minta source code GUI kak ^^

    ReplyDelete

Terima Kasih Telah Berkunjung, Silakan Berkomentar...
Kritik dan Saran Teman-Teman Sangat Memotivasi Saya (^_^)