Algoritma FIS (Fuzzy Inference System): Tipe Tsukamoto 6


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:

KaryawanJam kerjaJumlah barangJumlah Gagal
Karyawan A45805
Karyawan B50927
Karyawan C43753
Karyawan D37724
Karyawan E39731
Karyawan F48812
Karyawan G35635
Karyawan H42713
Karyawan I40760
Karyawan J43792



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:

RuleJam KerjaJumlah BarangJumlah GagalFuzzy Output
R1SEDIKITSEDIKITBANYAKBURUK
R2SEDIKITSEDIKITSEDANGBURUK
R3SEDIKITSEDIKITSEDIKITBURUK
R4SEDIKITSEDANGBANYAKBURUK
R5SEDIKITSEDANGSEDANGBURUK
R6SEDIKITSEDANGSEDIKITBURUK
R7SEDIKITBANYAKBANYAKBURUK
R8SEDIKITBANYAKSEDANGBAIK
R9SEDIKITBANYAKSEDIKITBAIK
R10SEDANGSEDIKITBANYAKBURUK
R11SEDANGSEDIKITSEDANGBURUK
R12SEDANGSEDIKITSEDIKITBAIK
R13SEDANGSEDANGBANYAKBURUK
R14SEDANGSEDANGSEDANGBAIK
R15SEDANGSEDANGSEDIKITBAIK
R16SEDANGBANYAKBANYAKBURUK
R17SEDANGBANYAKSEDANGBAIK
R18SEDANGBANYAKSEDIKITBAIK
R19BANYAKSEDIKITBANYAKBURUK
R20BANYAKSEDIKITSEDANGBAIK
R21BANYAKSEDIKITSEDIKITBAIK
R22BANYAKSEDANGBANYAKBURUK
R23BANYAKSEDANGSEDANGBAIK
R24BANYAKSEDANGSEDIKITBAIK
R25BANYAKBANYAKBANYAKBAIK
R26BANYAKBANYAKSEDANGBAIK
R27BANYAKBANYAKSEDIKITBAIK

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)

cmd75

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.


Tinggalkan sebuah komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

6 pemikiran di “Algoritma FIS (Fuzzy Inference System): Tipe Tsukamoto

  • Ivan Septian

    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..

    • pip Penulis

      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.

  • Syaifudin

    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

    • pip Penulis

      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.

  • Muhamad Aufal

    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

    • pip Penulis

      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/