Algoritma FIS (Fuzzy Inference System) adalah salah satu algoritma yang digunakan untuk pengambilan keputusan. Contoh yang dibahas kali ini adalah mengenai penentuan nilai kinerja karyawan berdasarkan inputan yang ada.
Algoritma ini memiliki beberapa tipe teknik perhitungan yang digunakan, dan salah satu tipe yang digunakan adalah tipe yang ditemukan oleh Tsukamoto, oleh karena itu tipe ini dinamakan tipe Tsukamoto / Fuzzy Tsukamoto. Perhitungan Fuzzy Tsukamoto cukup mudah untuk diterapkan, tetapi algoritma ini tidak terkenal karena referensi jurnal yang kurang jelas, tidak seperti tipe Mamdani dan tipe Sugeno yang referensinya jauh lebih lengkap dan jelas.
Diasumsikan ada 10 data karyawan yang diketahui datanya, yaitu karyawan A, B, C, D, E, F, G, H, I, J
Masing-masing karyawan memiliki 3 nilai berdasarkan masing-masing kriteria yang ada
Maka tentukan nilai skor akhir dari masing-masing karyawan tersebut
Diasumsikan 10 data tersebut adalah sebagai berikut:
Karyawan | Jam kerja | Jumlah barang | Jumlah Gagal |
---|---|---|---|
Karyawan A | 45 | 80 | 5 |
Karyawan B | 50 | 92 | 7 |
Karyawan C | 43 | 75 | 3 |
Karyawan D | 37 | 72 | 4 |
Karyawan E | 39 | 73 | 1 |
Karyawan F | 48 | 81 | 2 |
Karyawan G | 35 | 63 | 5 |
Karyawan H | 42 | 71 | 3 |
Karyawan I | 40 | 76 | 0 |
Karyawan J | 43 | 79 | 2 |
Langkah pertama adalah memasukkan data-data yang digunakan.
Contoh data awal adalah sebagai berikut:
Dim data(9)() As Double data(0) = New Double() {45, 80, 5} data(1) = New Double() {50, 92, 7} data(2) = New Double() {43, 75, 3} data(3) = New Double() {37, 72, 4} data(4) = New Double() {39, 73, 1} data(5) = New Double() {48, 81, 2} data(6) = New Double() {35, 63, 5} data(7) = New Double() {42, 71, 3} data(8) = New Double() {40, 76, 0} data(9) = New Double() {43, 79, 2}
Langkah-langkah penggunaan algoritma ini adalah
1. Tentukan Kriteria Penilaian
Masing-masing kriteria akan dikelompokan ke dalam beberapa golongan
Diasumsikan dalam kasus ini, semua kriteria akan dibagi menjadi 3 golongan, yaitu sedikit, sedang, banyak
Kemudian perlu diingat bahwa jarak untuk masing-masing golongan harus sama
Sehingga, dalam kasus ini:
Jam Kerja : sedikit dimulai dari angka 35, sedang dimulai dari angka disekitar 42.5, banyak untuk nilai 50
Jumlah Barang: sedikit dimulai dari angka 0, sedang dimulai dari angka disekitar 50, banyak untuk nilai 100
Jumlah Gagal : sedikit dimulai dari angka 0, sedang dimulai dari angka disekitar 5, banyak untuk nilai 10
Dim KriteriaPenilaian(2)() As Double KriteriaPenilaian(0) = New Double() {35, 42.5, 50} KriteriaPenilaian(1) = New Double() {0, 50, 100} KriteriaPenilaian(2) = New Double() {0, 5, 10}
2. Tentukan Tabel Aturan / Rule Base System
Tabel Aturan adalah tabel yang digunakan untuk menentukan skor fuzzy yang sudah dihitung diatas masuk ke dalam Aturan yang mana.
Hasil output dari setiap aturan dapat diganti sesuai kebutuhan
Contoh Tabel Aturan adalah sebagai berikut:
Rule | Jam Kerja | Jumlah Barang | Jumlah Gagal | Fuzzy Output |
---|---|---|---|---|
R1 | SEDIKIT | SEDIKIT | BANYAK | BURUK |
R2 | SEDIKIT | SEDIKIT | SEDANG | BURUK |
R3 | SEDIKIT | SEDIKIT | SEDIKIT | BURUK |
R4 | SEDIKIT | SEDANG | BANYAK | BURUK |
R5 | SEDIKIT | SEDANG | SEDANG | BURUK |
R6 | SEDIKIT | SEDANG | SEDIKIT | BURUK |
R7 | SEDIKIT | BANYAK | BANYAK | BURUK |
R8 | SEDIKIT | BANYAK | SEDANG | BAIK |
R9 | SEDIKIT | BANYAK | SEDIKIT | BAIK |
R10 | SEDANG | SEDIKIT | BANYAK | BURUK |
R11 | SEDANG | SEDIKIT | SEDANG | BURUK |
R12 | SEDANG | SEDIKIT | SEDIKIT | BAIK |
R13 | SEDANG | SEDANG | BANYAK | BURUK |
R14 | SEDANG | SEDANG | SEDANG | BAIK |
R15 | SEDANG | SEDANG | SEDIKIT | BAIK |
R16 | SEDANG | BANYAK | BANYAK | BURUK |
R17 | SEDANG | BANYAK | SEDANG | BAIK |
R18 | SEDANG | BANYAK | SEDIKIT | BAIK |
R19 | BANYAK | SEDIKIT | BANYAK | BURUK |
R20 | BANYAK | SEDIKIT | SEDANG | BAIK |
R21 | BANYAK | SEDIKIT | SEDIKIT | BAIK |
R22 | BANYAK | SEDANG | BANYAK | BURUK |
R23 | BANYAK | SEDANG | SEDANG | BAIK |
R24 | BANYAK | SEDANG | SEDIKIT | BAIK |
R25 | BANYAK | BANYAK | BANYAK | BAIK |
R26 | BANYAK | BANYAK | SEDANG | BAIK |
R27 | BANYAK | BANYAK | SEDIKIT | BAIK |
Contoh penulisan tabel aturan adalah sebagai berikut:
Dim Aturan((KriteriaPenilaian(0).Length) * (KriteriaPenilaian(1).Length) * (KriteriaPenilaian(2).Length) - 1)() As Integer Aturan(0) = New Integer() {0, 0, 2, 0} Aturan(1) = New Integer() {0, 0, 1, 0} Aturan(2) = New Integer() {0, 0, 0, 0} Aturan(3) = New Integer() {0, 1, 2, 0} Aturan(4) = New Integer() {0, 1, 1, 0} Aturan(5) = New Integer() {0, 1, 0, 0} Aturan(6) = New Integer() {0, 2, 2, 0} Aturan(7) = New Integer() {0, 2, 1, 1} Aturan(8) = New Integer() {0, 2, 0, 1} Aturan(9) = New Integer() {1, 0, 2, 0} Aturan(10) = New Integer() {1, 0, 1, 0} Aturan(11) = New Integer() {1, 0, 0, 1} Aturan(12) = New Integer() {1, 1, 2, 0} Aturan(13) = New Integer() {1, 1, 1, 1} Aturan(14) = New Integer() {1, 1, 0, 1} Aturan(15) = New Integer() {1, 2, 2, 0} Aturan(16) = New Integer() {1, 2, 1, 1} Aturan(17) = New Integer() {1, 2, 0, 1} Aturan(18) = New Integer() {2, 0, 2, 0} Aturan(19) = New Integer() {2, 0, 1, 1} Aturan(20) = New Integer() {2, 0, 0, 1} Aturan(21) = New Integer() {2, 1, 2, 0} Aturan(22) = New Integer() {2, 1, 1, 1} Aturan(23) = New Integer() {2, 1, 0, 1} Aturan(24) = New Integer() {2, 2, 2, 1} Aturan(25) = New Integer() {2, 2, 1, 1} Aturan(26) = New Integer() {2, 2, 0, 1}
3. Konversi Data awal menjadi skor fuzzy input
Setelah menentukan kriteria penilaian, maka lakukan konversi skor tersebut.
Kelompokan skor inputan kedalam golongan rendah / sedang / tinggi sesuai kriteria diatas, kemudian hitung skor fuzzy nya sesuai rumus yang ditentukan
Jika sebuah inputan termasuk dalam golongan rendah dan sedang, maka hitunglah skor fuzzy nya sebanyak 2 kali, yaitu untuk skor golongan rendah dan skor golongan sedang.
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini
For j As Integer = 0 To KriteriaPenilaian(0).Length - 1 skorFuzzy(j) = HitungSkorFuzzy(KriteriaPenilaian(j)(0), KriteriaPenilaian(j)(1), KriteriaPenilaian(j)(2), data(i)(j)) Next
Memasuki perhitungan pada fungsi HitungSkorFuzzy (poin 3a – 3c)
3a. Lakukan perhitungan ini apabila nilai input berada pada himpunan fuzzy rendah
If input <= BatasTengah Then If input < BatasBawah Then u(0) = 1 ElseIf input > BatasTengah Then u(0) = 0 Else u(0) = (BatasTengah - input) / (BatasTengah - BatasBawah) End If End If
3b. Lakukan perhitungan ini apabila nilai input berada pada himpunan fuzzy sedang
If input >= BatasBawah And input <= BatasAtas Then If input < BatasBawah Or input > BatasAtas Then u(1) = 0 ElseIf input >= BatasBawah And input <= BatasTengah Then u(1) = (input - BatasBawah) / (BatasTengah - BatasBawah) ElseIf input >= BatasTengah And input <= BatasAtas Then u(1) = (BatasAtas - input) / (BatasAtas - BatasTengah) End If End If
3c. Lakukan perhitungan ini apabila nilai input berada pada himpunan fuzzy tinggi
If input >= BatasTengah Then If input < BatasTengah Then u(2) = 0 ElseIf input > BatasAtas Then u(2) = 1 Else u(2) = (input - BatasTengah) / (BatasAtas - BatasTengah) End If End If
4. Lakukan perulangan pada semua nilai skor fuzzy yang telah ditemukan (poin 4a – 4c)
For iKriteria1 As Integer = 0 To KriteriaPenilaian(0).Length - 1 For iKriteria2 As Integer = 0 To KriteriaPenilaian(1).Length - 1 For iKriteria3 As Integer = KriteriaPenilaian(2).Length - 1 To 0 Step -1 . . .
4a. Tentukan nilai bobot, yaitu nilai minimal dari nilai skor fuzzy yang sedang terpilih
bobot(idxBobot) = Math.Min(Math.Min(skorFuzzy(0)(iKriteria1), skorFuzzy(1)(iKriteria2)), skorFuzzy(2)(iKriteria3))
4b. Hitung nilai Z
Penjelasan lebih detail tentang fungsi ini dapat dilihat pada penjelasan skrip dibawah ini (poin 4b1 – 4b2)
Z(idxBobot) = HitungZ(0, 100, iKriteria1, iKriteria2, iKriteria3, bobot(idxBobot), Aturan)
Memasuki perhitungan pada fungsi HitungZ
* Lakukan perhitungan pada setiap aturan yang dibuat
For i As Integer = 0 To aturan.Length - 1 . . .
4b1. Lakukan perhitungan ini apabila nilai fuzzy output adalah BURUK
If aturan(i)(0) = idxKriteria1 AndAlso aturan(i)(1) = idxKriteria2 AndAlso aturan(i)(2) = idxKriteria3 AndAlso aturan(i)(3) = 0 Then z = BatasAtas - (bobot * (BatasAtas - BatasBawah)) Exit For End If
4b2. Lakukan perhitungan ini apabila nilai fuzzy output adalah BAIK
If aturan(i)(0) = idxKriteria1 AndAlso aturan(i)(1) = idxKriteria2 AndAlso aturan(i)(2) = idxKriteria3 AndAlso aturan(i)(3) = 1 Then z = (bobot * (BatasAtas - BatasBawah)) + BatasBawah Exit For End If
5. Hitung nilai skor akhir pada masing-masing data
skorAkhir(i) = totalBobotKaliZ / totalBobot
Hasil akhir adalah: (klik untuk perbesar gambar)
Contoh modul / source code dalam bahasa VB (Visual Basic) dapat didownload disini:
Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.
Permisi gan.. Kalau pengontrolan arus listrik rumah tangga apakah bisa menggunakan algoritma ini? Jadi jika daya yang mencapai batas maka listrik itu akan off dengan sendirinya.. Intinya sepert itu.. Mohon saran ya.. Terima kasih..
Dengan informasi yang masih minimal seperti ini, saya masih belum menemukan cara mengimplementasi algoritma ini pada kasus anda. Silahkan coba diceritakan secara lebih detail untuk memeudahkan saya menganalisa. Mungkin nantinya saya mendapatkan pencerahan setelah memahami alur sistem dari topik tersebut.
hallo , saya ingin bertanya tentang aplikasi penggajian karyawan , apakah bisa menggunakan algoritma ini ?
jika tidak bisa , mohon saranya untuk algoritma sebuah aplikasi penggajian karyawan
terima kasih
Penggunaan algoritma ini tentunya bergantung dari tujuan apakah yang ingin anda capai pada sistem penggajian karyawan tersebut. Tanpa mengetahui secara detail mengenai sistem penggajian tersebut saya tidak dapat mengetahui apakah algoritma ini dapat diterapkan atau tidak. Silahkan anda ceritakan terlebih dahulu mengenai kasus tersebut.
mohon saran bantuannya min, algoritma fuzzy jika diterapkan dalam sistem otomasi elektrikal seperti apa analisanya. kasus : dalam sebuah ruangan kantor terdapat lampu yang akan menyala terus sesuai dengan jam operasional, ada maupun tidak ada orang didalam ruangan tersebut. untuk mengurangi pemborosan dan efisiensi energi saya ingin menerapkan algoritma fuzzy dalam sistem otomasi ini. Jadi jika ada orang masuk lampu akan menyala, dan ketika tidak ada orang akan mati otomatis. juga dari total energi yang dibutuhkan ingin di optimalisasi sesuai dengan jumlah orang yang ada diruangan, jika yang masuk ruangan sekian maka lampu menyala sekian (tidak menyala semua).
terima kasih
Berdasarkan deskripsi yang anda berikan sebelumnya, mengingat terdapat permasalahan optimasi maka sepertinya algoritma ini jika berdiri sendiri tidak cocok untuk diterapkan untuk menyelesaikan kasus tersebut. Algoritma yang diperlukan adalah algoritma yang dapat menyelesaikan permasalahan optimasi, seperti beberapa algoritma yang terdapat pada kategori optimasi https://piptools.net/category/algoritma/algoritma-optimasi/