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:

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.


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