Fuzzy vs Logika Klasik
Sebelumnya saya sudah membuat artikel tentang penjelasan logika ini, namun kali ini saya membuat dengan versi yang lebih lengkap dari sebelumnya. Pada artikel ini saya akan membagikan pengetahuan saya tentang Apa itu Logika Fuzzy dan Cara Menggunakannya dan apa bedanya dengan logika if then.
Untuk dapat membayangkan apa itu logika fuzzy mari kita pelajari sedikit tentang logika klasik.
Logika Klasik
Logika klasik adalah sistem logika yang didasarkan pada dua konsep dasar: benar atau salah dan operator logika (seperti “dan”, “atau”, “tidak”). Proposisi dalam logika klasik bisa dianggap sebagai “sudah ditentukan” benar atau salah, tanpa ambiguitas atau kemungkinan tengah-tengah. Logika ini dalam pemrograman sering dikenal dengan logika “if-then”.
Contoh sederhana dari logika klasik dalam program arduino adalah mengontrol LED menyala atau mati, dimana LED menyala jika tombol ditekan, dan mati jika tombol dilepas. Jika melihat kode seperti ini:
const int buttonPin = 2;
const int ledPin = 13;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
if (digitalRead(buttonPin) == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
Kode di atas adalah contoh sederhana dari logika klasik yang digunakan dalam program arduino.
Fuzzy
Logika fuzzy adalah teknologi yang memungkinkan pengambilan keputusan dan pemodelan sistem yang tidak pasti atau tidak jelas. Ini merupakan alternatif dari logika klasik yang hanya menangani masalah yang pasti atau biner (ya atau tidak).
Dalam logika ini, suatu variabel dapat memiliki nilai yang tidak pasti atau “fuzzy”. Misalnya, suhu dapat dianggap “hangat” atau “dingin” meskipun tidak ada standar suhu yang pasti dapat ditentukan sebagai “hangat” atau “dingin”, karena setiap orang atau lokasi memiliki ukuran tertentu untuk menyatakan kondisi ini.
Tabel perbandingan
Untuk membayangkan ini, berikut ini adalah tabel perbandingan antara fuzzy dan logika klasik:
Fuzzy Klasik Menerima input yang tidak pasti atau tidak terdefinisi dengan baik Menerima input yang terdefinisi dengan baik Menggunakan istilah “linguistik” untuk menentukan tingkat kepastian atau ketidakpastian dari input Menggunakan logika true/false atau 1/0 untuk menentukan validitas dari input Menggunakan aturan fuzzy yang menggabungkan logika if-then dengan kategori fuzzy untuk menentukan output Menggunakan logika if-then untuk menentukan output yang sesuai dengan input yang diterima Menghasilkan output yang tidak pasti atau tidak terdefinisi dengan baik Menghasilkan output yang terdefinisi dengan baik
Logika fuzzy dapat menggunakan logika klasik dalam proses pengambilan keputusannya. Dalam logika ini, kita dapat menggunakan aturan fuzzy yang ditentukan dengan menggunakan logika if-then, seperti “jika suhu sangat dingin maka kondisi suhu dingin, jika suhu sedang maka kondisi suhu sedang, jika suhu panas maka kondisi suhu panas” . Namun, yang membedakan dengan logika klasik adalah bahwa dalam fuzzy, input dan output tidak harus bersifat Boolean atau terdefinisi dengan baik, tapi dapat dinyatakan dalam bentuk linguistic variabel.
Sedangkan logika klasik, biasanya tidak dapat menggunakan fuzzy dalam proses pengambilan keputusannya. karena logika klasik hanya dapat mengambil keputusan berdasarkan input yang terdefinisi dengan baik dan mengeluarkan output yang terdefinisi dengan baik. Namun, seperti yang saya sebutkan sebelumnya, sistem logika klasik dan fuzzy dapat digabungkan dalam sebuah sistem, sehingga output dari sistem fuzzy dapat digunakan sebagai input dalam sistem logika klasik.
Jika diubah dalam bentuk program akan tampak seperti :
Fuzzy Klasik fl.addFuzzyInput("dingin", FuzzyLogic::triangle, 0, 0, 15);
if (suhu < 15) {kondisi_suhu = "dingin";}
fl.addFuzzyInput("sedang", FuzzyLogic::triangle, 10, 15, 25);
else if (suhu >= 15 && suhu <= 30) {kondisi_suhu = "sedang";}
fl.addFuzzyInput("panas", FuzzyLogic::triangle, 20, 30, 40);
else {kondisi_suhu = "panas";}
fl.addFuzzyOutput("dingin", FuzzyLogic::triangle, 0, 0, 15);
fl.addFuzzyOutput("sedang", FuzzyLogic::triangle, 10, 15, 25);
fl.addFuzzyOutput("panas", FuzzyLogic::triangle, 20, 30, 40);
fl.addRule("if suhu is dingin then kondisi_suhu is dingin");
fl.addRule("if suhu is sedang then kondisi_suhu is sedang");
fl.addRule("if suhu is panas then kondisi_suhu is panas");
fl.setInput("suhu", suhu);
kondisi_suhu = suhu;
fl.fuzzify();
int kondisi_suhu = fl.getOutput("kondisi_suhu");
Penerapan Fuzzy
Logika ini digunakan dalam berbagai bidang, seperti:
- Kontrol: fuzzy digunakan untuk mengontrol sistem yang tidak pasti atau tidak jelas, seperti sistem kontrol suhu atau sistem kontrol mobil.
- Sistem intelijen: fuzzy digunakan dalam sistem intelijen buatan untuk mengambil keputusan yang tidak pasti.
- Sistem pakar: fuzzy digunakan dalam sistem pakar untuk mengevaluasi kasus yang tidak pasti dan memberikan saran yang sesuai.
- Sistem pengambilan keputusan: fuzzy digunakan dalam sistem pengambilan keputusan untuk mengevaluasi alternatif yang tidak pasti dan membuat keputusan yang sesuai.
- Sistem pengenalan pola: fuzzy digunakan dalam sistem pengenalan pola untuk mengidentifikasi pola yang tidak pasti dalam data.
Tingkat Keanggotaan (Membership Degree)
Dalam ilmu fuzzy, ada satu istilah yaitu Tingkat keanggotaan. Tingkat keanggotaan atau “membership degree” atau “degree of membership” adalah konsep dasar dalam fuzzy yang menggambarkan tingkat seberapa jauh suatu elemen terkait dengan suatu himpunan. Dalam fuzzy, tingkat keanggotaan ditentukan oleh fungsi keanggotaan yang menunjukkan tingkat keanggotaan suatu elemen terhadap himpunan.
Fungsi keanggotaan adalah suatu fungsi yang menentukan tingkat keanggotaan suatu elemen x terhadap himpunan A. Fungsi keanggotaan harus memenuhi syarat-syarat sebagai berikut:
- Semua nilai dari fungsi keanggotaan harus berada dalam rentang [0, 1], dimana 0 menunjukkan bahwa elemen tidak memiliki keanggotaan sama sekali terhadap himpunan dan 1 menunjukkan bahwa elemen memiliki keanggotaan penuh terhadap himpunan.
- Fungsi keanggotaan harus monoton naik, yang berarti bahwa jika x <= y, maka f(x) <= f(y).
Secara umum, tingkat keanggotaan dari suatu elemen x terhadap suatu himpunan A dapat dihitung dengan menggunakan fungsi keanggotaan f sebagai berikut: f(x) = μA(x)
dimana μA adalah fungsi keanggotaan dari himpunan A. Tingkat keanggotaan ini menunjukkan seberapa jauh elemen x terkait dengan himpunan A.
Contoh, jika tingkat keanggotaan suatu elemen x terhadap himpunan “panas” adalah 0.8, ini berarti bahwa elemen x sangat mirip dengan elemen yang termasuk dalam himpunan “panas”, dengan tingkat keanggotaan yang tinggi, namun tidak sama persis dengan himpunan tersebut.
Himpunan Fuzzy
Himpunan fuzzy adalah konsep dasar dalam fuzzy yang menggambarkan tingkat keanggotaan suatu elemen terhadap suatu himpunan. Dalam logika fuzzy, sebuah elemen dapat memiliki tingkat keanggotaan yang tidak pasti atau “fuzzy” terhadap suatu himpunan, bukan hanya bernilai 0 atau 1 seperti dalam logika klasik.
Himpunan fuzzy didefinisikan oleh suatu fungsi keanggotaan yang menentukan tingkat keanggotaan suatu elemen terhadap himpunan. Fungsi keanggotaan ini harus memenuhi syarat-syarat sebagai berikut:
- Semua nilai dari fungsi keanggotaan harus berada dalam rentang [0, 1], dimana 0 menunjukkan bahwa elemen tidak memiliki keanggotaan sama sekali terhadap himpunan dan 1 menunjukkan bahwa elemen memiliki keanggotaan penuh terhadap himpunan.
- Fungsi keanggotaan harus monoton naik, yang berarti bahwa jika x <= y, maka f(x) <= f(y).
Ada beberapa jenis himpunan fuzzy yang umum digunakan, seperti himpunan fuzzy trapesium, himpunan fuzzy Gaussian, dan himpunan fuzzy sigmoid.
Setelah memahami konsep himpunan fuzzy, kita dapat melakukan beberapa pengoperasian dasar pada himpunan fuzzy, seperti:
- Operasi uni “∪”: operasi ini digunakan untuk menentukan himpunan fuzzy yang dihasilkan dari gabungan dua himpunan fuzzy. Operasi uni dapat dilakukan dengan menggunakan operator logika “atau” fuzzy (OR), yang digambarkan dengan simbol “∪”.
- Operasi interseksi “∩”: operasi ini digunakan untuk menentukan himpunan fuzzy yang dihasilkan dari perpotongan dua himpunan fuzzy. Operasi interseksi dapat dilakukan dengan menggunakan operator logika “dan” fuzzy (AND), yang digambarkan dengan simbol “∩”.
- Operasi negasi “~”: operasi ini digunakan untuk menentukan himpunan fuzzy yang dihasilkan dari negasi suatu himpunan fuzzy. Operasi negasi dapat dilakukan dengan menggunakan operator logika “bukan” fuzzy (NOT), yang digambarkan dengan simbol “~”.
- Operasi komplementer “`”: operasi ini digunakan untuk menentukan himpunan fuzzy yang dihasilkan dari komplementer suatu himpunan fuzzy. Operasi komplementer dapat dilakukan dengan menggunakan operator logika “komplementer” fuzzy (COMPL), yang digambarkan dengan simbol “`”.
- Operasi kartesian “x”: operasi ini digunakan untuk menentukan himpunan fuzzy yang dihasilkan dari produk kartesian dua himpunan fuzzy. Operasi kartesian dapat dilakukan dengan menggunakan operator logika “kartesian” fuzzy (CART), yang digambarkan dengan simbol “x”.
- Operasi universal “∀”: operasi ini digunakan untuk menentukan himpunan fuzzy yang dihasilkan dari universal dari suatu himpunan fuzzy. Operasi universal dapat dilakukan dengan menggunakan operator logika “universal” fuzzy (UNIV), yang digambarkan dengan simbol “∀”.
- Operasi eksistensial “∃”: operasi ini digunakan untuk menentukan himpunan fuzzy yang dihasilkan dari eksistensial dari suatu himpunan fuzzy. Operasi eksistensial dapat dilakukan dengan menggunakan operator logika “eksistensial” fuzzy (EXIS), yang digambarkan dengan simbol “∃”.
Inferensi fuzzy
Inferensi fuzzy adalah proses menggunakan aturan-aturan fuzzy untuk mengambil kesimpulan dari premis-premis yang tidak pasti atau tidak jelas. Inferensi fuzzy digunakan dalam sistem logika fuzzy untuk mengambil keputusan atau membuat suatu kesimpulan dari masukan yang tidak pasti atau tidak jelas.
Ada beberapa metode inferensi fuzzy yang umum digunakan, seperti:
- Metode inferensi Forward Chain: Metode ini mengevaluasi aturan-aturan fuzzy dari kondisi awal sampai kondisi akhir.
- Metode inferensi Backward Chain: Metode ini mengevaluasi aturan-aturan fuzzy dari kondisi akhir sampai kondisi awal.
- Metode inferensi Fuzzy Inference System (FIS): Metode ini mengevaluasi aturan-aturan fuzzy dengan menggunakan suatu sistem inferensi fuzzy yang didefinisikan oleh pengguna.
- Metode inferensi Mamdani : metode ini mengevaluasi aturan-aturan fuzzy dengan menggunakan metode inferensi fuzzy yang dikembangkan oleh Prof. Lotfi A. Zadeh dan diterapkan pada sistem kontrol fuzzy.
- Metode inferensi Tsukamoto : metode ini mengevaluasi aturan-aturan fuzzy dengan menggunakan metode inferensi fuzzy yang dikembangkan oleh Prof.Tsukamoto dan diterapkan pada sistem kontrol fuzzy
Sistem Inferensi Fuzzy (Fuzzy Inference System, FIS)
Sistem inferensi fuzzy (Fuzzy Inference System, FIS) adalah suatu sistem yang digunakan untuk mengevaluasi aturan-aturan logika dari fuzzy dan mengambil keputusan atau membuat kesimpulan dari masukan yang tidak pasti atau tidak jelas. FIS terdiri dari tiga bagian utama, yaitu:
- Sistem pengambilan keputusan: Sistem ini mengevaluasi aturan-aturan fuzzy dan mengambil keputusan atau membuat kesimpulan.
- Sistem inferensi: Sistem ini digunakan untuk mengevaluasi aturan-aturan fuzzy dan menentukan tingkat keanggotaan setiap keputusan atau kesimpulan.
- Sistem defuzzifikasi: Sistem ini digunakan untuk mengubah tingkat keanggotaan ke dalam nilai yang dapat diterima oleh sistem yang digunakan.
FIS digunakan untuk menangani masalah yang tidak pasti atau tidak jelas dengan mengevaluasi aturan-aturan logika fuzzy dan mengambil keputusan atau membuat kesimpulan yang sesuai dengan masukan yang tidak pasti atau tidak jelas seperti kontrol, sistem intelijen, dan pengambilan keputusan.
Logika Proposisional Fuzzy
Logika proposisional fuzzy adalah suatu cabang dari logika fuzzy yang menangani masalah logika proposisional (ya atau tidak) dengan menggunakan fuzzy. Logika proposisional fuzzy mengevaluasi aturan-aturan fuzzy yang digunakan untuk mengambil keputusan proposisional (ya atau tidak) dengan menggunakan tingkat keanggotaan fuzzy.
logika proposisional fuzzy tidak sama dengan logika klasik. Logika klasik hanya menangani masalah yang pasti atau biner (ya atau tidak) dan tidak dapat menangani masalah yang tidak pasti. Sementara itu, logika proposisional fuzzy adalah cabang dari ilmu fuzzy yang menangani masalah logika proposisional (ya atau tidak) dengan menggunakan logika dari fuzzy. logika proposisional fuzzy mengevaluasi aturan-aturan fuzzy yang digunakan untuk mengambil keputusan proposisional (ya atau tidak) dengan menggunakan tingkat keanggotaan fuzzy.
Metode inferensi yang digunakan:
- Logika fuzzy menggunakan berbagai macam metode inferensi seperti Forward Chain, Backward Chain, dan Fuzzy Inference System (FIS). Metode Mamdani dan Tsukamoto juga merupakan metode inferensi yang digunakan dalam fuzzy.
- Sementara itu, logika proposisional fuzzy biasanya menggunakan metode inferensi yang lebih sederhana, yaitu dengan mengevaluasi aturan logika proposisional fuzzy yang didefinisikan oleh pengguna.
Operator logika yang digunakan:
- Logika fuzzy menggunakan operator fuzzy seperti NOT, AND, OR, dan IMPLIES untuk menentukan tingkat keanggotaan suatu elemen terhadap suatu himpunan.
- Sedangkan logika proposisional fuzzy menggunakan operator logika seperti AND, OR, dan NOT untuk menentukan tingkat keanggotaan suatu proposisi terhadap suatu himpunan.
Aplikasi yang umum digunakan:
- Logika fuzzy digunakan dalam berbagai aplikasi, seperti kontrol, sistem intelijen, dan pengambilan keputusan.
- Sementara itu, logika proposisional fuzzy digunakan terutama dalam aplikasi logika proposisional, seperti pengambilan keputusan dan pemodelan sistem.
Kelebihan dan kekurangan dari kedua jenis logika:
- Logika fuzzy memiliki kelebihan dalam menangani masalah yang tidak pasti atau tidak jelas, seperti pengambilan keputusan, kontrol sistem, dan pemodelan sistem yang tidak pasti. Logika ini juga mampu menangani masalah yang memiliki banyak variabel yang saling terkait.
- Sementara itu, logika proposisional fuzzy memiliki kelebihan dalam menangani masalah logika proposisional dengan menggunakan tingkat keanggotaan fuzzy.
- Kelemahan dari logika fuzzy adalah kompleksitas dari metode inferensi yang digunakan, yang dapat menyulitkan implementasi dan interpretasi hasil. Logika proposisional fuzzy juga memiliki kelemahan dalam hal ini, yaitu kekurangan fleksibilitas dibandingkan dengan fuzzy.
Cara kerja dari kedua jenis logika:
- Logika fuzzy bekerja dengan mengevaluasi aturan-aturan fuzzy dan mengambil keputusan atau membuat kesimpulan yang sesuai dengan masukan yang tidak pasti atau tidak jelas.
- Logika proposisional fuzzy bekerja dengan mengevaluasi aturan-aturan logika proposisional fuzzy yang didefinisikan oleh pengguna dan menentukan tingkat keanggotaan proposisi terhadap himpunan.
Perbedaan dalam tingkat keanggotaan yang digunakan:
- Dalam fuzzy, tingkat keanggotaan ditentukan oleh fungsi keanggotaan yang menunjukkan tingkat keanggotaan suatu elemen terhadap himpunan.
- Sedangkan dalam logika proposisional fuzzy, tingkat keanggotaan ditentukan oleh tingkat keanggotaan proposisi terhadap himpunan.
Cara Membuat Fuzzy
Cara membuat logika ini dapat dilakukan dengan beberapa cara, termasuk:
- Menggunakan metode manual
- Menggunakan software khusus
- Menggunakan library dalam pemrograman
Menggunakan metode manual
Contoh ini adalah sistem fuzzy yang mengubah input suhu (dalam derajat Celcius) menjadi output kondisi suhu (dingin, sedang, atau panas).
- Buat 3 variabel fuzzy untuk input (suhu) yaitu “dingin”, “sedang”, dan “panas”.
- Buat 3 variabel fuzzy untuk output (kondisi suhu) yaitu “dingin”, “sedang”, dan “panas”.
- Buat sebuah aturan fuzzy yang menentukan hubungan antara input dan output. Misalnya:
- Jika suhu “dingin”, maka kondisi suhu “dingin”.
- Jika suhu “sedang”, maka kondisi suhu “sedang”.
- Jika suhu “panas”, maka kondisi suhu “panas”.
- Buat sebuah fungsi membership untuk setiap variabel fuzzy. Misalnya:
- Suhu “dingin” berkisar antara 0-15 derajat Celcius
- Suhu “sedang” berkisar antara 16-30 derajat Celcius
- Suhu “panas” berkisar antara 31-45 derajat Celcius
- Implementasikan aturan dan fungsi membership pada program Arduino.
- Terapkan logika dari fuzzy dengan mengambil input suhu dari sensor suhu yang terhubung pada Arduino, lalu menentukan output kondisi suhu berdasarkan aturan yang telah ditentukan.
Dari kondisi diatas, dapat dibuatkan kode program arduino fuzzy sebagai berikut:
#include <FuzzyLogic.h> // Include library Fuzzy Logic
FuzzyLogic fl; // Buat objek fl dari class FuzzyLogic
int suhu; // Variabel untuk menyimpan nilai suhu
void setup() {
// Pin sensor suhu
pinMode(A0, INPUT);
// Buat set input
fl.addInput("suhu", 0, 100); // Suhu dalam derajat Celcius
// Buat set output
fl.addOutput("kondisi_suhu", 0, 100);
// Buat variabel fuzzy untuk input suhu
fl.addFuzzyInput("dingin", FuzzyLogic::triangle, 0, 0, 15);
fl.addFuzzyInput("sedang", FuzzyLogic::triangle, 10, 15, 25);
fl.addFuzzyInput("panas", FuzzyLogic::triangle, 20, 30, 40);
// Buat variabel fuzzy untuk output kondisi_suhu
fl.addFuzzyOutput("dingin", FuzzyLogic::triangle, 0, 0, 15);
fl.addFuzzyOutput("sedang", FuzzyLogic::triangle, 10, 15, 25);
fl.addFuzzyOutput("panas", FuzzyLogic::triangle, 20, 30, 40);
// Buat aturan fuzzy
fl.addRule("if suhu is dingin then kondisi_suhu is dingin");
fl.addRule("if suhu is sedang then kondisi_suhu is sedang");
fl.addRule("if suhu is panas then kondisi_suhu is panas");
}
void loop() {
// Baca nilai suhu dari sensor
suhu = analogRead(A0);
// Set nilai input suhu
fl.setInput("suhu", suhu);
// Hitung output kondisi_suhu
fl.fuzzify();
// Ambil nilai output kondisi_suhu
int kondisi_suhu = fl.getOutput("kondisi_suhu");
// Tampilkan nilai output kondisi_suhu
Serial.println(kondisi_suhu);
// Tunggu sebentar
delay(1000);
}
Dalam pembuatan logika program fuzzy, yang paling penting adalah menentukan aturan fuzzy yang sesuai dengan masalah yang akan dipecahkan dan menentukan fungsi keanggotaan yang sesuai untuk setiap himpunan. Kemudian, aturan tersebut dapat dievaluasi dengan menggunakan software atau library yang tersedia.
Menggunakan software khusus
Ada beberapa software yang dapat digunakan untuk membuat logika-logika untuk fuzzy, seperti Matlab, Octave, dan Fuzzy Logic Toolbox. Software ini menyediakan alat-alat yang dibutuhkan untuk membuat aturan logika yang digunakan pada fuzzy dan mengevaluasinya.
Menggunakan library dalam pemrograman
Beberapa library seperti Scikit-Fuzzy dalam python menyediakan alat yang dibutuhkan untuk membuat fuzzy.
Software / Library
Beberapa software yang dapat digunakan untuk fuzzy adalah:
- Matlab Fuzzy Logic Toolbox
- Fuzzy Logic Toolbox for Scilab
- Fuzzy Control System Toolbox for Octave
- FuzzyCLIPS for CLIPS
- FuzzyLite for C++
- FuzzyJ Toolkit for Java
- pyFuzzy for Python
- FuzzyLite Libraries for C++, C#, Java, Python, and R.
Semua software yang disebutkan di atas dapat digunakan untuk membuat sistem fuzzy logika sesuai dengan kebutuhan.
Semoga artikel Apa itu Logika Fuzzy dan Cara Menggunakannya dapat menambah wawasan kita bersama.
Baca juga Daftar Semua Artikel